# Flask API 服务 Docker Compose 配置 # =================================== version: '3.8' services: etf-data-fetcher: build: context: . dockerfile: Dockerfile.flask image: 192.168.0.115:5000/etf-data-fetcher:latest container_name: etf-data-fetcher ports: - "5000:5000" environment: # Flask 配置 - FLASK_ENV=production - PYTHONUNBUFFERED=1 # SSH 隧道配置(可选,启用后可获取港美股数据) - SSH_ENABLED=${SSH_ENABLED:-false} - SSH_HOST=${SSH_HOST:-8.218.167.69} - SSH_PORT=${SSH_PORT:-22} - SSH_USERNAME=${SSH_USERNAME:-root} - SSH_KEY_PATH=${SSH_KEY_PATH:-hk_ecs.pem} - SSH_LOCAL_PORT=${SSH_LOCAL_PORT:-1080} volumes: # 环境变量配置(必需:TUSHARE_TOKEN) - ./.env:/app/.env:ro # SSH 私钥(可选,获取港美股数据需要) - ./hk_ecs.pem:/app/hk_ecs.pem:ro # 数据目录(可选,用于持久化缓存) - ./data:/app/data # 日志目录 - ./logs:/app/logs # 健康检查 healthcheck: test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:5000/health')"] interval: 30s timeout: 10s retries: 3 start_period: 10s # 重启策略 restart: unless-stopped # 资源限制 deploy: resources: limits: cpus: '2.0' memory: 2G reservations: cpus: '0.5' memory: 512M # 可选:Nginx 反向代理 nginx: image: nginx:alpine container_name: etf-data-fetcher-nginx ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - etf-data-fetcher restart: unless-stopped profiles: - with-nginx networks: default: name: etf-network