appointment_system/server/docker-compose.yml
2025-12-20 18:04:10 +08:00

68 lines
1.9 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 生产环境 Docker Compose 配置
# 使用外部 MySQL 和 Redis 服务
# 只暴露一个端口SSL 由外部代理处理
services:
# Backend API Service
api:
build:
context: ../backend
dockerfile: Dockerfile
container_name: overseas-appointment-api
restart: unless-stopped
expose:
- "3000"
environment:
- NODE_ENV=production
- PORT=3000
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT:-3306}
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-7d}
- JWT_REFRESH_EXPIRES_IN=${JWT_REFRESH_EXPIRES_IN:-30d}
- WECHAT_APP_ID=${WECHAT_APP_ID:-}
- WECHAT_APP_SECRET=${WECHAT_APP_SECRET:-}
- UPLOAD_PATH=/app/uploads
- MAX_FILE_SIZE=${MAX_FILE_SIZE:-5242880}
- RATE_LIMIT_WINDOW=${RATE_LIMIT_WINDOW:-60000}
- RATE_LIMIT_MAX=${RATE_LIMIT_MAX:-100}
- LOG_LEVEL=${LOG_LEVEL:-info}
volumes:
- ./data/uploads:/app/uploads
- ./data/logs/api:/app/logs
networks:
- app-network
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Nginx - 托管 Admin 静态文件 + 代理 API
nginx:
image: nginx:alpine
container_name: overseas-appointment-nginx
restart: unless-stopped
ports:
- "${APP_PORT:-2701}:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./admin-dist:/usr/share/nginx/html/admin:ro
- ./data/logs/nginx:/var/log/nginx
depends_on:
- api
networks:
- app-network
networks:
app-network:
driver: bridge