docs: 拆分 README.md 为多个子文档,README 简化为架构引导大纲
This commit is contained in:
141
codes/agent/game-docker/docs/03-env-variables.md
Normal file
141
codes/agent/game-docker/docs/03-env-variables.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# 环境变量配置
|
||||
|
||||
所有硬编码的域名、数据库地址、密钥都已外部化为环境变量。**修改配置不再需要改代码,只需改 `.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) |
|
||||
| `ROOT_DOMAIN` | 父域名(自动推导 3 个子域名 + 所有派生 URL) |
|
||||
| `SITE_*` | PHP 后端各站点域名 |
|
||||
| `DLWEB_*_URL` | 前端 JS/HTML 硬编码域名替换 |
|
||||
| `SYNC_INTERVAL` / `SYNC_PROCESSCOUNT` | syncjob 同步参数 |
|
||||
| `CRON_SCHEDULE` | cronjob 执行时间 |
|
||||
| `GAME_SERVER_QUERY_URL` | 游戏服务器查询地址 |
|
||||
| `INTERNAL_WHITELIST` | IP 白名单(逗号分隔) |
|
||||
|
||||
---
|
||||
|
||||
## 域名配置关系
|
||||
|
||||
```
|
||||
.env 配置 │ 自动推导结果
|
||||
─────────────────────┼──────────────────────────────────────────────────────
|
||||
ROOT_DOMAIN │ API_DOMAIN = api.<ROOT_DOMAIN> → Nginx 网站1(含 wxserver /wx/ 路由)
|
||||
(唯一必填) │ DLWEB_DOMAIN = dlapi.<ROOT_DOMAIN> → Nginx 网站2
|
||||
│ SITE_API_URL = https://api.<ROOT_DOMAIN>
|
||||
│ SITE_PAY_NOTIFY_URL = https://api.<ROOT_DOMAIN>
|
||||
│ SITE_OPEN_URL = http://open.<ROOT_DOMAIN>
|
||||
│ DLWEB_DL_API_V3_URL = https://dlapi.<ROOT_DOMAIN>
|
||||
```
|
||||
|
||||
> 推导由 `docker-compose.yml` 的 `environment:` 块完成,容器内所有派生变量均无需手动配置。如子域名不符合 `<前缀>.<ROOT_DOMAIN>` 规律,可在 `.env` 中单独覆盖对应变量。
|
||||
|
||||
---
|
||||
|
||||
## 环境变量加载机制
|
||||
|
||||
### 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}` 占位符,Nginx 容器启动时通过 `envsubst` 自动替换。wxserver 不独立占用域名,通过 `api.xxx/wx/*` 路由接入。
|
||||
|
||||
---
|
||||
|
||||
## 文件修改与生效方式
|
||||
|
||||
不同文件在镜像中的处理方式不同,决定了改完代码后需要执行哪种操作。
|
||||
|
||||
### 文件 → 操作对照表
|
||||
|
||||
| 文件路径 | 所属容器 | 载入方式 | 修改后需要执行的操作 |
|
||||
|---------|---------|---------|-------------------|
|
||||
| `api/**` | `youle-api` | `COPY` 进镜像 | `./deploy.sh rebuild api` 重建镜像 |
|
||||
| `dlweb/**` | `youle-dlweb` | `COPY` 进镜像 | `./deploy.sh rebuild dlweb` 重建镜像 |
|
||||
| `wxserver_daoqi/**` | `youle-wxserver` | `COPY` 进镜像 | `./deploy.sh rebuild wxserver` 重建镜像 |
|
||||
| `env_config.php` | `youle-api` / `youle-dlweb` | `COPY` 进镜像 | `./deploy.sh rebuild api dlweb` 重建两个镜像 |
|
||||
| `docker/api/Dockerfile` | `youle-api` | 构建定义 | `./deploy.sh rebuild api` |
|
||||
| `docker/api/docker-entrypoint.sh` | `youle-api` | `COPY` 进镜像 | `./deploy.sh rebuild api` |
|
||||
| `docker/dlweb/Dockerfile` | `youle-dlweb` | 构建定义 | `./deploy.sh rebuild dlweb` |
|
||||
| `docker/dlweb/docker-entrypoint.sh` | `youle-dlweb` | `COPY` 进镜像 | `./deploy.sh rebuild dlweb` |
|
||||
| `docker/wxserver/Dockerfile` | `youle-wxserver` | 构建定义 | `./deploy.sh rebuild wxserver` |
|
||||
| `docker/nginx/default.conf.template` | `youle-nginx` | volume 挂载(`:ro`) | `scp` 上传 → `docker restart youle-nginx` |
|
||||
| `docker/nginx/ssl-params.conf` | `youle-nginx` | volume 挂载(`:ro`) | `scp` 上传 → `docker restart youle-nginx` |
|
||||
| `docker/syncjob/sync.sh` | `youle-syncjob` | volume 挂载(`:ro`) | `scp` 上传 → `docker restart youle-syncjob` |
|
||||
| `docker/cronjob/entrypoint.sh` | `youle-cronjob` | volume 挂载(`:ro`) | `scp` 上传 → `docker restart youle-cronjob` |
|
||||
| `docker/cronjob/daily-task.sh` | `youle-cronjob` | volume 挂载(`:ro`) | `scp` 上传 → `docker restart youle-cronjob` |
|
||||
| `docker-compose.yml` | 所有容器 | compose 编排 | `docker compose up -d`(有变动的容器自动重建) |
|
||||
| `.env` | 所有容器 | compose `env_file` | `docker compose up -d`(重新注入环境变量) |
|
||||
|
||||
> **COPY vs 挂载的区别:**
|
||||
> - **`COPY` 进镜像** — 文件被打进 Docker 镜像层,修改后必须重新 build 才能生效
|
||||
> - **volume 挂载** — 只需 `scp` 传到服务器后重启容器即可,**无需重建镜像**
|
||||
|
||||
### 操作命令速查
|
||||
|
||||
```bash
|
||||
# ── 需要重建镜像的操作(修改源码/Dockerfile/entrypoint 等 COPY 文件)──
|
||||
|
||||
./deploy.sh rebuild api # 只重建 API
|
||||
./deploy.sh rebuild dlweb # 只重建 DLWEB
|
||||
./deploy.sh rebuild wxserver # 只重建 wxserver
|
||||
./deploy.sh rebuild api dlweb # 同时重建多个
|
||||
./deploy.sh rebuild # 重建所有服务
|
||||
|
||||
|
||||
# ── 只需 scp + 重启的操作(修改 volume 挂载文件,秒级生效)──
|
||||
|
||||
# Nginx 配置
|
||||
scp docker/nginx/ssl-params.conf root@47.98.203.17:/opt/youle/game-docker/docker/nginx/ssl-params.conf
|
||||
scp docker/nginx/default.conf.template root@47.98.203.17:/opt/youle/game-docker/docker/nginx/default.conf.template
|
||||
ssh root@47.98.203.17 "docker restart youle-nginx"
|
||||
|
||||
# syncjob 脚本
|
||||
scp docker/syncjob/sync.sh root@47.98.203.17:/opt/youle/game-docker/docker/syncjob/sync.sh
|
||||
ssh root@47.98.203.17 "docker restart youle-syncjob"
|
||||
|
||||
# cronjob 脚本
|
||||
scp docker/cronjob/entrypoint.sh root@47.98.203.17:/opt/youle/game-docker/docker/cronjob/entrypoint.sh
|
||||
scp docker/cronjob/daily-task.sh root@47.98.203.17:/opt/youle/game-docker/docker/cronjob/daily-task.sh
|
||||
ssh root@47.98.203.17 "docker restart youle-cronjob"
|
||||
|
||||
|
||||
# ── .env / docker-compose.yml 变更 ──
|
||||
|
||||
ssh root@47.98.203.17 "cd /opt/youle/game-docker && docker compose up -d"
|
||||
# compose 会对比配置差异,只重启有变更的容器
|
||||
```
|
||||
Reference in New Issue
Block a user