132 lines
6.5 KiB
Markdown
132 lines
6.5 KiB
Markdown
# 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)。 |