# Pokedex.Online Production Docker Compose # Multi-container setup with frontend (nginx) and backend (Node.js) services: # Frontend - Nginx serving built Vue.js app frontend: build: context: . dockerfile: Dockerfile.frontend container_name: pokedex-frontend ports: - '8099:80' depends_on: backend: condition: service_healthy restart: unless-stopped networks: - pokedex-network healthcheck: test: [ 'CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:80/' ] interval: 30s timeout: 10s retries: 3 start_period: 40s # Backend - Node.js API server backend: build: context: ./server dockerfile: Dockerfile container_name: pokedex-backend ports: - '3099:3000' environment: - NODE_ENV=production - PORT=3000 # OAuth credentials loaded from .env file - CHALLONGE_CLIENT_ID=${CHALLONGE_CLIENT_ID} - CHALLONGE_CLIENT_SECRET=${CHALLONGE_CLIENT_SECRET} - REDIRECT_URI=${REDIRECT_URI} - SESSION_SECRET=${SESSION_SECRET} env_file: - ./server/.env volumes: # Persist OAuth session data - ./server/data:/app/data # Persist logs - ./server/logs:/app/logs restart: unless-stopped networks: - pokedex-network healthcheck: test: [ 'CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:3000/health' ] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: pokedex-network: driver: bridge volumes: backend-data: driver: local backend-logs: driver: local