Files
youlegames/codes/agent/game-docker/README.md
2026-04-10 17:00:08 +08:00

695 lines
23 KiB
Markdown
Raw 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.
# 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
- 域名已解析到服务器 IP3 个域名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
```