增加docke部署

This commit is contained in:
2026-04-10 16:44:13 +08:00
parent e2f8054794
commit cd4ddb606d
5076 changed files with 701092 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
version: '3.8'
services:
# ========== Nginx 反向代理 + SSL 终端 ==========
# 域名通过 .env 注入nginx 启动时 envsubst 自动替换模板中的变量
nginx:
image: nginx:alpine
container_name: youle-nginx
ports:
- "${NGINX_PORT:-80}:80"
- "${NGINX_SSL_PORT:-443}:443"
volumes:
- ./docker/nginx/default.conf.template:/etc/nginx/templates/default.conf.template:ro
- ./docker/nginx/ssl-params.conf:/etc/nginx/snippets/ssl-params.conf:ro
- certbot-webroot:/var/www/certbot:ro
- certbot-certs:/etc/letsencrypt:ro
environment:
# 只替换这 3 个变量,不影响 nginx 内置的 $host $scheme 等
NGINX_ENVSUBST_FILTER: "API_DOMAIN|DLWEB_DOMAIN|WX_DOMAIN"
API_DOMAIN: ${API_DOMAIN}
DLWEB_DOMAIN: ${DLWEB_DOMAIN}
WX_DOMAIN: ${WX_DOMAIN}
depends_on:
- api
- dlweb
- wxserver
restart: unless-stopped
networks:
- youle-net
# ========== Certbot (Let's Encrypt 证书自动续签) ==========
# 每 12 小时检查一次证书是否需要续签
certbot:
image: certbot/certbot:latest
container_name: youle-certbot
volumes:
- certbot-webroot:/var/www/certbot
- certbot-certs:/etc/letsencrypt
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot --quiet; sleep 12h & wait $${!}; done'"
restart: unless-stopped
networks:
- youle-net
# ========== 网站1: API 服务 (游戏核心接口) ==========
# 网站目录: game-docker/api → 容器内 /var/www/html
api:
build:
context: .
dockerfile: docker/api/Dockerfile
container_name: youle-api
ports:
- "${API_PORT:-8081}:80"
env_file:
- .env
volumes:
- api-logs:/var/www/html/logs
- api-source-logs:/var/www/html/source/logs
restart: unless-stopped
networks:
- youle-net
# ========== 网站2: DLWEB 服务 (代理管理后台) ==========
# 网站目录: game-docker/dlweb/api → 容器内 /var/www/html/api (DocumentRoot)
dlweb:
build:
context: .
dockerfile: docker/dlweb/Dockerfile
container_name: youle-dlweb
ports:
- "${DLWEB_PORT:-8082}:80"
env_file:
- .env
volumes:
- dlweb-logs:/var/www/html/api/logs
- dlweb-debug:/var/www/html/api/ext/debug
restart: unless-stopped
networks:
- youle-net
# ========== 网站3: wxserver 服务 (微信小程序后端) ==========
# 网站目录: game-docker/wxserver_daoqi → 容器内 /app
wxserver:
build:
context: .
dockerfile: docker/wxserver/Dockerfile
container_name: youle-wxserver
ports:
- "${WXSERVER_PORT:-3000}:3000"
env_file:
- .env
environment:
- NODE_ENV=production
restart: unless-stopped
networks:
- youle-net
# ========== 定时同步任务 (Synchronize.php) ==========
# 每 30 秒通过 Docker 内网 POST 请求 dlweb不走域名/公网流量
syncjob:
image: alpine:3.19
container_name: youle-syncjob
entrypoint: ["/bin/sh", "/app/sync.sh"]
volumes:
- ./docker/syncjob/sync.sh:/app/sync.sh:ro
- shared-signal:/shared
environment:
SYNC_URL: "http://dlweb/ext/Synchronize.php"
SYNC_INTERVAL: "${SYNC_INTERVAL:-30}"
SYNC_PROCESSCOUNT: "${SYNC_PROCESSCOUNT:-200}"
depends_on:
- dlweb
restart: unless-stopped
networks:
- youle-net
# ========== 每日定时任务 (替代 Windows autorun.cmd) ==========
# 默认凌晨 4:00 执行报表同步,通过 Docker 内网直连 dlweb
cronjob:
image: alpine:3.19
container_name: youle-cronjob
entrypoint: ["/bin/sh", "/app/entrypoint.sh"]
volumes:
- ./docker/cronjob/entrypoint.sh:/app/entrypoint.sh:ro
- ./docker/cronjob/daily-task.sh:/app/daily-task.sh:ro
- shared-signal:/shared
environment:
DLWEB_INTERNAL_URL: "http://dlweb"
CRON_SCHEDULE: "${CRON_SCHEDULE:-0 4 * * *}"
depends_on:
- dlweb
restart: unless-stopped
networks:
- youle-net
# ========== Redis (可选) ==========
redis:
image: redis:7-alpine
container_name: youle-redis
command: >
redis-server
--requirepass ${REDIS_PASSWORD:-123456}
--appendonly yes
volumes:
- redis-data:/data
restart: unless-stopped
networks:
- youle-net
volumes:
api-logs:
api-source-logs:
dlweb-logs:
dlweb-debug:
redis-data:
shared-signal:
certbot-webroot:
certbot-certs:
networks:
youle-net:
driver: bridge