Files
Scoring-System/docker-compose.yml
2026-03-18 23:07:19 +08:00

86 lines
2.2 KiB
YAML

version: '3.8'
services:
# 后端服务
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: scoring_backend
restart: always
volumes:
- ./backend/media:/app/media
- ./backend/static:/app/static
ports:
- "8876:8876"
environment:
- DEBUG=False
- SECRET_KEY=${SECRET_KEY:-your-secret-key-change-this}
- DB_NAME=${DB_NAME:-scoring_system}
- DB_USER=${DB_USER:-postgres}
- DB_PASSWORD=${DB_PASSWORD:-password}
- DB_HOST=${DB_HOST:-localhost}
- DB_PORT=${DB_PORT:-5432}
- WECHAT_APPID=${WECHAT_APPID}
- WECHAT_SECRET=${WECHAT_SECRET}
- WECHAT_MCHID=${WECHAT_MCHID}
- WECHAT_API_KEY=${WECHAT_API_KEY}
- ALIYUN_ACCESS_KEY_ID=${ALIYUN_ACCESS_KEY_ID}
- ALIYUN_ACCESS_KEY_SECRET=${ALIYUN_ACCESS_KEY_SECRET}
- ALIYUN_OSS_ENDPOINT=${ALIYUN_OSS_ENDPOINT}
- ALIYUN_OSS_BUCKET_NAME=${ALIYUN_OSS_BUCKET_NAME}
- ALIYUN_TINGWU_APP_KEY=${ALIYUN_TINGWU_APP_KEY}
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
networks:
- scoring_network
healthcheck:
test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:8000/api/health/')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# 前端服务 (Nginx)
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
- VITE_API_URL=/api
container_name: scoring_frontend
restart: always
ports:
- "80:80"
depends_on:
backend:
condition: service_healthy
networks:
- scoring_network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
# Nginx 反向代理 (可选,用于负载均衡和 SSL)
nginx:
image: nginx:alpine
container_name: scoring_nginx
restart: always
ports:
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
depends_on:
- frontend
- backend
networks:
- scoring_network
profiles:
- ssl # 只在需要 SSL 时启动
networks:
scoring_network:
driver: bridge