version: '3.8' services: mysql: image: mysql:8.0 container_name: synclayer-mysql-prod environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: synclayer MYSQL_USER: synclayer_user MYSQL_PASSWORD: ${MYSQL_PASSWORD} ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql networks: - synclayer restart: unless-stopped redis: image: redis:7-alpine container_name: synclayer-redis-prod command: redis-server --requirepass ${REDIS_PASSWORD} ports: - "6379:6379" volumes: - redis_data:/data networks: - synclayer restart: unless-stopped backend: build: context: ./backend dockerfile: Dockerfile container_name: synclayer-backend-prod environment: NODE_ENV: production PORT: 3000 MYSQL_HOST: mysql MYSQL_PORT: 3306 MYSQL_USER: synclayer_user MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: synclayer REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: ${REDIS_PASSWORD} GOOGLE_SHEET_ID: ${GOOGLE_SHEET_ID} GOOGLE_SERVICE_ACCOUNT_KEY_PATH: /secrets/service-account-key.json SYNC_INTERVAL_MS: 3000 ports: - "3000:3000" volumes: - ./backend/service-account-key.json:/secrets/service-account-key.json:ro networks: - synclayer depends_on: - mysql - redis restart: unless-stopped frontend: build: context: ./frontend dockerfile: Dockerfile container_name: synclayer-frontend-prod ports: - "80:80" networks: - synclayer depends_on: - backend restart: unless-stopped networks: synclayer: driver: bridge volumes: mysql_data: redis_data: