version: '3.8' services: # 后端服务 backend: build: context: ./backend dockerfile: Dockerfile container_name: footprint-backend ports: - "5000:5000" environment: - PORT=5000 - NODE_ENV=production - DATABASE_PATH=/app/database/footprint.db - JWT_SECRET=${JWT_SECRET:-your-super-secret-jwt-key} - SESSION_SECRET=${SESSION_SECRET:-your-session-secret} - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} - GOOGLE_CALLBACK_URL=${GOOGLE_CALLBACK_URL:-http://localhost:5000/auth/google/callback} - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID} - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET} - GITHUB_CALLBACK_URL=${GITHUB_CALLBACK_URL:-http://localhost:5000/auth/github/callback} - FRONTEND_URL=${FRONTEND_URL:-http://localhost:3000} volumes: - ./backend/database:/app/database - ./backend/.env:/app/.env restart: unless-stopped networks: - footprint-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5000/health"] interval: 30s timeout: 10s retries: 3 # 前端服务 frontend: build: context: ./frontend dockerfile: Dockerfile container_name: footprint-frontend ports: - "3000:80" environment: - REACT_APP_API_URL=http://localhost:5000 depends_on: - backend restart: unless-stopped networks: - footprint-network networks: footprint-network: driver: bridge volumes: db-data: