services: mysql: image: mysql:8.0 container_name: fitpick-mysql restart: always environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} volumes: - mysql-data:/var/lib/mysql command: > --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD}"] interval: 5s timeout: 3s retries: 20 app: build: context: . dockerfile: Dockerfile container_name: fitpick-app restart: always depends_on: mysql: condition: service_healthy ports: - "8080:8080" environment: SPRING_PROFILES_ACTIVE: prod DB_HOST: mysql DB_PORT: 3306 DB_NAME: ${MYSQL_DATABASE} DB_USERNAME: ${MYSQL_USER} DB_PASSWORD: ${MYSQL_PASSWORD} JWT_SECRET: ${JWT_SECRET} JWT_ACCESS_TOKEN_EXPIRATION_MS: ${JWT_ACCESS_TOKEN_EXPIRATION_MS} OPENAI_API_KEY: ${OPENAI_API_KEY} FIREBASE_CREDENTIALS_PATH: /app/firebase-key.json FIREBASE_ENABLED: ${FIREBASE_ENABLED:-true} volumes: # 호스트 ~/FitPick_BE/firebase-key.json → 컨테이너 /app/firebase-key.json (read-only) - ./firebase-key.json:/app/firebase-key.json:ro volumes: mysql-data: