优化:已知问题

This commit is contained in:
2025-07-22 13:27:07 +08:00
parent 2b5ff62ff0
commit 505afb8c0d
29 changed files with 2144 additions and 6 deletions

105
docker-compose.prod.yml Normal file
View File

@@ -0,0 +1,105 @@
version: '3.8'
services:
# 前端应用
ai-chat-web:
build:
context: .
dockerfile: Dockerfile.prod
args:
- NODE_ENV=production
image: ai-chat:latest
container_name: ai-chat-web-prod
restart: unless-stopped
ports:
- "80:80"
environment:
- TZ=Asia/Shanghai
- NODE_ENV=production
volumes:
- ./logs/nginx:/var/log/nginx
- ./ssl:/etc/nginx/ssl:ro # SSL证书目录如果需要HTTPS
networks:
- ai-chat-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
labels:
- "traefik.enable=true"
- "traefik.http.routers.ai-chat.rule=Host(`your-domain.com`)"
- "traefik.http.services.ai-chat.loadbalancer.server.port=80"
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
# 反向代理可选用于HTTPS和负载均衡
nginx-proxy:
image: nginx:1.25-alpine
container_name: ai-chat-proxy-prod
restart: unless-stopped
ports:
- "443:443"
volumes:
- ./nginx-proxy.conf:/etc/nginx/conf.d/default.conf:ro
- ./ssl:/etc/nginx/ssl:ro
- ./logs/proxy:/var/log/nginx
depends_on:
- ai-chat-web
networks:
- ai-chat-network
profiles:
- https # 使用profile控制HTTPS代理
healthcheck:
test: ["CMD", "nginx", "-t"]
interval: 30s
timeout: 10s
retries: 3
# 监控服务(可选)
watchtower:
image: containrrr/watchtower
container_name: ai-chat-watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=3600 # 每小时检查一次更新
- WATCHTOWER_INCLUDE_STOPPED=true
profiles:
- monitoring
command: ai-chat-web-prod
# 日志收集(可选)
promtail:
image: grafana/promtail:latest
container_name: ai-chat-promtail
restart: unless-stopped
volumes:
- ./logs:/var/log/app:ro
- ./promtail-config.yml:/etc/promtail/config.yml:ro
networks:
- ai-chat-network
profiles:
- logging
networks:
ai-chat-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
volumes:
nginx-logs:
driver: local
ssl-certs:
driver: local