version: '3.8' services: stock-monitor: build: context: .. dockerfile: docker/Dockerfile container_name: stock-monitor-prod ports: - "8000:8000" volumes: - ../logs:/app/logs - ../data:/app/data - ../config.json:/app/config.json environment: - PYTHONUNBUFFERED=1 - DEBUG=false restart: always depends_on: - postgres - redis networks: - stock-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s redis: image: redis:7-alpine container_name: stock-redis-prod ports: - "127.0.0.1:6379:6379" volumes: - redis_data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf restart: always networks: - stock-network postgres: image: postgres:15-alpine container_name: stock-postgres-prod ports: - "127.0.0.1:5432:5432" environment: POSTGRES_DB: stock_monitor POSTGRES_USER: stock_user POSTGRES_PASSWORD: stock_password POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql restart: always networks: - stock-network # Nginx反向代理 nginx: image: nginx:alpine container_name: stock-nginx ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - stock-monitor restart: always networks: - stock-network networks: stock-network: driver: bridge volumes: redis_data: postgres_data: