version: '3.8' services: # Nginx反向代理 nginx: image: nginx:alpine container_name: stockagent-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro - ./logs/nginx:/var/log/nginx depends_on: - frontend - backend networks: - stockagent-network # Redis缓存服务 redis: image: redis:7-alpine container_name: stockagent-redis restart: unless-stopped ports: - "127.0.0.1:6379:6379" # 只绑定到本地 volumes: - redis_data:/data - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro command: redis-server /usr/local/etc/redis/redis.conf networks: - stockagent-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 deploy: resources: limits: memory: 512M reservations: memory: 256M # 后端API服务 backend: build: context: . dockerfile: Dockerfile.backend container_name: stockagent-backend restart: unless-stopped expose: - "8000" environment: - TUSHARE_TOKEN=${TUSHARE_TOKEN} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_DB=0 - API_HOST=0.0.0.0 - API_PORT=8050 - LOG_LEVEL=INFO volumes: - ./logs:/app/logs - ./config:/app/config depends_on: redis: condition: service_healthy networks: - stockagent-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8050/"] interval: 30s timeout: 10s retries: 3 start_period: 40s deploy: resources: limits: memory: 1G cpus: '0.5' reservations: memory: 512M cpus: '0.25' # 前端Web服务 frontend: build: context: . dockerfile: Dockerfile.frontend container_name: stockagent-frontend restart: unless-stopped expose: - "5001" environment: - API_BASE_URL=http://backend:8050/api - FLASK_ENV=production depends_on: backend: condition: service_healthy networks: - stockagent-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5001/"] interval: 30s timeout: 10s retries: 3 start_period: 20s deploy: resources: limits: memory: 256M cpus: '0.25' reservations: memory: 128M cpus: '0.1' # 日志收集器(可选) # logrotate: # image: tutum/logrotate # container_name: stockagent-logrotate # restart: unless-stopped # volumes: # - ./logs:/logs # environment: # - LOGS_DIRECTORIES=/logs # 网络配置 networks: stockagent-network: driver: bridge name: stockagent-network # 数据卷配置 volumes: redis_data: driver: local name: stockagent-redis-data