version: '3.8' services: # PostgreSQL 데이터베이스 db: image: postgres:15-alpine container_name: m-project-db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-mproject} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB:-mproject} TZ: Asia/Seoul PGTZ: Asia/Seoul volumes: - postgres_data:/var/lib/postgresql/data - ./init-db:/docker-entrypoint-initdb.d ports: - "16432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mproject}"] interval: 10s timeout: 5s retries: 5 networks: - m-project-network # FastAPI 백엔드 backend: build: ./backend container_name: m-project-backend restart: unless-stopped environment: DATABASE_URL: postgresql://${POSTGRES_USER:-mproject}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-mproject} SECRET_KEY: ${SECRET_KEY} ALGORITHM: HS256 ACCESS_TOKEN_EXPIRE_MINUTES: 10080 ADMIN_USERNAME: ${ADMIN_USERNAME:-hyungi} ADMIN_PASSWORD: ${ADMIN_PASSWORD} TZ: Asia/Seoul volumes: - uploads:/app/uploads ports: - "16000:8000" depends_on: db: condition: service_healthy logging: driver: "json-file" options: max-size: "10m" max-file: "3" networks: - m-project-network # Nginx 프론트엔드 nginx: build: ./nginx container_name: m-project-nginx restart: unless-stopped ports: - "16080:80" volumes: - ./frontend:/usr/share/nginx/html:ro - uploads:/app/uploads depends_on: - backend networks: - m-project-network volumes: postgres_data: driver: local uploads: driver: local networks: m-project-network: driver: bridge name: m-project-network