Files
youlegames/codes/agent/game-docker/docs/03-env-variables.md

6.8 KiB
Raw Blame History

环境变量配置

所有硬编码的域名、数据库地址、密钥都已外部化为环境变量。修改配置不再需要改代码,只需改 .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.ymlenvironment: 块完成,容器内所有派生变量均无需手动配置。如子域名不符合 <前缀>.<ROOT_DOMAIN> 规律,可在 .env 中单独覆盖对应变量。


环境变量加载机制

PHP 服务env_config.php

所有 PHP 文件通过 env($key, $default) 函数读取配置:

// 优先读 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 传到服务器后重启容器即可,无需重建镜像

操作命令速查

# ── 需要重建镜像的操作(修改源码/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 会对比配置差异,只重启有变更的容器