# YouleGames Docker 部署版 > 原项目 `codes/agent/game` 的 Docker 化改造,所有硬编码域名/IP/密码已外部化为环境变量,通过单一 `.env` 文件控制所有配置。 --- ## 目录结构 ``` game-docker/ ├── .env.example # 环境变量模板(部署时复制为 .env) ├── docker-compose.yml # Docker Compose 编排(8 个服务) ├── deploy.sh # 一键部署脚本 ├── init-ssl.sh # SSL 证书首次申请脚本 ├── env_config.php # PHP 环境变量加载器(api/ 和 dlweb/ 共用) ├── api/ # 网站1: 游戏核心 API 服务源码 ├── dlweb/ # 网站2: 代理管理后台源码 ├── wxserver_daoqi/ # 网站3: 微信小程序后端源码 ├── docker/ │ ├── nginx/ │ │ ├── default.conf.template # Nginx 配置模板(envsubst 动态域名注入) │ │ └── ssl-params.conf # SSL 安全参数 │ ├── api/ │ │ ├── Dockerfile # API 镜像(PHP 8.1 + Apache) │ │ └── docker-entrypoint.sh # 启动时 sed 替换 JS 中硬编码域名 │ ├── dlweb/ │ │ ├── Dockerfile # DLWEB 镜像(PHP 8.1 + Apache + Redis ext) │ │ └── docker-entrypoint.sh # 启动时 sed 替换 JS/HTML 中硬编码域名 │ ├── wxserver/ │ │ └── Dockerfile # wxserver 镜像(Node.js 18 Alpine) │ ├── syncjob/ │ │ └── sync.sh # Synchronize.php 轮询脚本(每 30s) │ ├── cronjob/ │ │ ├── entrypoint.sh # cron 容器入口 │ │ └── daily-task.sh # 每日定时任务(替代 autorun.cmd) │ └── certbot/ # SSL 证书相关 └── game/ # 原始未修改代码备份(不参与部署) ``` --- ## 整体架构 ``` 互联网 │ ┌──────┴──────┐ │ Nginx │ ← SSL 终端 + 域名路由 │ :80 :443 │ 域名通过 .env 注入 └──┬───┬───┬─┘ ┌───────────┤ │ ├───────────┐ ▼ ▼ │ ▼ │ ┌────────────┐ ┌────────┴──┐ ┌──────────┐ │ API │ │ DLWEB │ │ wxserver │ │ PHP 8.1 │ │ PHP 8.1 │ │ Node.js │ │ Apache │ │ Apache │ │ :3000 │ └─────┬──────┘ └─────┬─────┘ └──────────┘ │ │ │ ┌─────────┤ Docker 内网 (youle-net) │ │ │ │ ▼ │ │ ┌──────────┐ │ ┌───────────┐ ┌───────────┐ │ │ syncjob │◄┼────►│ cronjob │ │ certbot │ │ │ 每30s轮询 │ │ │ 每日4:00 │ │ 12h续签 │ │ └──────────┘ │ └───────────┘ └───────────┘ │ │ ▼ ▼ ┌──────────────────────────┐ ┌──────────┐ │ MySQL (阿里云 RDS) │ │ Redis │ │ 多实例:agent_db / │ │ :6379 │ │ game_db / grade_db │ └──────────┘ └──────────────────────────┘ ``` ### 服务清单(8 个容器) | 容器名 | 镜像 | 作用 | 端口 | |--------|------|------|------| | `youle-nginx` | nginx:alpine | SSL 终端 + 域名路由反向代理 | 80, 443 | | `youle-api` | php:8.1-apache (自定义) | 游戏核心 API(登录/支付/SDK) | 8081 (内部) | | `youle-dlweb` | php:8.1-apache (自定义) | 代理管理后台 | 8082 (内部) | | `youle-wxserver` | node:18-alpine (自定义) | 微信小程序后端 | 3000 (内部) | | `youle-syncjob` | alpine:3.19 | 每 30s POST `Synchronize.php`(数据同步) | 无 | | `youle-cronjob` | alpine:3.19 | 每日凌晨 4:00 执行报表同步 | 无 | | `youle-redis` | redis:7-alpine | 缓存服务(可选) | 6379 (内部) | | `youle-certbot` | certbot/certbot | Let's Encrypt SSL 证书自动续签 | 无 | --- ## 快速部署 ### 前置要求 - Linux 服务器(推荐 Ubuntu 22.04 / CentOS 8+,最低 2C 2G) - 域名已解析到服务器 IP(3 个域名:API / DLWEB / wxserver) - 服务器 80 和 443 端口可用 - Docker 和 Docker Compose(如未安装,`deploy.sh` 会自动安装并配置国内镜像加速) ### 1. 上传项目到服务器 将 `game-docker` 目录上传到服务器 `/opt/youle/` 下: ```bash # 方式一:从本地直接上传(Windows 使用 scp / WinSCP / SFTP) scp -r game-docker/ root@your-server-ip:/opt/youle/ # 方式二:从 Git 仓库拉取 ssh root@your-server-ip mkdir -p /opt/youle cd /opt/youle git clone <仓库地址> game-docker ``` 上传后服务器上的目录结构: ``` /opt/youle/game-docker/ ├── .env.example ├── docker-compose.yml ├── deploy.sh ├── init-ssl.sh ├── api/ ├── dlweb/ ├── wxserver_daoqi/ └── docker/ ``` ### 2. 准备环境变量 ```bash cd /opt/youle/game-docker cp .env.example .env vim .env ``` **必须修改的关键配置:** ```bash # 域名(用于 Nginx SSL 和 certbot) API_DOMAIN=api.yourdomain.com DLWEB_DOMAIN=dlapi.yourdomain.com WX_DOMAIN=wxapi.yourdomain.com # 数据库(各服务数据库连接) API_DB_HOST=your-rds-host API_DB_PASSWORD=your-password DLWEB_DB_HOST=your-rds-host DLWEB_DB_PASSWORD=your-password # ... 其他数据库配置 # 微信配置 WX_MINI_APPID=your-appid WX_MINI_APPSECRET=your-secret WX_PAY_MCHID=your-mchid WX_PAY_KEY=your-key # SSL 邮箱 SSL_EMAIL=your-email@example.com ``` ### 3. 首次申请 SSL 证书 ```bash chmod +x deploy.sh init-ssl.sh # 先测试(不真正申请,验证域名解析是否正确) ./deploy.sh ssl-init --dry-run # 正式申请 ./deploy.sh ssl-init ``` ### 4. 启动所有服务 ```bash ./deploy.sh up ``` 启动后验证: ```bash # 查看所有容器状态 ./deploy.sh status # 查看特定服务日志 ./deploy.sh logs api ./deploy.sh logs dlweb ./deploy.sh logs syncjob ./deploy.sh logs cronjob ``` ### 5. 部署命令速查 | 命令 | 说明 | |------|------| | `./deploy.sh up` | 构建并启动所有服务 | | `./deploy.sh down` | 停止并移除所有容器 | | `./deploy.sh restart` | 重启所有服务 | | `./deploy.sh rebuild` | 无缓存重建所有镜像 | | `./deploy.sh rebuild api` | 只重建指定服务 | | `./deploy.sh logs [service]` | 查看日志(支持 `-f` 实时跟踪) | | `./deploy.sh status` | 查看容器运行状态 | | `./deploy.sh ssl-init` | 首次申请 SSL 证书 | | `./deploy.sh ssl-init --staging` | 用 Let's Encrypt 测试环境申请 | | `./deploy.sh ssl-renew` | 手动续签证书 | | `./deploy.sh ssl-status` | 查看证书到期时间 | --- ## 定时任务说明 Docker 部署包含两个定时任务容器,替代原 Windows 环境的 `HttpRequestService.exe` 和 `autorun.cmd`。 ### syncjob — 实时同步任务 **替代:** Windows `HttpRequestService.exe`(通过 `HttpRequest.exe.json` 配置) **作用:** 每 30 秒 POST 请求 `dlweb/ext/Synchronize.php`,从游戏数据库 `ct_user_process_log` 表消费未处理日志,将玩家/代理数据同步到代理后台数据库。 **运行方式:** 通过 Docker 内网直连 `http://dlweb/ext/Synchronize.php`,不经过公网域名,零流量消耗。 **可配置项(`.env`):** ```bash # 轮询间隔(秒),默认 30 SYNC_INTERVAL=30 # 每次处理的日志条数,默认 200 SYNC_PROCESSCOUNT=200 ``` **查看同步日志:** ```bash ./deploy.sh logs syncjob # 或实时查看 docker logs -f youle-syncjob ``` ### cronjob — 每日定时任务 **替代:** Windows 计划任务调用的 `tools-docker/autorun.cmd` **作用:** 每日凌晨 4:00 执行以下流程(与原 `autorun.cmd` 完全一致): | 步骤 | 原 autorun.cmd | Docker cronjob | |------|---------------|----------------| | 1. 停止同步服务 | `net stop HttpRequestService` | 创建 `/shared/syncjob.pause` 信号文件 | | 2. 等待当前请求完成 | (Windows 服务立即停止) | `sleep 5` | | 3. 同步报表数据 | `HttpRequest.exe POST SynchronizeReportData.php` | `curl POST http://dlweb/ext/SynchronizeReportData.php` | | 4. 恢复同步服务 | `net start HttpRequestService` | 删除 `/shared/syncjob.pause` 信号文件 | > **暂停机制:** `syncjob` 和 `cronjob` 通过共享 Docker volume(`shared-signal`)通信。`cronjob` 创建 `/shared/syncjob.pause` 文件时,`syncjob` 会自动跳过轮询,报表同步完成后删除该文件恢复。 **可配置项(`.env`):** ```bash # cron 表达式,默认凌晨 4:00 CRON_SCHEDULE=0 4 * * * ``` **修改执行时间示例:** ```bash # 凌晨 3:30 执行 CRON_SCHEDULE=30 3 * * * # 每天凌晨 2:00 和 14:00 各执行一次 CRON_SCHEDULE=0 2,14 * * * ``` **查看执行日志:** ```bash ./deploy.sh logs cronjob # 或实时查看 docker logs -f youle-cronjob ``` **手动触发(测试用):** ```bash docker exec youle-cronjob /bin/sh /app/daily-task.sh ``` --- ## 环境变量说明 所有硬编码的域名、数据库地址、密钥都已外部化为环境变量。**修改配置不再需要改代码,只需改 `.env` 文件。** ### 变量分组总览 | 变量分组 | 说明 | |---------|------| | `API_DB_*` | 游戏核心 API 数据库 | | `DLWEB_DB_*` | 代理后台主库 | | `DLWEB_SLAVE_DB_*` | 代理后台从库 | | `EXT_GAME_DB_*` | 外部游戏数据库(Synchronize / SynchronizeReportData) | | `EXT_GRADE_DB_*` | 战绩数据库(game.php) | | `EXT_DEV_DB_*` | 开发数据库(DEBUG 模式) | | `REDIS_*` | Redis 配置 | | `WX_MINI_*` | 微信小程序 AppID / Secret | | `WX_OA_*` | 微信公众号 AppID / Secret | | `WX_PAY_*` | 微信支付商户配置 | | `REMOTE_CONFIG_*` | 远程配置(Gitee) | | `API_DOMAIN` / `DLWEB_DOMAIN` / `WX_DOMAIN` | 3 个服务域名(Nginx + SSL + 前端 JS 自动推导) | | `SITE_*` | PHP 后端各站点域名 | | `DLWEB_*_URL` | 前端 JS/HTML 硬编码域名替换 | | `SYNC_INTERVAL` / `SYNC_PROCESSCOUNT` | syncjob 同步参数 | | `CRON_SCHEDULE` | cronjob 执行时间 | | `GAME_SERVER_QUERY_URL` | 游戏服务器查询地址 | | `INTERNAL_WHITELIST` | IP 白名单(逗号分隔) | ### 域名配置关系 ``` .env 域名 │ 用途 ─────────────────────┼────────────────────────────────── API_DOMAIN │ Nginx server_name(网站1)+ 自动推导 DLWEB_API_BASE_URL DLWEB_DOMAIN │ Nginx server_name(网站2)+ 自动推导 DLWEB_SDK_API_URL WX_DOMAIN │ Nginx server_name(网站3) ``` --- ## 环境变量加载机制 ### PHP 服务(env_config.php) 所有 PHP 文件通过 `env($key, $default)` 函数读取配置: ```php // 优先读 OS 环境变量(Docker 场景),回退读 .env 文件 $host = env('API_DB_HOST', 'localhost'); ``` 加载优先级:Docker 容器环境变量(`docker-compose env_file`)> `.env` 文件 > 代码默认值。 ### Node.js 服务(wxserver_daoqi) 直接使用 `process.env.VARIABLE_NAME`,由 `docker-compose env_file` 注入。 ### 前端 JS / HTML 前端静态文件无法读取环境变量,通过 Docker entrypoint 脚本在容器启动时用 `sed` 替换硬编码域名: - `docker/api/docker-entrypoint.sh` — 替换 API 服务中的 JS 文件 - `docker/dlweb/docker-entrypoint.sh` — 替换 DLWEB 服务中的 30+ 个 JS/HTML 文件 ### Nginx 域名注入 `default.conf.template` 使用 `${API_DOMAIN}` / `${DLWEB_DOMAIN}` / `${WX_DOMAIN}` 占位符,Nginx 容器启动时通过 `envsubst` 自动替换。 --- ## SSL 证书管理 使用 Let's Encrypt 免费证书,由 `certbot` 容器自动管理。 ```bash # 首次申请(必须先确保域名已解析) ./deploy.sh ssl-init # 用测试环境验证(不消耗申请限额) ./deploy.sh ssl-init --staging # 手动续签 ./deploy.sh ssl-renew # 查看证书状态 ./deploy.sh ssl-status ``` `certbot` 容器每 12 小时自动检查续签,证书到期前 30 天自动更新,无需人工干预。 --- ## 数据持久化 以下 Docker volume 用于持久化存储: | Volume | 挂载点 | 说明 | |--------|--------|------| | `api-logs` | /var/www/html/logs | API 服务日志 | | `api-source-logs` | /var/www/html/source/logs | API source 模块日志 | | `dlweb-logs` | /var/www/html/api/logs | DLWEB 服务日志 | | `dlweb-debug` | /var/www/html/api/ext/debug | DLWEB 同步/报表调试日志 | | `redis-data` | /data | Redis 持久化数据 | | `shared-signal` | /shared | syncjob ↔ cronjob 暂停信号文件 | | `certbot-webroot` | /var/www/certbot | ACME 域名验证文件 | | `certbot-certs` | /etc/letsencrypt | SSL 证书文件 | --- ## 与原版(Windows 部署)的区别 | 项目 | 原版 Windows | Docker 版 | |------|-------------|-----------| | 环境 | Windows + Apache/XAMPP + Node.js | Docker 容器化 | | 配置方式 | 硬编码在 PHP/JS/HTML 中 | 统一 `.env` 文件 | | 域名切换 | 需改 30+ 个文件 | 只改 `.env` 的 3 个域名变量 | | 数据库密码 | 明文散布在多个配置文件 | 集中在 `.env`(不进版本库) | | SSL | 手动申请/部署证书 | certbot 自动申请 + 12h 自动续签 | | Synchronize 轮询 | `HttpRequestService.exe`(Windows 服务) | `syncjob` 容器(Alpine + curl) | | 每日定时任务 | Windows 计划任务 → `autorun.cmd` | `cronjob` 容器(Alpine crond) | | 内网请求 | `localhost:80`(同机 Apache) | Docker 内网 `http://dlweb`(零公网流量) | | PHP 环境变量 | `env_config.php` `env()` 函数 | `env()` 优先读容器环境变量,回退 `.env` 文件 | | 微信支付配置 | 硬编码在 `WxPay.Config.php` | `define()` + class const,由 `env()` 动态读取 | | 游戏服务器列表 | 硬编码在 `game.config.php` | 支持外部 JSON 文件覆盖(`GAME_SERVERS_CONFIG_FILE`) | --- ## 常见运维操作 ### 场景一:更换域名 当需要将服务迁移到新域名时(例如 `daoqijuyou77.cn` → `newdomain.com`),操作步骤: **1. 修改 `.env` 中的域名变量** ```bash vim .env ``` 需要修改的变量(按影响范围分类): | 变量 | 说明 | 示例 | |------|------|------| | **Nginx 路由(必改)** | | | | `API_DOMAIN` | 网站1 域名 | `api.newdomain.com` | | `DLWEB_DOMAIN` | 网站2 域名 | `dlapi.newdomain.com` | | `WX_DOMAIN` | 网站3 域名 | `wxapi.newdomain.com` | | **PHP 后端域名(按需)** | | | > **前端 JS 请求地址无需单独配置:** `DLWEB_API_BASE_URL`(= `https://` + `API_DOMAIN`)和 `DLWEB_SDK_API_URL`(= `https://` + `DLWEB_DOMAIN`)由 entrypoint 脚本自动推导。 | `SITE_API_URL` | API 服务完整 URL | `https://api.newdomain.com` | | `SITE_API2_URL` | API2 服务完整 URL | `https://api2.newdomain.com` | | `SITE_SDK_DOMAIN` | SDK 域名(不带协议) | `sdk.newdomain.com` | | `SITE_OPEN_URL` | 开放平台 URL | `http://open.newdomain.com` | | `SITE_PAY_NOTIFY_URL` | 支付回调通知 URL | `http://api.newdomain.com` | | `QQ_CALLBACK_URL` | QQ 登录回调 | `http://syhd.newdomain.com` | | **DLWEB 前端域名(按需)** | | | | `DLWEB_SETTLE_URL` | 结算后台地址 | `http://dlsettle.newdomain.com/mobile/` | | `DLWEB_SETTLE_FULL_URL` | 结算后台完整地址 | `http://dlsettle.newdomain.com` | | `DLWEB_PROXY_URL` | 代理测试地址 | `https://proxytest.newdomain.com` | | `DLWEB_PROXY_77_URL` | 代理测试地址(77) | `https://proxytest.newdomain.com` | | `DLWEB_DL_API_V3_URL` | V3 API 地址 | `https://dlapiv3.newdomain.com` | | `DLWEB_OPERATE_URL` | 运营后台地址 | `https://operate.newdomain.com` | | `DLWEB_AVATAR_URL` | 默认头像地址 | `https://dlwebv3.newdomain.com/images/noavatar.png` | | `DLWEB_SDK_API2_URL` | SDK API2 地址 | `https://api2.newdomain.com` | | `DLWEB_DOWNLOAD_CDN_URL` | 下载页 CDN | `http://cdn.newdomain.com` | | `DLWEB_GAME_IMAGE_URL` | 游戏图片地址 | `http://games.newdomain.com` | | `DLWEB_SKYGAMES_URL` | Skygames 地址 | `https://skygames.newdomain.com` | | `SITE_GAME_SERVICE_URL` | 游戏服务查询 | `http://service.newdomain.com:1089/index.html` | > **注意:** 注释掉的变量(`#` 开头)表示使用代码中的默认值。如果新域名与默认值不同,需要取消注释并修改。 **2. DNS 解析** 确保新域名已指向服务器 IP: ```bash # 验证 DNS 解析 nslookup api.newdomain.com nslookup dlapi.newdomain.com nslookup wxapi.newdomain.com ``` **3. 重新申请 SSL 证书** ```bash # 测试验证(不消耗申请限额) ./deploy.sh ssl-init --staging # 正式申请 ./deploy.sh ssl-init ``` **4. 重启所有服务** ```bash ./deploy.sh restart ``` 重启时会自动完成: - Nginx 使用新域名的 `server_name` 和 SSL 证书 - `docker-entrypoint.sh` 用新域名替换 JS/HTML 中的硬编码 URL - PHP `env()` 读取新的环境变量值 **5. 更新微信后台配置** | 微信后台 | 配置项 | 新值 | |---------|--------|------| | 小程序后台 | request 合法域名 | `https://wxapi.newdomain.com` | | 小程序后台 | 业务域名 | `wxapi.newdomain.com` | | 公众号后台 | 业务域名 / JS接口安全域名 | `api.newdomain.com` | | 公众号后台 | 网页授权域名 | `wxapi.newdomain.com` | | 微信支付后台 | 支付授权目录 | `https://dlapi.newdomain.com/` | --- ### 场景二:更换数据库地址 当数据库实例迁移(例如 RDS 升级、切换区域)时: **1. 修改 `.env` 中对应的数据库变量** ```bash vim .env ``` 按数据库分组: | 数据库 | 需修改的变量 | 使用者 | |--------|-------------|--------| | API 主库 | `API_DB_HOST`, `API_DB_PORT`, `API_DB_USER`, `API_DB_PASSWORD` | api 服务 | | 代理后台主库 | `DLWEB_DB_HOST`, `DLWEB_DB_PORT`, `DLWEB_DB_USER`, `DLWEB_DB_PASSWORD` | dlweb 服务 | | 代理后台从库 | `DLWEB_SLAVE_DB_HOST`, `DLWEB_SLAVE_DB_PORT`, `DLWEB_SLAVE_DB_USER`, `DLWEB_SLAVE_DB_PASSWORD` | dlweb 读操作 | | 外部游戏库 | `EXT_GAME_DB_HOST`, `EXT_GAME_DB_PORT`, `EXT_GAME_DB_USER`, `EXT_GAME_DB_PASSWORD` | Synchronize.php / SynchronizeReportData.php | | 战绩库 | `EXT_GRADE_DB_HOST`, `EXT_GRADE_DB_PORT`, `EXT_GRADE_DB_USER`, `EXT_GRADE_DB_PASSWORD` | game.php 查询战绩 | | 开发库 | `EXT_DEV_DB_HOST`, `EXT_DEV_DB_PORT`, `EXT_DEV_DB_USER`, `EXT_DEV_DB_PASSWORD` | DEBUG 模式 | **2. 重启受影响的服务** ```bash # 如果只改了 API 数据库 docker compose restart api # 如果只改了 DLWEB 数据库 docker compose restart dlweb # 如果改了外部游戏库(影响同步任务) docker compose restart dlweb syncjob cronjob # 如果改了多个,直接全部重启 ./deploy.sh restart ``` **3. 验证连接** ```bash # 查看 API 日志是否有数据库连接错误 docker logs --tail 20 youle-api # 查看 DLWEB 日志 docker logs --tail 20 youle-dlweb # 查看同步任务是否正常 docker logs --tail 10 youle-syncjob ``` > **提示:** 如果新数据库有 IP 白名单限制,需要将 Docker 宿主机的公网 IP 加入 RDS 白名单。 --- ### 场景三:更换服务器(整体迁移) 将整个 Docker 部署迁移到新服务器: **1. 打包项目文件** ```bash # 在旧服务器上 cd /path/to/game-docker # 排除不必要文件 tar czf game-docker.tar.gz --exclude='.env' --exclude='game/' . ``` **2. 传输到新服务器** ```bash scp game-docker.tar.gz newserver:/opt/ ``` **3. 在新服务器上部署** ```bash cd /opt tar xzf game-docker.tar.gz -C game-docker cd game-docker # 复制并修改配置(新服务器 IP 可能不同) cp .env.example .env vim .env ``` **4. 确认修改项** | 检查项 | 是否需要改 | 说明 | |--------|-----------|------| | 域名(`*_DOMAIN`) | 域名不变则不改 | DNS 需指向新服务器 IP | | 数据库地址(`*_DB_HOST`) | 通常不改 | RDS 地址不变,但需将新服务器 IP 加入白名单 | | Redis 地址 | 不改 | Docker 内置 Redis,随容器迁移 | | 微信/支付配置 | 不改 | AppID/Secret 与服务器无关 | | 游戏服务器查询地址 | 看情况 | `GAME_SERVER_QUERY_URL` 如果游戏服务器也迁移了需改 | | IP 白名单 | 可能需改 | `INTERNAL_WHITELIST` 加入新 IP | **5. 启动服务** ```bash chmod +x deploy.sh init-ssl.sh # 域名未变:DNS 改指向后直接启动 ./deploy.sh ssl-init # 新服务器需重新申请证书 ./deploy.sh up # 域名变了:参照「场景一:更换域名」 ``` **6. 验证所有服务** ```bash # 容器状态 ./deploy.sh status # 各服务健康检查 curl -k https://api.yourdomain.com/ curl -k https://dlapi.yourdomain.com/ curl -k https://wxapi.yourdomain.com/ # 定时任务运行正常 docker logs --tail 5 youle-syncjob docker logs --tail 5 youle-cronjob ``` --- ### 场景四:仅更改 Redis 配置 ```bash vim .env # 修改以下变量: # REDIS_HOST=new-redis-host # REDIS_PORT=6379 # REDIS_PASSWORD=new-password # 重启受影响的服务 docker compose restart dlweb redis ``` > **注意:** 如果使用 Docker 内置 Redis(默认),`REDIS_HOST` 应设为 `redis`(Docker 服务名),不是 `localhost`。 --- ### 操作速查表 | 变更内容 | 修改 `.env` 中的变量 | 重启命令 | 额外操作 | |---------|---------------------|---------|---------| | 全部域名 | `*_DOMAIN` + `DLWEB_*_URL` + `SITE_*` | `./deploy.sh ssl-init && ./deploy.sh restart` | DNS 解析 + 微信后台 | | 单个域名 | 对应的 `*_DOMAIN` + 关联 URL 变量 | `./deploy.sh ssl-init && ./deploy.sh restart` | DNS 解析 | | API 数据库 | `API_DB_*` | `docker compose restart api` | RDS 白名单 | | DLWEB 数据库 | `DLWEB_DB_*` | `docker compose restart dlweb` | RDS 白名单 | | 游戏数据库 | `EXT_GAME_DB_*` | `docker compose restart dlweb syncjob cronjob` | RDS 白名单 | | 战绩数据库 | `EXT_GRADE_DB_*` | `docker compose restart dlweb` | RDS 白名单 | | Redis | `REDIS_*` | `docker compose restart dlweb redis` | — | | 微信密钥 | `WX_*` | `docker compose restart api dlweb wxserver` | 微信后台 | | 整体迁移 | 视情况 | `./deploy.sh ssl-init && ./deploy.sh up` | DNS + RDS 白名单 | ### 查看定时任务执行情况 ```bash # syncjob 实时同步状态 docker logs --tail 50 youle-syncjob # cronjob 每日报表执行记录 docker logs --tail 50 youle-cronjob # dlweb 容器内的同步调试日志 docker exec youle-dlweb ls /var/www/html/api/ext/debug/synchronize/ docker exec youle-dlweb ls /var/www/html/api/ext/debug/SynchronizeReportData/ ``` ### 调整同步频率 ```bash # 修改 .env SYNC_INTERVAL=15 # 15 秒一次 SYNC_PROCESSCOUNT=500 # 每次处理 500 条 # 重启 syncjob docker compose restart syncjob ``` ### 调整每日任务执行时间 ```bash # 修改 .env CRON_SCHEDULE=30 3 * * * # 改为凌晨 3:30 # 重启 cronjob docker compose restart cronjob ```