version: '3.8' services: mysql: image: mysql:8.0 container_name: gala-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-gala_root_pass} - MYSQL_DATABASE=${MYSQL_DATABASE:-gala_db} - MYSQL_USER=${MYSQL_USER:-gala_user} - MYSQL_PASSWORD=${MYSQL_PASSWORD:-gala_pass} volumes: - mysql_data:/var/lib/mysql networks: - gala-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: gala-redis restart: unless-stopped volumes: - redis_data:/data networks: - gala-network server: build: context: . dockerfile: packages/server/Dockerfile container_name: gala-server restart: unless-stopped environment: - NODE_ENV=production - PORT=3000 - REDIS_HOST=redis - REDIS_PORT=6379 - CORS_ORIGINS=${CORS_ORIGINS:-*} - DATABASE_URL=mysql://${MYSQL_USER:-gala_user}:${MYSQL_PASSWORD:-gala_pass}@mysql:3306/${MYSQL_DATABASE:-gala_db} - WECHAT_APP_ID=${WECHAT_APP_ID} - WECHAT_APP_SECRET=${WECHAT_APP_SECRET} - WECHAT_REDIRECT_URI=${WECHAT_REDIRECT_URI} depends_on: mysql: condition: service_healthy redis: condition: service_started networks: - gala-network caddy: build: context: . dockerfile: deploy/Dockerfile.caddy args: - VITE_SOCKET_URL=${VITE_SOCKET_URL:-} - VITE_API_URL=${VITE_API_URL:-} - VITE_MOBILE_URL=${VITE_MOBILE_URL:-} container_name: gala-caddy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - caddy_data:/data - caddy_config:/config depends_on: - server networks: - gala-network volumes: mysql_data: redis_data: caddy_data: caddy_config: networks: gala-network: driver: bridge