# 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 证书首次申请脚本 ├── sync.ps1 # Windows 本地 → 服务器文件同步脚本 ├── env_config.php # PHP 环境变量加载器(api/ 和 dlweb/ 共用) ├── api/ # 网站1: 游戏核心 API 服务源码 ├── dlweb/ # 网站2: 代理管理后台源码 ├── wxserver_daoqi/ # 网站3: 微信小程序后端源码 ├── docker/ │ ├── nginx/ # Nginx 配置模板 + SSL 参数 │ ├── api/ # API 镜像(PHP 8.1 + Apache) │ ├── dlweb/ # DLWEB 镜像(PHP 8.1 + Apache + Redis ext) │ ├── wxserver/ # wxserver 镜像(Node.js 18 Alpine) │ ├── syncjob/ # Synchronize.php 轮询脚本(每 30s) │ ├── cronjob/ # 每日定时任务(替代 autorun.cmd) │ └── certbot/ # SSL 证书相关 └── docs/ # 详细文档(见下方文档导航) ``` --- ## 整体架构 ``` 互联网 │ ┌──────┴──────┐ │ 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 证书自动续签 | 无 | --- ## 与原版(Windows 部署)的区别 | 项目 | 原版 Windows | Docker 版 | |------|-------------|-----------| | 环境 | Windows + Apache/XAMPP + Node.js | Docker 容器化 | | 配置方式 | 硬编码在 PHP/JS/HTML 中 | 统一 `.env` 文件 | | 域名切换 | 需改 30+ 个文件 | 只改 `.env` 的 1 个域名变量 | | 数据库密码 | 明文散布在多个配置文件 | 集中在 `.env`(不进版本库) | | SSL | 手动申请/部署证书 | certbot 自动申请 + 12h 自动续签 | | Synchronize 轮询 | `HttpRequestService.exe`(Windows 服务) | `syncjob` 容器(Alpine + curl) | | 每日定时任务 | Windows 计划任务 → `autorun.cmd` | `cronjob` 容器(Alpine crond) | --- ## 文档导航 | 文档 | 内容 | |------|------| | [快速部署](./docs/01-deployment.md) | SSH 密钥配置、上传文件、环境变量准备、首次部署完整步骤 | | [定时任务说明](./docs/02-scheduled-tasks.md) | syncjob / cronjob 原理、配置参数、日志查看 | | [环境变量配置](./docs/03-env-variables.md) | 所有变量分组说明、域名推导关系、加载机制、文件修改生效方式 | | [SSL 证书管理](./docs/04-ssl.md) | 首次申请、续签、更换域名后重新申请 | | [常见运维操作](./docs/05-operations.md) | 更换域名、更换数据库、服务器迁移、服务管理、数据持久化 | | [日志管理](./docs/06-logging.md) | 日志位置总览、查看命令、清除命令、Windows 远程操作 | | [卸载和清理](./docs/07-uninstall.md) | 停止、删除容器、彻底清理的分级操作 | | [数据库远程管理](./docs/08-database-remote.md) | Navicat SSH 隧道配置、RDS 实例对应关系、新设备接入 | --- ## 快速启动 ```bash # 1. 上传项目(Windows 本地执行) .\sync.ps1 -Mode full # 2. 进入服务器 ssh root@47.98.203.17 cd /opt/youle/game-docker # 3. 配置环境变量 cp .env.example .env vim .env # 至少填写 ROOT_DOMAIN、DB 连接、微信配置 # 4. 首次申请 SSL 并启动 ./deploy.sh ssl-init ./deploy.sh up # 5. 确认状态 ./deploy.sh status ``` > 详细步骤见 [快速部署](./docs/01-deployment.md)。