version: '3.8' services: # PostgreSQL 데이터베이스 postgres: image: postgres:15-alpine container_name: tk-mp-postgres restart: unless-stopped environment: POSTGRES_DB: tk_mp_bom POSTGRES_USER: tkmp_user POSTGRES_PASSWORD: tkmp_password_2025 POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C" ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./database/init:/docker-entrypoint-initdb.d networks: - tk-mp-network # pgAdmin 웹 관리도구 pgadmin: image: dpage/pgadmin4:latest container_name: tk-mp-pgadmin restart: unless-stopped environment: PGADMIN_DEFAULT_EMAIL: admin@example.com PGADMIN_DEFAULT_PASSWORD: admin2025 PGADMIN_CONFIG_SERVER_MODE: 'False' ports: - "5050:80" volumes: - pgadmin_data:/var/lib/pgadmin depends_on: - postgres networks: - tk-mp-network # Redis (캐시 및 세션 관리용) redis: image: redis:7-alpine container_name: tk-mp-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data networks: - tk-mp-network # 백엔드 FastAPI 서비스 backend: build: context: ./backend dockerfile: Dockerfile container_name: tk-mp-backend restart: unless-stopped ports: - "18000:8000" environment: - DATABASE_URL=postgresql://tkmp_user:tkmp_password_2025@postgres:5432/tk_mp_bom - REDIS_URL=redis://redis:6379 depends_on: - postgres - redis networks: - tk-mp-network volumes: - ./backend/uploads:/app/uploads # 프론트엔드 Nginx 서비스 frontend: build: context: ./frontend dockerfile: Dockerfile args: - VITE_API_URL=${VITE_API_URL:-/api} container_name: tk-mp-frontend restart: unless-stopped ports: - "13000:3000" environment: - VITE_API_URL=${VITE_API_URL:-/api} depends_on: - backend networks: - tk-mp-network volumes: postgres_data: driver: local pgadmin_data: driver: local redis_data: driver: local networks: tk-mp-network: driver: bridge