Files
youlegames/codes/agent/game-docker/README.md

1736 lines
76 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 缂栨帓锛? 涓湇鍔★級
鈹溾攢鈹€ deploy.sh # 涓€閿儴缃茶剼鏈?
鈹溾攢鈹€ init-ssl.sh # SSL 璇佷功棣栨鐢宠鑴氭湰
鈹溾攢鈹€ env_config.php # PHP 鐜鍙橀噺鍔犺浇鍣紙api/ 鍜?dlweb/ 鍏辩敤锛?
鈹溾攢鈹€ api/ # 缃戠珯1: 娓告垙鏍稿績 API 鏈嶅姟婧愮爜
鈹溾攢鈹€ dlweb/ # 缃戠珯2: 浠g悊绠$悊鍚庡彴婧愮爜
鈹溾攢鈹€ wxserver_daoqi/ # 缃戠珯3: 寰俊灏忕▼搴忓悗绔簮鐮?
鈹溾攢鈹€ docker/
鈹? 鈹溾攢鈹€ nginx/
鈹? 鈹? 鈹溾攢鈹€ default.conf.template # Nginx 閰嶇疆妯℃澘锛坋nvsubst 鍔ㄦ€佸煙鍚嶆敞鍏ワ級
鈹? 鈹? 鈹斺攢鈹€ ssl-params.conf # SSL 瀹夊叏鍙傛暟
鈹? 鈹溾攢鈹€ api/
鈹? 鈹? 鈹溾攢鈹€ Dockerfile # API 闀滃儚锛圥HP 8.1 + Apache锛?
鈹? 鈹? 鈹斺攢鈹€ docker-entrypoint.sh # 鍚姩鏃?sed 鏇挎崲 JS 涓‖缂栫爜鍩熷悕
鈹? 鈹溾攢鈹€ dlweb/
鈹? 鈹? 鈹溾攢鈹€ Dockerfile # DLWEB 闀滃儚锛圥HP 8.1 + Apache + Redis ext锛?
鈹? 鈹? 鈹斺攢鈹€ docker-entrypoint.sh # 鍚姩鏃?sed 鏇挎崲 JS/HTML 涓‖缂栫爜鍩熷悕
鈹? 鈹溾攢鈹€ wxserver/
鈹? 鈹? 鈹斺攢鈹€ Dockerfile # wxserver 闀滃儚锛圢ode.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 鈹?
鈹?鈹?姣?0s杞 鈹?鈹? 鈹?姣忔棩4:00 鈹? 鈹?12h缁 鈹?
鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? 鈹?
鈻? 鈻?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? MySQL (闃块噷浜?RDS) 鈹? 鈹? Redis 鈹?
鈹? 澶氬疄渚嬶細agent_db / 鈹? 鈹? :6379 鈹?
鈹? game_db / grade_db 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
```
### 鏈嶅姟娓呭崟锛? 涓鍣級
| 瀹瑰櫒鍚?| 闀滃儚 | 浣滅敤 | 绔彛 |
|--------|------|------|------|
| `youle-nginx` | nginx:alpine | SSL 缁堢 + 鍩熷悕璺敱鍙嶅悜浠g悊 | 80, 443 |
| `youle-api` | php:8.1-apache (鑷畾涔? | 娓告垙鏍稿績 API锛堢櫥褰?鏀粯/SDK锛?| 8081 (鍐呴儴) |
| `youle-dlweb` | php:8.1-apache (鑷畾涔? | 浠g悊绠$悊鍚庡彴 | 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锛?
- 鍩熷悕宸茶В鏋愬埌鏈嶅姟鍣?IP锛? 涓煙鍚嶏細API / DLWEB / wxserver锛?
- 鏈嶅姟鍣?80 鍜?443 绔彛鍙敤
- Docker 鍜?Docker Compose锛堝鏈畨瑁咃紝`deploy.sh` 浼氳嚜鍔ㄥ畨瑁呭苟閰嶇疆鍥藉唴闀滃儚鍔犻€燂級
---
### 0. 閰嶇疆 SSH 瀵嗛挜璁よ瘉锛堝繀椤伙級
`sync.ps1` 姣忔鎵ц浼氳皟鐢ㄥ娆?`scp` / `ssh`锛屽鏋滄湭閰嶇疆瀵嗛挜璁よ瘉锛屾瘡鏉″懡浠ら兘浼氬脊鍑哄瘑鐮佹彁绀哄鑷磋剼鏈腑鏂€備互涓嬫楠ゅ湪 **Windows PowerShell** 涓畬鎴愶紙Windows 10/11 鍐呯疆 OpenSSH 瀹㈡埛绔紝鏃犻渶棰濆瀹夎锛夈€?
#### 绗竴姝ワ細妫€鏌ユ槸鍚﹀凡鏈?SSH 瀵嗛挜
```powershell
# 榛樿瀵嗛挜璺緞
Test-Path "$env:USERPROFILE\.ssh\id_ed25519"
# 杈撳嚭 True 琛ㄧず宸叉湁瀵嗛挜锛屽彲璺冲埌绗笁姝?
```
濡傛灉宸叉湁 RSA 鏃у瘑閽ワ紙`id_rsa`锛夛紝鍚屾牱鍙敤锛屾妸涓嬮潰鍛戒护涓殑 `id_ed25519` 鏇挎崲涓?`id_rsa`銆?
#### 绗簩姝ワ細鐢熸垚瀵嗛挜瀵?
```powershell
# 鐢熸垚 Ed25519 瀵嗛挜锛堟洿瀹夊叏銆佹洿鐭級
ssh-keygen -t ed25519 -C "youle-deploy" -f "$env:USERPROFILE\.ssh\id_ed25519"
# 鎻愮ず passphrase 鏃剁洿鎺ュ洖杞︿袱娆★紙涓嶈瀵嗙爜锛岃剼鏈墠鑳借嚜鍔ㄨ繍琛岋級
```
鎵ц鍚庣敓鎴愪袱涓枃浠讹細
| 鏂囦欢 | 璇存槑 |
|------|------|
| `~/.ssh/id_ed25519` | **绉侀挜**锛岀粷涓嶄笂浼犳湇鍔″櫒锛屾湰鍦颁繚绠?|
| `~/.ssh/id_ed25519.pub` | **鍏挜**锛岃鍙戠粰鏈嶅姟鍣?|
#### 绗笁姝ワ細灏嗗叕閽ヤ笂浼犲埌鏈嶅姟鍣?
> 姝ゆ楠や細瑕佹眰杈撳叆涓€娆″瘑鐮侊紝涔嬪悗涓嶅啀闇€瑕併€?
```powershell
# 涓€琛屽懡浠わ細璇诲彇鍏挜 鈫?杩藉姞鍒版湇鍔″櫒 authorized_keys
cat "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh root@47.98.203.17 `
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
```
#### 绗洓姝ワ細楠岃瘉鍏嶅瘑鐧诲綍
```powershell
# 鐩存帴鐧诲綍锛屼笉寮瑰瘑鐮佹彁绀哄垯鎴愬姛
ssh root@47.98.203.17 "echo 'SSH key auth OK'"
```
杈撳嚭 `SSH key auth OK` 鍗宠〃绀洪厤缃垚鍔燂紝`sync.ps1` 鍙甯镐娇鐢ㄣ€?
#### 鍙€夛細閰嶇疆 SSH 鍒悕锛堢畝鍖栧懡浠わ級
鍦?`C:\Users\<浣犵殑鐢ㄦ埛鍚?\.ssh\config`锛堟枃浠朵笉瀛樺湪鍒欐柊寤猴級涓坊鍔狅細
```
Host youle
HostName 47.98.203.17
User root
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
```
閰嶇疆鍚庡彲浣跨敤鐭悕绉版搷浣滐細
```powershell
ssh youle # 鐩存帴鐧诲綍
# sync.ps1 浣跨敤鍒悕
.\sync.ps1 -Server youle
```
#### 鍙€夛細澶氬彴鐢佃剳鍏辩敤鍚屼竴鍙版湇鍔″櫒
鎶婃瘡鍙扮數鑴戠敓鎴愮殑 `id_ed25519.pub` 鍐呭閮借拷鍔犲埌鏈嶅姟鍣ㄧ殑 `~/.ssh/authorized_keys`锛堜竴琛屼竴涓級锛屼笉闇€瑕佸垹闄ゆ棫鐨勫叕閽ワ細
```powershell
# 鍦ㄧ浜屽彴鐢佃剳涓婃墽琛屽悓鏍风殑涓婁紶鍛戒护鍗冲彲锛?> 杩藉姞鑰屼笉鏄鐩栵級
cat "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh root@47.98.203.17 `
"cat >> ~/.ssh/authorized_keys"
```
---
### 1. 妫€鏌ュ苟淇琛屽熬绗︼紙LF锛?
> **涓轰粈涔堥渶瑕佽繖姝ワ紵** Windows 鐨?Git 榛樿 `core.autocrlf=true`锛屽彲鑳藉皢鑴氭湰鏂囦欢鍐欐垚 CRLF銆侰RLF 鏍煎紡鐨?shell 鑴氭湰鍦?Linux 瀹瑰櫒涓細鎶?`not found` / `syntax error` 閿欒锛屽鑷村鍣ㄦ棤娉曞惎鍔ㄣ€?
鍦ㄤ笂浼犲墠杩愯 `fix-lf.ps1`锛岃嚜鍔ㄦ壂鎻忔墍鏈夊叧閿枃浠跺苟淇锛?
```powershell
.\fix-lf.ps1
```
> **鏍规湰淇锛堜竴娆℃€э紝涔嬪悗鏃犻渶鍐嶈窇锛夛細** 鎵ц浠ヤ笅鍛戒护璁?`.gitattributes` 姘镐箙鎺ョ琛屽熬绗︼紝姝ゅ悗浠讳綍鏈哄櫒 clone 鍧囪嚜鍔ㄧ敓鏁堬細
> ```powershell
> git config core.autocrlf false
> git add --renormalize .
> git commit -m "fix: normalize all line endings to LF"
> git push
> ```
---
### 2. 涓婁紶椤圭洰鍒版湇鍔″櫒
灏?`game-docker` 鐩綍涓婁紶鍒版湇鍔″櫒 `/opt/youle/` 涓嬶細
```powershell
# 鎺ㄨ崘锛氫娇鐢?sync.ps1锛坱ar 鍘嬬缉鍗曡繛鎺ワ紝姣?scp -r 蹇害 10-50 鍊嶏級
# 棣栨閮ㄧ讲鐢?full 妯″紡锛屼笂浼犲叏閮ㄦ枃浠讹紙绾?10 MB 鍘嬬缉鍖咃級
.\sync.ps1 -Mode full
# 鏃ュ父浠g爜鏇存柊鐢?app 妯″紡锛堟帓闄ゆ枃妗?娴嬭瘯锛岀害 7 MB锛?
.\sync.ps1
# 浠呮洿鏂?Docker 閰嶇疆鏂囦欢锛坉ocker-compose.yml銆乨eploy.sh 绛夛紝涓嶅埌 1 MB锛?
.\sync.ps1 -Mode config
```
> **鍓嶆彁锛?* 宸插畬鎴愭楠?0 鐨?SSH 瀵嗛挜璁よ瘉閰嶇疆锛屽惁鍒?`sync.ps1` 浼氬弽澶嶅脊瀵嗙爜鎻愮ず銆?
`sync.ps1` 浼氳嚜鍔ㄥ湪鏈嶅姟鍣ㄤ笂鍒涘缓 `/opt/youle/game-docker/` 鐩綍锛堝涓嶅瓨鍦級銆?
濡備笉浣跨敤 `sync.ps1`锛屼篃鍙墜鍔ㄤ笂浼狅細
```bash
# 浠?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/
```
### 3. 鍑嗗鐜鍙橀噺
```bash
cd /opt/youle/game-docker
cp .env.example .env
vim .env
```
**蹇呴』淇敼鐨勫叧閿厤缃細**
```bash
# 鐖跺煙鍚嶏紙涓変釜瀛愬煙鍚嶈嚜鍔ㄦ帹瀵硷紝鏃犻渶鍗曠嫭閰嶇疆锛?
# 灏嗚嚜鍔ㄧ敓鎴? api.<ROOT_DOMAIN> dlapi.<ROOT_DOMAIN>
ROOT_DOMAIN=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
```
### 4. 棣栨鐢宠 SSL 璇佷功
```bash
chmod +x deploy.sh init-ssl.sh
# 鍏堟祴璇曪紙涓嶇湡姝g敵璇凤紝楠岃瘉鍩熷悕瑙f瀽鏄惁姝g‘锛?
./deploy.sh ssl-init --dry-run
# 姝e紡鐢宠
./deploy.sh ssl-init
```
### 5. 鍚姩鎵€鏈夋湇鍔?
```bash
./deploy.sh up
```
鍚姩鍚庨獙璇侊細
```bash
# 鏌ョ湅鎵€鏈夊鍣ㄧ姸鎬?
./deploy.sh status
# 鏌ョ湅鐗瑰畾鏈嶅姟鏃ュ織
./deploy.sh logs api
./deploy.sh logs dlweb
./deploy.sh logs syncjob
./deploy.sh logs cronjob
```
### 6. 閮ㄧ讲鍛戒护閫熸煡
| 鍛戒护 | 璇存槑 |
|------|------|
| `./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 閮ㄧ讲鍖呭惈涓や釜瀹氭椂浠诲姟瀹瑰櫒锛屾浛浠e師 Windows 鐜鐨?`HttpRequestService.exe` 鍜?`autorun.cmd`銆?
### syncjob 鈥?瀹炴椂鍚屾浠诲姟
**鏇夸唬锛?* Windows `HttpRequestService.exe`锛堥€氳繃 `HttpRequest.exe.json` 閰嶇疆锛?
**浣滅敤锛?* 姣?30 绉?POST 璇锋眰 `dlweb/ext/Synchronize.php`锛屼粠娓告垙鏁版嵁搴?`ct_user_process_log` 琛ㄦ秷璐规湭澶勭悊鏃ュ織锛屽皢鐜╁/浠g悊鏁版嵁鍚屾鍒颁唬鐞嗗悗鍙版暟鎹簱銆?
**杩愯鏂瑰紡锛?* 閫氳繃 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. 绛夊緟褰撳墠璇锋眰瀹屾垚 | 锛圵indows 鏈嶅姟绔嬪嵆鍋滄锛?| `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
```
---
## 鐜鍙橀噺璇存槑
鎵€鏈夌‖缂栫爜鐨勫煙鍚嶃€佹暟鎹簱鍦板潃銆佸瘑閽ラ兘宸插閮ㄥ寲涓虹幆澧冨彉閲忋€?*淇敼閰嶇疆涓嶅啀闇€瑕佹敼浠g爜锛屽彧闇€鏀?`.env` 鏂囦欢銆?*
### 鍙橀噺鍒嗙粍鎬昏
| 鍙橀噺鍒嗙粍 | 璇存槑 |
|---------|------|
| `API_DB_*` | 娓告垙鏍稿績 API 鏁版嵁搴?|
| `DLWEB_DB_*` | 浠g悊鍚庡彴涓诲簱 |
| `DLWEB_SLAVE_DB_*` | 浠g悊鍚庡彴浠庡簱 |
| `EXT_GAME_DB_*` | 澶栭儴娓告垙鏁版嵁搴擄紙Synchronize / SynchronizeReportData锛?|
| `EXT_GRADE_DB_*` | 鎴樼哗鏁版嵁搴擄紙game.php锛?|
| `EXT_DEV_DB_*` | 寮€鍙戞暟鎹簱锛圖EBUG 妯″紡锛?|
| `REDIS_*` | Redis 閰嶇疆 |
| `WX_MINI_*` | 寰俊灏忕▼搴?AppID / Secret |
| `WX_OA_*` | 寰俊鍏紬鍙?AppID / Secret |
| `WX_PAY_*` | 寰俊鏀粯鍟嗘埛閰嶇疆 |
| `REMOTE_CONFIG_*` | 杩滅▼閰嶇疆锛圙itee锛?|
| `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 鏈嶅姟锛坋nv_config.php锛?
鎵€鏈?PHP 鏂囦欢閫氳繃 `env($key, $default)` 鍑芥暟璇诲彇閰嶇疆锛?
```php
// 浼樺厛璇?OS 鐜鍙橀噺锛圖ocker 鍦烘櫙锛夛紝鍥為€€璇?.env 鏂囦欢
$host = env('API_DB_HOST', 'localhost');
```
鍔犺浇浼樺厛绾э細Docker 瀹瑰櫒鐜鍙橀噺锛坄docker-compose env_file`锛? `.env` 鏂囦欢 > 浠g爜榛樿鍊笺€?
### Node.js 鏈嶅姟锛坵xserver_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` 鑷姩鏇挎崲銆倃xserver 涓嶇嫭绔嬪崰鐢ㄥ煙鍚嶏紝閫氳繃 `api.xxx/wx/*` 璺敱鎺ュ叆銆?
---
## 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 涓煙鍚嶅彉閲?|
| 鏁版嵁搴撳瘑鐮?| 鏄庢枃鏁e竷鍦ㄥ涓厤缃枃浠?| 闆嗕腑鍦?`.env`锛堜笉杩涚増鏈簱锛?|
| SSL | 鎵嬪姩鐢宠/閮ㄧ讲璇佷功 | certbot 鑷姩鐢宠 + 12h 鑷姩缁 |
| Synchronize 杞 | `HttpRequestService.exe`锛圵indows 鏈嶅姟锛?| `syncjob` 瀹瑰櫒锛圓lpine + curl锛?|
| 姣忔棩瀹氭椂浠诲姟 | Windows 璁″垝浠诲姟 鈫?`autorun.cmd` | `cronjob` 瀹瑰櫒锛圓lpine 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`锛?|
---
## 甯歌杩愮淮鎿嶄綔
### 鍦烘櫙涓€锛氭洿鎹㈠煙鍚?
褰撻渶瑕佸皢鏈嶅姟杩佺Щ鍒版柊鍩熷悕鏃讹紙渚嬪 `daoqijuyou.cn` 鈫?`newdomain.com`锛夛紝鍙渶鏀逛竴涓彉閲忥細
**1. 淇敼 `.env` 涓殑 `ROOT_DOMAIN`**
```bash
vim .env
```
```bash
# 鏀规垚鏂扮埗鍩熷悕锛屼笁涓瓙鍩熷悕鑷姩璺熼殢
ROOT_DOMAIN=newdomain.com
```
`docker-compose.yml` 灏嗚嚜鍔ㄦ帹瀵硷細
| 鎺ㄥ鍙橀噺 | 缁撴灉 |
|---------|------|
| `API_DOMAIN` | `api.newdomain.com` |
| `DLWEB_DOMAIN` | `dlapi.newdomain.com` |
| `SITE_API_URL` | `https://api.newdomain.com` |
| `SITE_PAY_NOTIFY_URL` | `https://api.newdomain.com` |
| `SITE_OPEN_URL` | `http://open.newdomain.com` |
| `DLWEB_DL_API_V3_URL` | `https://dlapi.newdomain.com` |
> **瀛愬煙鍚嶄笉绗﹀悎鏍囧噯瑙勫緥鏃?*锛堝浣跨敤瀹屽叏涓嶅悓鐨勫墠缂€锛夛紝鍦?`.env` 涓崟鐙鐩栧搴斿彉閲忓嵆鍙紝浼樺厛绾ч珮浜庤嚜鍔ㄦ帹瀵硷細
> ```bash
> DLWEB_DOMAIN=dl-manage.newdomain.com # 瑕嗙洊鍗曚釜瀛愬煙鍚?
> ```
> **鍏朵粬鐙珛 URL 鍙橀噺**锛坄DLWEB_SETTLE_URL`銆乣DLWEB_PROXY_URL`銆乣QQ_CALLBACK_URL` 绛夛級浠嶉渶鍦?`.env` 涓墜鍔ㄩ厤缃紝璇﹁ `.env.example` 涓殑娉ㄩ噴銆?
**2. DNS 瑙f瀽**
纭繚鏂板煙鍚嶅凡鎸囧悜鏈嶅姟鍣?IP锛?
```bash
# 楠岃瘉 DNS 瑙f瀽
nslookup api.newdomain.com
nslookup dlapi.newdomain.com
```
**3. 閲嶆柊鐢宠 SSL 璇佷功**
```bash
# 娴嬭瘯楠岃瘉锛堜笉娑堣€楃敵璇烽檺棰濓級
./deploy.sh ssl-init --staging
# 姝e紡鐢宠
./deploy.sh ssl-init
```
**4. 閲嶅惎鎵€鏈夋湇鍔?*
```bash
./deploy.sh restart
```
閲嶅惎鏃朵細鑷姩瀹屾垚锛?
- Nginx 浣跨敤鏂板煙鍚嶇殑 `server_name` 鍜?SSL 璇佷功
- `docker-entrypoint.sh` 鐢ㄦ柊鍩熷悕鏇挎崲 JS/HTML 涓殑纭紪鐮?URL
- PHP `env()` 璇诲彇鏂扮殑鐜鍙橀噺鍊?
**5. 鏇存柊寰俊鍚庡彴閰嶇疆**
鏇存崲鍩熷悕鍚庯紝蹇呴』鍚屾鏇存柊寰俊涓変釜鍚庡彴鐨勫煙鍚嶇櫧鍚嶅崟锛屽惁鍒欏搴斿姛鑳戒細鐩存帴鎶ラ敊鎴栭潤榛樺け璐ャ€?
> **鍏抽敭璺敱璇存槑锛?* Nginx 鍦?`api.newdomain.com` 涓婇厤缃簡 `/wx/` 鍓嶇紑璺敱鈥斺€斾互 `/wx/` 寮€澶寸殑璇锋眰浼氳鍙嶅悜浠g悊鍒?wxserver锛圢ode.js锛夛紝鍏朵綑璇锋眰浠嶇敱 PHP API 澶勭悊銆倃xserver 鎵€鏈夋帴鍙o紙鍖呮嫭灏忕▼搴忕櫥褰曘€佸叕浼楀彿 OAuth锛夊潎閫氳繃 `api.newdomain.com/wx/*` 璁块棶銆?
---
#### 5.1 寰俊灏忕▼搴忓悗鍙?
> **鍏ュ彛锛?* [mp.weixin.qq.com](https://mp.weixin.qq.com) 鈫?寮€鍙?鈫?寮€鍙戠鐞?鈫?寮€鍙戣缃?鈫?鏈嶅姟鍣ㄥ煙鍚?
| 閰嶇疆椤?| 浣滅敤 | 鏂板€?| 涓嶆洿鏂版椂鐨勭幇璞?|
|--------|------|------|--------------|
| **request 鍚堟硶鍩熷悕** | 灏忕▼搴忚皟鐢?`wx.request()` 璇锋眰 wxserver 鍚庣鎺ュ彛 | `https://api.newdomain.com` | `wx.request` 鐩存帴鎶?`invalid url`锛屾墍鏈夌綉缁滆姹傚け璐?|
| **涓氬姟鍩熷悕** | 灏忕▼搴?`<web-view>` 缁勪欢鍔犺浇鍏紬鍙锋巿鏉冮〉锛堣幏鍙栨案涔呭ご鍍忔祦绋嬶級 | `api.newdomain.com` | 鎵撳紑 web-view 鏃舵彁绀?涓嶅湪涓氬姟鍩熷悕鍒楄〃涓?锛屾巿鏉冮〉鏃犳硶鍔犺浇 |
> **娉ㄦ剰锛?* 灏忕▼搴忓煙鍚嶉厤缃瘡鏈堝彧鑳戒慨鏀?5 娆★紝涓旀瘡椤瑰煙鍚嶅繀椤诲凡澶囨骞跺惎鐢?HTTPS銆?
---
#### 5.2 寰俊鍏紬鍙峰悗鍙?
> **鍏ュ彛锛?* [mp.weixin.qq.com](https://mp.weixin.qq.com) 鈫?璁剧疆涓庡紑鍙?鈫?鍏紬鍙疯缃?鈫?鍔熻兘璁剧疆
**鈶?涓氬姟鍩熷悕**
| 閰嶇疆鍊?| 鐢ㄩ€?|
|--------|------|
| `api.newdomain.com` | 鍦ㄥ叕浼楀彿鍐呮墦寮€鐨勭綉椤垫墍鍦ㄥ煙鍚?|
鐢ㄦ埛鍦ㄥ井淇″唴缃祻瑙堝櫒涓墦寮€鐨勬父鎴忔敮浠橀〉锛坄api.newdomain.com`锛夊繀椤诲湪涓氬姟鍩熷悕鍒楄〃鍐咃紝鍚﹀垯椤甸潰浼氳鎻愮ず"鍩熷悕涓嶅悎娉?鎴栨棤娉曟甯歌闂€?
> **楠岃瘉鏂囦欢锛?* 娣诲姞涓氬姟鍩熷悕鏃讹紝寰俊瑕佹眰鍦ㄨ鍩熷悕鏍圭洰褰曟斁缃?`.txt` 楠岃瘉鏂囦欢銆傚皢寰俊鎻愪緵鐨勬枃浠讹紙濡?`MP_verify_xxx.txt`锛夋斁鍏?`api/` 鏍圭洰褰曪紝鐒跺悗 `./deploy.sh rebuild api`銆?
---
**鈶?缃戦〉鎺堟潈鍩熷悕锛堟渶閲嶈锛?*
| 閰嶇疆鍊?| 鐢ㄩ€?|
|--------|------|
| `api.newdomain.com` | 鍏紬鍙?OAuth2 鎺堟潈鍥炶皟鍩熷悕 |
**涓轰粈涔堟槸 `api.newdomain.com`锛?*
灏忕▼搴忓唴宓?web-view 璺宠浆鍒?`https://api.newdomain.com/wx/auth/oa/login`锛孨ginx `/wx/` 璺敱灏嗘璇锋眰鍙嶅悜浠g悊鍒?wxserver 鐨?`/auth/oa/login`锛寃xserver 鍐嶆妸鐢ㄦ埛閲嶅畾鍚戝埌寰俊鎺堟潈椤碉紝`redirect_uri` 涓?`https://api.newdomain.com/wx/auth/oa/callback`锛堥€氳繃 `WX_OA_REDIRECT_DOMAIN` 鐜鍙橀噺鎺у埗锛夈€傚井淇¤姹?`redirect_uri` 鐨勫煙鍚嶅繀椤诲湪鍏紬鍙峰悗鍙扮殑鎺堟潈鍩熷悕鍒楄〃鍐咃紝鎵€浠ュ~ `api.newdomain.com`銆?
涓嶆洿鏂扮殑鍚庢灉锛氭巿鏉冭烦杞椂寰俊鐩存帴鎷︽埅锛屾樉绀?"redirect_uri 鍩熷悕涓庡悗鍙伴厤缃笉涓€鑷? 閿欒锛屾案涔呭ご鍍忚幏鍙栧姛鑳藉畬鍏ㄤ笉鍙敤銆?
> **鈿狅笍 杩滅▼閰嶇疆涔熼渶瑕佸悓姝ヤ慨鏀癸細** `WX_OA_REDIRECT_DOMAIN` 鏈厤缃椂锛寃xserver 浼氫粠杩滅▼閰嶇疆鏂囦欢璇诲彇 `minipro_api_url` key 浣滀负鍥炶皟鍩熷悕锛堣 `wxserver_daoqi/config/index.js`锛夈€傚嵆浣?`.env` 涓凡姝g‘濉啓 `WX_OA_REDIRECT_DOMAIN`锛屼粛寤鸿鍚屾鏇存柊杩滅▼閰嶇疆锛岄伩鍏嶇幆澧冨彉閲忛厤缃涪澶辨椂鍑虹幇闈欓粯鍥為€€鑷虫棫鍩熷悕鐨勯棶棰樸€?
>
> 杩滅▼閰嶇疆鏂囦欢鍦板潃锛圙itee Raw锛夛細`https://gitee.com/daoqijuyou/config/raw/master/update_jsonv2.txt`
> 鎵惧埌 `minipro_api_url` 瀛楁锛屾洿鏂板€间负锛歚api.newdomain.com/wx`锛堜笉鍚?`https://`锛寃xserver 浼氳嚜鍔ㄨˉ鍏咃級
> **楠岃瘉鏂囦欢锛?* 娣诲姞鎺堟潈鍩熷悕鏃讹紝寰俊瑕佹眰鍦ㄨ鍩熷悕鏍圭洰褰曟斁缃竴涓?`.txt` 楠岃瘉鏂囦欢銆傚皢寰俊鎻愪緵鐨勯獙璇佹枃浠讹紙濡?`MP_verify_xxx.txt`锛夌洿鎺ユ斁鍏?`api/` 鏍圭洰褰曪紝鐒跺悗閲嶅缓 api 闀滃儚浣垮叾鐢熸晥锛?
> ```bash
> ./deploy.sh rebuild api
> ```
---
**鈶?JS 鎺ュ彛瀹夊叏鍩熷悕**
| 閰嶇疆鍊?| 鐢ㄩ€?|
|--------|------|
| `api.newdomain.com` | 寰俊 JS-SDK锛坄wx.config()`锛夐〉闈㈡墍鍦ㄥ煙鍚?|
**涓轰粈涔堟槸 `api.newdomain.com`锛?*
API 鏈嶅姟锛坄youle-api`锛夌殑 PHP 椤甸潰浣跨敤 jsapi_ticket 绛惧悕锛岀敓鎴?`wx.config()` 鍙傛暟锛屼娇鐢ㄥ井淇?JS-SDK 璋冭捣鏀粯锛坄WeixinJSBridge.invoke(getBrandWCPayRequest)`锛夈€傚井淇¤姹傝皟鐢?JS-SDK 鐨勯〉闈㈡墍鍦ㄥ煙鍚嶅繀椤诲湪瀹夊叏鍩熷悕鍒楄〃鍐呫€?
涓嶆洿鏂扮殑鍚庢灉锛歚wx.config()` 绛惧悕楠岃瘉澶辫触锛屽井淇℃敮浠樻寜閽棤娉曞敜璧锋敮浠樼晫闈紝鐢ㄦ埛鐐瑰嚮鏀粯鏃犲弽搴斻€?
---
#### 5.3 寰俊鏀粯鍟嗘埛鍚庡彴
> **鍏ュ彛锛?* [pay.weixin.qq.com](https://pay.weixin.qq.com) 鈫?璐︽埛涓績 鈫?鍟嗘埛淇℃伅 鈫?鏀粯閰嶇疆 鈫?JSAPI 鏀粯鎺堟潈鐩綍
| 閰嶇疆鍊?| 鐢ㄩ€?|
|--------|------|
| `https://api.newdomain.com/` | JSAPI 鏀粯椤甸潰鎵€鍦ㄧ洰褰曪紙蹇呴』鍖呭惈鏈熬鏂滄潬锛?|
**涓轰粈涔堟槸 `api.newdomain.com`锛?*
JSAPI 鏀粯椤甸潰锛坄api/source/apis/pay.php`锛夎繍琛屽湪 `api.newdomain.com` 鍩熷悕涓嬶紝缁熶竴涓嬪崟鏃剁殑 `notify_url`锛堟敮浠樺洖璋冮€氱煡鍦板潃锛変篃鐢?`SITE_PAY_NOTIFY_URL`锛堥粯璁ゅ€?`https://api.newdomain.com`锛夋寚瀹氥€傚井淇℃敮浠樿姹傚彂璧锋敮浠樼殑椤甸潰鍩熷悕蹇呴』鍦ㄦ巿鏉冪洰褰曠櫧鍚嶅崟鍐呫€?
涓嶆洿鏂扮殑鍚庢灉锛氫笅鍗曟椂鎻愮ず"褰撳墠URL鏈敞鍐?锛孞SAPI 鏀粯褰诲簳鏃犳硶浣跨敤銆?
---
#### 閰嶇疆娓呭崟姹囨€?
| 骞冲彴 | 鍏ュ彛椤甸潰 | 閰嶇疆椤?| 濉啓鍊?|
|------|---------|--------|--------|
| **寰俊灏忕▼搴忓悗鍙?* | 寮€鍙?鈫?寮€鍙戠鐞?鈫?寮€鍙戣缃?鈫?鏈嶅姟鍣ㄥ煙鍚?| request 鍚堟硶鍩熷悕 | `https://api.newdomain.com` |
| **寰俊灏忕▼搴忓悗鍙?* | 寮€鍙?鈫?寮€鍙戠鐞?鈫?寮€鍙戣缃?鈫?鏈嶅姟鍣ㄥ煙鍚?| 涓氬姟鍩熷悕 | `api.newdomain.com` |
| **寰俊鍏紬鍙峰悗鍙?* | 璁剧疆涓庡紑鍙?鈫?鍏紬鍙疯缃?鈫?鍔熻兘璁剧疆 | 涓氬姟鍩熷悕 | `api.newdomain.com` |
| **寰俊鍏紬鍙峰悗鍙?* | 璁剧疆涓庡紑鍙?鈫?鍏紬鍙疯缃?鈫?鍔熻兘璁剧疆 | 缃戦〉鎺堟潈鍩熷悕 | `api.newdomain.com` |
| **寰俊鍏紬鍙峰悗鍙?* | 璁剧疆涓庡紑鍙?鈫?鍏紬鍙疯缃?鈫?鍔熻兘璁剧疆 | JS 鎺ュ彛瀹夊叏鍩熷悕 | `api.newdomain.com` |
| **寰俊鏀粯鍟嗘埛鍚庡彴** | 璐︽埛涓績 鈫?鍟嗘埛淇℃伅 鈫?鏀粯閰嶇疆 | JSAPI 鏀粯鎺堟潈鐩綍 | `https://api.newdomain.com/` |
---
### 鍦烘櫙浜岋細鏇存崲鏁版嵁搴撳湴鍧€
褰撴暟鎹簱瀹炰緥杩佺Щ锛堜緥濡?RDS 鍗囩骇銆佸垏鎹㈠尯鍩燂級鏃讹細
**1. 淇敼 `.env` 涓搴旂殑鏁版嵁搴撳彉閲?*
```bash
vim .env
```
鎸夋暟鎹簱鍒嗙粍锛?
| 鏁版嵁搴?| 闇€淇敼鐨勫彉閲?| 浣跨敤鑰?|
|--------|-------------|--------|
| API 涓诲簱 | `API_DB_HOST`, `API_DB_PORT`, `API_DB_USER`, `API_DB_PASSWORD` | api 鏈嶅姟 |
| 浠g悊鍚庡彴涓诲簱 | `DLWEB_DB_HOST`, `DLWEB_DB_PORT`, `DLWEB_DB_USER`, `DLWEB_DB_PASSWORD` | dlweb 鏈嶅姟 |
| 浠g悊鍚庡彴浠庡簱 | `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
# 鏌ョ湅鍚屾浠诲姟鏄惁姝e父
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
# 鍩熷悕鏈彉锛欴NS 鏀规寚鍚戝悗鐩存帴鍚姩
./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://api.yourdomain.com/wx/api/login # wxserver 鍋ュ悍妫€鏌?
# 瀹氭椂浠诲姟杩愯姝e父
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`锛圖ocker 鏈嶅姟鍚嶏級锛屼笉鏄?`localhost`銆?
---
### 鍦烘櫙浜旓細鍗曠嫭寮€鍚?/ 鍏抽棴鐗瑰畾鏈嶅姟
鎵€鏈夋湇鍔″潎鍙嫭绔嬪惎鍋滐紝涓嶅奖鍝嶅叾浠栬繍琛屼腑鐨勫鍣ㄣ€?
#### 鏈嶅姟娓呭崟涓庝緷璧栧叧绯?
| 鏈嶅姟鍚?| 瀹瑰櫒鍚?| 璇存槑 | 渚濊禆 |
|--------|--------|------|------|
| `nginx` | `youle-nginx` | 鍙嶅悜浠g悊 + SSL | api / dlweb / wxserver |
| `api` | `youle-api` | 娓告垙鏍稿績 API | 鈥?|
| `dlweb` | `youle-dlweb` | 浠g悊绠$悊鍚庡彴 | redis |
| `wxserver` | `youle-wxserver` | 寰俊灏忕▼搴忓悗绔?| 鈥?|
| `syncjob` | `youle-syncjob` | 姣?30s 鏁版嵁鍚屾 | dlweb锛堝唴缃戯級 |
| `cronjob` | `youle-cronjob` | 姣忔棩鍑屾櫒鎶ヨ〃浠诲姟 | dlweb锛堝唴缃戯級 |
| `redis` | `youle-redis` | 缂撳瓨 | 鈥?|
| `certbot` | `youle-certbot` | 璇佷功鑷姩缁 | 鈥?|
#### 寮€鍚崟涓湇鍔?
```bash
cd /opt/youle/game-docker
# 鍚姩鏌愪釜鏈嶅姟锛堣嫢闀滃儚涓嶅瓨鍦ㄤ細鑷姩鏋勫缓锛?
docker compose up -d api
docker compose up -d dlweb
docker compose up -d wxserver
docker compose up -d syncjob
docker compose up -d cronjob
docker compose up -d redis
docker compose up -d nginx
docker compose up -d certbot
```
#### 鍏抽棴鍗曚釜鏈嶅姟
```bash
# 鍋滄骞剁Щ闄ゅ鍣紙鏁版嵁 volume 涓嶅彈褰卞搷锛?
docker compose stop api
docker compose stop syncjob
docker compose stop cronjob
# 鎴栬€?stop + 绉婚櫎瀹瑰櫒锛堢瓑鏁堜簬 stop + rm锛?
docker compose rm -sf syncjob
```
> **娉ㄦ剰锛?* `stop` 鍙仠姝㈠鍣紝涓嶅垹闄わ紱`rm -sf` 鍋滄骞跺垹闄ゅ鍣紙涓嬫 `up` 浼氶噸鏂板垱寤猴級銆備袱绉嶆柟寮忓潎涓嶄細涓㈠け鏁版嵁 volume銆?
#### 甯歌鍦烘櫙
**涓存椂鍏抽棴鍚屾浠诲姟锛堢淮鎶ゆ暟鎹簱鏃讹級锛?*
```bash
docker compose stop syncjob cronjob
# 缁存姢瀹屾垚鍚庢仮澶?
docker compose up -d syncjob cronjob
```
**鍙噸寤哄苟閲嶅惎鏌愪釜涓氬姟鏈嶅姟锛堜唬鐮佹洿鏂板悗锛夛細**
```bash
# 閲嶆柊鏋勫缓闀滃儚骞堕噸鍚紝鍏朵粬鏈嶅姟涓嶅彈褰卞搷
docker compose up -d --build api
docker compose up -d --build dlweb
docker compose up -d --build wxserver
```
**鍏抽棴 certbot 鑷姩缁锛堣皟璇曟湡闂撮伩鍏嶈姹傞鐜囬檺鍒讹級锛?*
```bash
docker compose stop certbot
# 璋冭瘯瀹屾瘯鍚庢仮澶?
docker compose up -d certbot
```
**浠呴噸鍚?nginx锛堜慨鏀归厤缃悗鐢熸晥锛夛細**
```bash
docker compose restart nginx
# 鎴栫儹閲嶈浇锛堜笉涓柇杩炴帴锛?
docker exec youle-nginx nginx -s reload
```
**鏌ョ湅鎵€鏈夋湇鍔″綋鍓嶇姸鎬侊細**
```bash
docker compose ps
# 鎴?
./deploy.sh status
```
---
### 鎿嶄綔閫熸煡琛?
| 鍙樻洿鍐呭 | 淇敼 `.env` 涓殑鍙橀噺 | 閲嶅惎鍛戒护 | 棰濆鎿嶄綔 |
|---------|---------------------|---------|---------|
| 鏇存崲鍩熷悕 | `ROOT_DOMAIN`锛堝瓙鍩熷悕涓嶆爣鍑嗘椂鍗曠嫭瑕嗙洊锛?| `./deploy.sh ssl-init && ./deploy.sh restart` | DNS 瑙f瀽 + 寰俊鍚庡彴 |
| 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 鐧藉悕鍗?|
---
### 鍦烘櫙锛氫慨鏀规湰鍦版枃浠跺悗濡備綍鐢熸晥
涓嶅悓鏂囦欢鍦ㄩ暅鍍忎腑鐨勫鐞嗘柟寮忎笉鍚岋紝鍐冲畾浜嗘敼瀹屼唬鐮佸悗闇€瑕佹墽琛屽摢绉嶆搷浣溿€?
#### 鏂囦欢 鈫?鎿嶄綔瀵圭収琛?
| 鏂囦欢璺緞 | 鎵€灞炲鍣?| 杞藉叆鏂瑰紡 | 淇敼鍚庨渶瑕佹墽琛岀殑鎿嶄綔 |
|---------|---------|---------|-------------------|
| `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 鏂囦欢锛夆攢鈹€
# 閲嶅缓鍗曚釜鏈嶅姟锛堟棤缂撳瓨锛岀害 1-5 鍒嗛挓锛?
./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 浼氬姣旈厤缃樊寮傦紝鍙噸鍚湁鍙樻洿鐨勫鍣?
```
---
### 鍦烘櫙涓冿細鏌ョ湅鏃ュ織
鏈」鐩棩蹇楀垎涓轰袱绫伙細**Docker 瀹瑰櫒鏍囧噯杈撳嚭鏃ュ織**锛坄docker logs`锛夊拰**涓氬姟璋冭瘯鏃ュ織**锛堝啓鍏?Docker Volume 鐨勬枃浠讹級銆?
#### 鏃ュ織浣嶇疆鎬昏
| 鏃ュ織绫诲瀷 | 鏉ユ簮瀹瑰櫒 | 鏌ョ湅鏂瑰紡 | 璇存槑 |
|---------|---------|---------|------|
| Nginx 璁块棶/閿欒鏃ュ織 | `youle-nginx` | `docker logs` | HTTP 璇锋眰璁板綍銆丼SL 閿欒 |
| API Apache 閿欒鏃ュ織 | `youle-api` | `docker logs` | PHP Fatal Error銆丄pache 500 |
| API PHP 閿欒鏃ュ織 | `youle-api` | `docker logs` | PHP Warning/Notice锛堝啓鍏?Apache 閿欒娴侊級|
| API 涓氬姟鏃ュ織 | `youle-api` | Volume 鏂囦欢 | `/var/www/html/logs/YYYY-MM-DD.log` |
| API source 妯″潡鏃ュ織 | `youle-api` | Volume 鏂囦欢 | `/var/www/html/source/logs/` |
| DLWEB Apache 閿欒鏃ュ織 | `youle-dlweb` | `docker logs` | PHP Fatal Error銆丄pache 500 |
| DLWEB 涓氬姟鏃ュ織 | `youle-dlweb` | Volume 鏂囦欢 | `/var/www/html/api/logs/` |
| 鍚屾浠诲姟璋冭瘯鏃ュ織 | `youle-dlweb` | Volume 鏂囦欢 | `/var/www/html/api/ext/debug/synchronize/YYYY-MM-DD.log` |
| 鎶ヨ〃鍚屾璋冭瘯鏃ュ織 | `youle-dlweb` | Volume 鏂囦欢 | `/var/www/html/api/ext/debug/SynchronizeReportData/YYYY-MM-DD.log` |
| 鑷姩浠诲姟璋冭瘯鏃ュ織 | `youle-dlweb` | Volume 鏂囦欢 | `/var/www/html/api/ext/debug/autotask/YYYY-MM-DD.log` |
| syncjob 杩愯鏃ュ織 | `youle-syncjob` | `docker logs` | curl 璇锋眰缁撴灉锛屾瘡 30s 涓€鏉?|
| cronjob 璋冨害鏃ュ織 | `youle-cronjob` | `docker logs` | cron 瑙﹀彂璁板綍 |
| wxserver 杩愯鏃ュ織 | `youle-wxserver` | `docker logs` | Node.js 鏍囧噯杈撳嚭 |
---
#### 1. 鏌ョ湅瀹瑰櫒鏍囧噯杈撳嚭鏃ュ織锛坉ocker logs锛?
```bash
# 鏌ョ湅鏈€杩?50 琛岋紙蹇€熸瑙堬級
docker logs --tail 50 youle-nginx
docker logs --tail 50 youle-api
docker logs --tail 50 youle-dlweb
docker logs --tail 50 youle-syncjob
docker logs --tail 50 youle-cronjob
docker logs --tail 50 youle-wxserver
# 瀹炴椂璺熻釜鏃ュ織锛圕trl+C 閫€鍑猴級
docker logs -f youle-api
docker logs -f youle-syncjob
# 鏌ョ湅鏈€杩?100 琛屽苟瀹炴椂璺熻釜
docker logs --tail 100 -f youle-dlweb
# 鏌ョ湅甯︽椂闂存埑鐨勬棩蹇?
docker logs -t --tail 50 youle-nginx
# 鏌ョ湅鏌愭椂闂存涔嬪悗鐨勬棩蹇楋紙ISO 8601 鏍煎紡锛?
docker logs --since 2026-04-13T10:00:00 youle-api
docker logs --since 1h youle-syncjob # 鏈€杩?1 灏忔椂
```
> **鎻愮ず锛?* `docker logs` 鏌ョ湅鐨勬槸瀹瑰櫒鐨?stdout/stderr 杈撳嚭锛孭HP Fatal Error 鍜?Apache 閿欒鍧囦細鍑虹幇鍦ㄨ繖閲屻€?
---
#### 2. 鏌ョ湅涓氬姟璋冭瘯鏃ュ織鏂囦欢锛圴olume 鏂囦欢锛?
涓氬姟璋冭瘯鏃ュ織鍐欏叆 Docker Volume锛屾寜鏃ユ湡鍒嗘枃浠讹紙`YYYY-MM-DD.log`锛夈€?
```bash
# --- API 涓氬姟鏃ュ織 ---
# 鍒楀嚭鎵€鏈夋棩蹇楁枃浠?
docker exec youle-api ls -lh /var/www/html/logs/
# 鏌ョ湅浠婂ぉ鐨?API 涓氬姟鏃ュ織锛堟湯灏?50 琛岋級
docker exec youle-api tail -50 /var/www/html/logs/$(date +%Y-%m-%d).log
# 瀹炴椂璺熻釜浠婂ぉ鐨?API 鏃ュ織
docker exec youle-api tail -f /var/www/html/logs/$(date +%Y-%m-%d).log
# 鏌ョ湅瀹屾暣鍐呭
docker exec youle-api cat /var/www/html/logs/$(date +%Y-%m-%d).log
# --- API source 妯″潡鏃ュ織 ---
docker exec youle-api ls -lhR /var/www/html/source/logs/
docker exec youle-api tail -50 /var/www/html/source/logs/$(date +%Y-%m-%d).log
# --- DLWEB 涓氬姟鏃ュ織 ---
# 鍒楀嚭鎵€鏈夋棩蹇楁枃浠?
docker exec youle-dlweb ls -lh /var/www/html/api/logs/
# 鏌ョ湅浠婂ぉ鐨?DLWEB 涓氬姟鏃ュ織
docker exec youle-dlweb tail -50 /var/www/html/api/logs/$(date +%Y-%m-%d).log
# --- 鍚屾浠诲姟璋冭瘯鏃ュ織锛圫ynchronize.php锛?--
# 鍒楀嚭鏃ュ織鏂囦欢
docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/synchronize/
# 鏌ョ湅浠婂ぉ鐨勫悓姝ユ棩蹇楋紙鏈€杩?50 琛岋級
docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
# 瀹炴椂璺熻釜鍚屾鏃ュ織锛堟瘡 30s 鍒锋柊锛?
docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
# --- 鎶ヨ〃鍚屾璋冭瘯鏃ュ織锛圫ynchronizeReportData.php锛?--
docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/SynchronizeReportData/
docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/SynchronizeReportData/$(date +%Y-%m-%d).log
# --- 鑷姩浠诲姟璋冭瘯鏃ュ織锛坅utotask锛?--
docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/autotask/
docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/autotask/$(date +%Y-%m-%d).log
```
---
#### 3. 涓€閿煡鐪嬫墍鏈夊叧閿棩蹇楋紙姹囨€诲懡浠わ級
```bash
# 蹇€熷仴搴锋鏌ワ細鍚屾椂鏌ョ湅 syncjob 鐘舵€?+ 浠婂ぉ鐨勫悓姝ヨ皟璇曟棩蹇楁湯灏?
echo '=== syncjob 瀹瑰櫒鏃ュ織锛堟渶杩?0琛岋級==='
docker logs --tail 20 youle-syncjob
echo
echo '=== 鍚屾璋冭瘯鏃ュ織锛堟渶杩?0琛岋級==='
docker exec youle-dlweb tail -20 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
echo
echo '=== API 涓氬姟鏃ュ織锛堟渶杩?0琛岋級==='
docker exec youle-api tail -20 /var/www/html/logs/$(date +%Y-%m-%d).log
```
---
#### 4. 鏌ョ湅 Nginx 璁块棶鏃ュ織锛堣姹傛帓鏌ワ級
```bash
# Nginx 璁块棶鏃ュ織锛堟渶杩?100 鏉¤姹傦級
docker logs --tail 100 youle-nginx
# 杩囨护 HTTP 500 閿欒
docker logs youle-nginx 2>&1 | grep ' 500 '
# 杩囨护鐗瑰畾 IP 鐨勮姹?
docker logs youle-nginx 2>&1 | grep '瀹㈡埛绔疘P鍦板潃'
# 杩囨护 SSL/TLS 鎻℃墜閿欒锛堝鎴风鍙戦€佷簡闈?HTTPS 璇锋眰鍒?80 绔彛锛?
docker logs youle-nginx 2>&1 | grep 'SSL_do_handshake\|no required SSL'
```
---
#### 5. 浣跨敤 deploy.sh 蹇嵎鏌ョ湅
```bash
# 绛夋晥浜?docker logs --tail 100 + 瀹炴椂璺熻釜
./deploy.sh logs api
./deploy.sh logs dlweb
./deploy.sh logs syncjob
./deploy.sh logs cronjob
./deploy.sh logs nginx
./deploy.sh logs wxserver
# 鍔?-f 瀹炴椂璺熻釜
./deploy.sh logs -f api
./deploy.sh logs -f syncjob
```
### 璋冩暣鍚屾棰戠巼
```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
```
---
### 鍦烘櫙鍏細鍗歌浇鍜屾竻鐞?
鏍规嵁闇€姹傞€夋嫨鍗歌浇鑼冨洿锛屾搷浣滀笉鍙€嗭紝璇锋彁鍓嶅浠介噸瑕佹暟鎹€?
#### 鍗歌浇鍓嶏細澶囦唤鍏抽敭鏁版嵁
```bash
cd /opt/youle/game-docker
# 1. 澶囦唤 .env锛堝寘鍚墍鏈夊瘑閽ワ紝涓嶅湪鐗堟湰搴撲腑锛?
cp .env ~/youle-env-backup.env
# 2. 澶囦唤 Redis 鏁版嵁锛堝鏈変笟鍔℃暟鎹瓨鍌ㄥ湪 Redis 涓級
docker exec youle-redis redis-cli -a "${REDIS_PASSWORD}" BGSAVE
# 鎴栫洿鎺ュ浠?volume
docker run --rm -v game-docker_redis-data:/data -v ~/:/backup alpine \
tar czf /backup/redis-data-backup.tar.gz /data
# 3. 澶囦唤鏃ュ織锛堟寜闇€锛?
docker cp youle-api:/var/www/html/logs ~/api-logs-backup
docker cp youle-dlweb:/var/www/html/api/logs ~/dlweb-logs-backup
```
---
#### 浠呭仠姝㈡墍鏈夊鍣紙淇濈暀闀滃儚鍜屾暟鎹紝鍙殢鏃舵仮澶嶏級
```bash
cd /opt/youle/game-docker
docker compose stop
# 楠岃瘉
docker compose ps
```
鎭㈠杩愯锛?
```bash
docker compose start
```
---
#### 鍋滄骞跺垹闄ゅ鍣紙淇濈暀闀滃儚銆乿olumes 鍜岄」鐩枃浠讹級
```bash
cd /opt/youle/game-docker
docker compose down
# 楠岃瘉瀹瑰櫒宸插垹闄?
docker ps -a | grep youle
```
> 姝ゆ搷浣滀笉浼氬垹闄ゆ暟鎹?volume 鍜屽凡鏋勫缓鐨勯暅鍍忥紝鍐嶆 `docker compose up -d` 鍙揩閫熸仮澶嶏紝鏃犻渶閲嶆柊鏋勫缓銆?
---
#### 瀹屽叏鍗歌浇锛堝垹闄ゅ鍣?+ volumes + 闀滃儚锛?
> **璀﹀憡锛?* 浠ヤ笅鎿嶄綔灏嗗垹闄?Redis 缂撳瓨鍜屾墍鏈夋棩蹇楁暟鎹紝涓嶅彲鎭㈠銆?
```bash
cd /opt/youle/game-docker
# 鍋滄骞跺垹闄ゅ鍣?+ 鎵€鏈夌浉鍏?volumes
docker compose down -v
# 鍒犻櫎鏈」鐩瀯寤虹殑闀滃儚
docker rmi game-docker-api game-docker-dlweb game-docker-wxserver 2>/dev/null || true
# 楠岃瘉
docker volume ls | grep game-docker
docker images | grep game-docker
```
---
#### 褰诲簳娓呯悊锛堝垹闄ゅ鍣?+ volumes + 闀滃儚 + 椤圭洰鐩綍 + SSL 璇佷功锛?
> **璀﹀憡锛?* SSL 璇佷功鍒犻櫎鍚庨渶閲嶆柊鐢宠锛圠et's Encrypt 鏈夐鐜囬檺鍒讹紝姣?7 澶╂渶澶?5 娆★級銆?
```bash
cd /opt/youle/game-docker
# 1. 鍋滄骞跺垹闄ゅ鍣?+ volumes
docker compose down -v
# 2. 鍒犻櫎鏋勫缓闀滃儚
docker rmi game-docker-api game-docker-dlweb game-docker-wxserver 2>/dev/null || true
# 3. 娓呯悊 Docker 鎮┖璧勬簮锛堝彲閫夛級
docker system prune -f
# 4. 鍒犻櫎 SSL 璇佷功锛圠et's Encrypt锛?
docker run --rm -v game-docker_certbot-certs:/etc/letsencrypt certbot/certbot delete \
--cert-name "${API_DOMAIN}" --non-interactive 2>/dev/null || true
docker run --rm -v game-docker_certbot-certs:/etc/letsencrypt certbot/certbot delete \
--cert-name "${DLWEB_DOMAIN}" --non-interactive 2>/dev/null || true
# 鎴栫洿鎺ュ垹闄よ瘉涔?volume
docker volume rm game-docker_certbot-certs game-docker_certbot-webroot 2>/dev/null || true
# 5. 鍒犻櫎椤圭洰鐩綍
rm -rf /opt/youle/game-docker
```
---
#### 鍒犻櫎鍗曚釜鏈嶅姟鐨勫鍣ㄥ拰闀滃儚
```bash
cd /opt/youle/game-docker
# 浠?dlweb 涓轰緥
docker compose stop dlweb
docker compose rm -sf dlweb
docker rmi game-docker-dlweb
# 涓嬫鍚姩鏃朵細閲嶆柊鏋勫缓
docker compose up -d --build dlweb
```
---
#### 娓呯悊瀹氭椂浠诲姟娈嬬暀
```bash
# 鍋滄骞跺垹闄?syncjob / cronjob 瀹瑰櫒
docker compose stop syncjob cronjob
docker compose rm -sf syncjob cronjob
# 娓呯悊鍏变韩淇″彿 volume锛堝鏈夋畫鐣欐殏鍋滄枃浠讹級
docker run --rm -v game-docker_shared-signal:/shared alpine rm -f /shared/syncjob.pause
# 濡傞渶瀹屽叏鍒犻櫎鍏变韩 volume
docker volume rm game-docker_shared-signal
```
---
#### 鍗歌浇鎿嶄綔閫熸煡
| 鐩爣 | 鍛戒护 | 淇濈暀鍐呭 |
|------|------|----------|
| 涓存椂鍋滄锛堝彲鎭㈠锛?| `docker compose stop` | 瀹瑰櫒 / 闀滃儚 / volumes / 鏂囦欢 |
| 鍒犻櫎瀹瑰櫒 | `docker compose down` | 闀滃儚 / volumes / 鏂囦欢 |
| 鍒犻櫎瀹瑰櫒 + volumes | `docker compose down -v` | 闀滃儚 / 鏂囦欢 |
| 鍒犻櫎瀹瑰櫒 + volumes + 闀滃儚 | `docker compose down -v` + `docker rmi ...` | 鏂囦欢 |
| 瀹屽叏娓呯悊 | 涓婅堪鍏ㄩ儴 + `rm -rf /opt/youle/game-docker` | 鏃?|
---
### 鍦烘櫙鍏細娓呴櫎鏃ュ織
> **璇存槑锛?* Volume 鏂囦欢鏃ュ織锛堜笟鍔¤皟璇曟棩蹇楋級鍜?Docker 瀹瑰櫒鏃ュ織锛坰tdout锛夐渶瑕佸垎鍒竻鐞嗐€傛竻鐞嗗墠寤鸿鍏堝浠芥垨纭涓嶅啀闇€瑕佽繖浜涙棩蹇椼€?
#### 1. 娓呴櫎 Docker 瀹瑰櫒鏃ュ織锛坰tdout/stderr锛?
Docker 瀹瑰櫒鐨勬爣鍑嗚緭鍑烘棩蹇楀瓨鍌ㄥ湪瀹夸富鏈?`/var/lib/docker/containers/<瀹瑰櫒ID>/<瀹瑰櫒ID>-json.log`锛岀洿鎺ユ竻绌鸿鏂囦欢鍗冲彲銆?
```bash
# 娓呯┖鍗曚釜瀹瑰櫒鐨?docker logs锛堝鍣ㄤ繚鎸佽繍琛岋紝涓嶄腑鏂湇鍔★級
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-syncjob)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-api)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-dlweb)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-nginx)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-cronjob)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-wxserver)
# 涓€閿竻绌烘墍鏈?youle-* 瀹瑰櫒鐨?docker logs
for name in youle-nginx youle-api youle-dlweb youle-wxserver youle-syncjob youle-cronjob youle-redis youle-certbot; do
logpath=$(docker inspect --format='{{.LogPath}}' $name 2>/dev/null)
[ -n "$logpath" ] && truncate -s 0 "$logpath" && echo "Cleared: $name"
done
```
> **娉ㄦ剰锛?* `truncate -s 0` 娓呯┖鏂囦欢鍐呭锛屼笉鍒犻櫎鏂囦欢锛屽鍣ㄦ棤闇€閲嶅惎锛屽悗缁棩蹇楁甯稿啓鍏ャ€?
---
#### 2. 娓呴櫎涓氬姟璋冭瘯鏃ュ織鏂囦欢锛圴olume 鍐呯殑鎸夋棩鏈熸枃浠讹級
```bash
# --- 娓呴櫎 API 涓氬姟鏃ュ織 ---
# 鍒犻櫎鎵€鏈夊巻鍙叉棩蹇楋紙淇濈暀浠婂ぉ锛?
docker exec youle-api sh -c "
find /var/www/html/logs/ -name '*.log' ! -name '$(date +%Y-%m-%d).log' -delete
"
# 娓呯┖浠婂ぉ鐨勬棩蹇楁枃浠讹紙淇濈暀鏂囦欢锛屾竻绌哄唴瀹癸級
docker exec youle-api truncate -s 0 /var/www/html/logs/$(date +%Y-%m-%d).log
# 鍒犻櫎鍏ㄩ儴鏃ュ織鏂囦欢锛堝惈浠婂ぉ锛?
docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'
# --- 娓呴櫎 DLWEB 涓氬姟鏃ュ織 ---
# 鍒犻櫎鎵€鏈夊巻鍙叉棩蹇楋紙淇濈暀浠婂ぉ锛?
docker exec youle-dlweb sh -c "
find /var/www/html/api/logs/ -name '*.log' ! -name '$(date +%Y-%m-%d).log' -delete
"
# 鍒犻櫎鍏ㄩ儴鏃ュ織鏂囦欢
docker exec youle-dlweb sh -c 'rm -f /var/www/html/api/logs/*.log'
# --- 娓呴櫎鍚屾浠诲姟璋冭瘯鏃ュ織 ---
# 鍒犻櫎 30 澶╁墠鐨勬棫鏃ュ織
docker exec youle-dlweb find /var/www/html/api/ext/debug/ -name '*.log' -mtime +30 -delete
# 鍒犻櫎鎵€鏈夊巻鍙叉棩蹇楋紙淇濈暀浠婂ぉ锛?
docker exec youle-dlweb sh -c "
find /var/www/html/api/ext/debug/ -name '*.log' ! -name '$(date +%Y-%m-%d).log' -delete
"
# 娓呯┖浠婂ぉ鐨勫悓姝ユ棩蹇楋紙淇濈暀鏂囦欢锛?
docker exec youle-dlweb truncate -s 0 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
# 鍒犻櫎鍏ㄩ儴璋冭瘯鏃ュ織锛堟墍鏈夊瓙鐩綍锛?
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/ext/debug/synchronize/*.log
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log
rm -f /var/www/html/api/ext/debug/autotask/*.log
'
```
---
#### 3. 涓€閿竻鐞嗘墍鏈夋棩蹇楋紙docker logs + 涓氬姟鏃ュ織锛?
> **璀﹀憡锛?* 浠ヤ笅鑴氭湰灏嗘竻绌烘墍鏈夊鍣ㄦ棩蹇楀拰鍏ㄩ儴涓氬姟鏃ュ織鏂囦欢锛屾墽琛屽墠璇风‘璁や笉闇€瑕佷繚鐣欑幇鏈夋棩蹇椼€?
```bash
#!/bin/bash
# 涓€閿竻鐞嗘墍鏈夋棩蹇楋紙鍦ㄦ湇鍔″櫒 /opt/youle/game-docker/ 鐩綍涓嬫墽琛岋級
echo '=== 娓呯┖ Docker 瀹瑰櫒鏃ュ織 ==='
for name in youle-nginx youle-api youle-dlweb youle-wxserver youle-syncjob youle-cronjob youle-redis youle-certbot; do
logpath=$(docker inspect --format='{{.LogPath}}' $name 2>/dev/null)
if [ -n "$logpath" ] && [ -f "$logpath" ]; then
truncate -s 0 "$logpath"
echo " Cleared docker log: $name"
fi
done
echo '=== 娓呯┖涓氬姟鏃ュ織鏂囦欢 ==='
# API 涓氬姟鏃ュ織
docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log /var/www/html/source/logs/*.log 2>/dev/null; echo " Cleared api logs"'
# DLWEB 涓氬姟鏃ュ織 + 璋冭瘯鏃ュ織
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/logs/*.log 2>/dev/null
rm -f /var/www/html/api/ext/debug/synchronize/*.log 2>/dev/null
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log 2>/dev/null
rm -f /var/www/html/api/ext/debug/autotask/*.log 2>/dev/null
echo " Cleared dlweb logs"
'
echo '=== 瀹屾垚 ==='
```
灏嗕互涓婂唴瀹逛繚瀛樹负鏈嶅姟鍣ㄤ笂鐨?`/opt/youle/game-docker/clear-logs.sh`锛岃祴浜堟墽琛屾潈闄愬悗浣跨敤锛?
```bash
chmod +x /opt/youle/game-docker/clear-logs.sh
/opt/youle/game-docker/clear-logs.sh
```
---
#### 4. 鏃ュ織娓呯悊閫熸煡
> 浠ヤ笅鍛戒护鍦?**SSH 鐧诲綍鏈嶅姟鍣ㄥ悗**鐩存帴鎵ц锛堟棤闇€ `ssh root@...` 鍓嶇紑锛夈€?
**鏌ョ湅鏃ュ織**
| 鐩爣 | 鍛戒护 |
|------|------|
| nginx 璁块棶鏃ュ織锛堟湯灏?0琛岋級 | `docker logs --tail 50 youle-nginx` |
| nginx 璁块棶鏃ュ織锛堝疄鏃惰窡韪級 | `docker logs -f youle-nginx` |
| wxserver 鏃ュ織锛堟湯灏?0琛岋級 | `docker logs --tail 50 youle-wxserver` |
| wxserver 鏃ュ織锛堝疄鏃惰窡韪級 | `docker logs -f youle-wxserver` |
| API PHP 閿欒鏃ュ織锛堟湯灏?0琛岋級 | `docker exec youle-api tail -50 /var/log/apache2/php_errors.log` |
| API 涓氬姟鏃ュ織_浠婂ぉ锛堟湯灏?0琛岋級 | `docker exec youle-api tail -50 /var/www/html/logs/$(date +%Y-%m-%d).log` |
| API 涓氬姟鏃ュ織_浠婂ぉ锛堝畬鏁达級 | `docker exec youle-api cat /var/www/html/logs/$(date +%Y-%m-%d).log` |
| API 涓氬姟鏃ュ織_浠婂ぉ锛堝疄鏃惰窡韪級 | `docker exec youle-api tail -f /var/www/html/logs/$(date +%Y-%m-%d).log` |
| 鍒楀嚭 API 涓氬姟鏃ュ織鏂囦欢 | `docker exec youle-api ls -lh /var/www/html/logs/` |
| 鍚屾璋冭瘯鏃ュ織_浠婂ぉ锛堟湯灏?0琛岋級 | `docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log` |
| 鍚屾璋冭瘯鏃ュ織_浠婂ぉ锛堝疄鏃惰窡韪級 | `docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log` |
| 鍒楀嚭鍚屾璋冭瘯鏃ュ織鏂囦欢 | `docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/synchronize/` |
| syncjob 浠诲姟鏃ュ織锛堟湯灏?0琛岋級 | `docker logs --tail 50 youle-syncjob` |
| cronjob 浠诲姟鏃ュ織锛堟湯灏?0琛岋級 | `docker logs --tail 50 youle-cronjob` |
**娓呯悊鏃ュ織**
| 鐩爣 | 鍛戒护 |
|------|------|
| 娓呯┖ nginx docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-nginx)` |
| 娓呯┖ wxserver docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-wxserver)` |
| 娓呯┖ API docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-api)` |
| 娓呯┖ dlweb docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-dlweb)` |
| 娓呯┖鎵€鏈夊鍣?docker logs | `for n in youle-nginx youle-api youle-dlweb youle-wxserver youle-syncjob youle-cronjob youle-redis youle-certbot; do truncate -s 0 $(docker inspect --format='{{.LogPath}}' $n 2>/dev/null) 2>/dev/null; done` |
| 娓呯┖浠婂ぉ API 涓氬姟鏃ュ織 | `docker exec youle-api truncate -s 0 /var/www/html/logs/$(date +%Y-%m-%d).log` |
| 娓呯┖浠婂ぉ鍚屾璋冭瘯鏃ュ織 | `docker exec youle-dlweb truncate -s 0 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log` |
| 鍒犻櫎 API 鍏ㄩ儴鍘嗗彶鏃ュ織 | `docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'` |
| 鍒犻櫎璋冭瘯鏃ュ織 30 澶╁墠鏃ф枃浠?| `docker exec youle-dlweb find /var/www/html/api/ext/debug/ -name '*.log' -mtime +30 -delete` |
| 鍒犻櫎璋冭瘯鏃ュ織鍏ㄩ儴鏂囦欢 | `docker exec youle-dlweb sh -c 'rm -f /var/www/html/api/ext/debug/synchronize/*.log /var/www/html/api/ext/debug/SynchronizeReportData/*.log /var/www/html/api/ext/debug/autotask/*.log'` |
| 涓€閿竻鐞嗗叏閮ㄦ棩蹇?| `/opt/youle/game-docker/clear-logs.sh` |
```
---
### 鍦烘櫙涔濓細浠?Windows 鏈湴鏌ョ湅鍜屽垹闄や笟鍔℃棩蹇?
> 浠ヤ笅鍛戒护鍦?**Windows PowerShell** 涓墽琛岋紝閫氳繃 SSH 鐩存帴璇诲彇鏈嶅姟鍣ㄤ笂鐨勪笟鍔℃棩蹇楁枃浠躲€?
> 鏃ュ織鏉ユ簮鐩綍锛堟湰鍦颁唬鐮佹槧灏勫埌瀹瑰櫒鐨?Volume锛夛細
> - `api/logs/` 鈫?瀹瑰櫒鍐?`/var/www/html/logs/`
> - `dlweb/api/ext/debug/` 鈫?瀹瑰櫒鍐?`/var/www/html/api/ext/debug/`
---
#### 鏌ョ湅鏃ュ織
```powershell
# 鈹€鈹€ 鑾峰彇浠婂ぉ鐨勬棩鏈熷瓧绗︿覆 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
$today = (Get-Date -Format "yyyy-MM-dd")
# 鈹€鈹€ api/logs 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
# 鍒楀嚭鎵€鏈夋棩蹇楁枃浠?
ssh root@47.98.203.17 "docker exec youle-api ls -lh /var/www/html/logs/"
# 鏌ョ湅浠婂ぉ鐨?API 涓氬姟鏃ュ織锛堟湯灏?50 琛岋級
ssh root@47.98.203.17 "docker exec youle-api tail -50 /var/www/html/logs/$today.log"
# 鏌ョ湅浠婂ぉ鐨?API 涓氬姟鏃ュ織锛堝畬鏁村唴瀹癸級
ssh root@47.98.203.17 "docker exec youle-api cat /var/www/html/logs/$today.log"
# 瀹炴椂璺熻釜浠婂ぉ鐨?API 涓氬姟鏃ュ織锛圕trl+C 鍋滄锛?
ssh root@47.98.203.17 "docker exec youle-api tail -f /var/www/html/logs/$today.log"
# 鈹€鈹€ dlweb/api/ext/debug/synchronize 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
# 鍒楀嚭鎵€鏈夊悓姝ヨ皟璇曟棩蹇楁枃浠?
ssh root@47.98.203.17 "docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/synchronize/"
# 鏌ョ湅浠婂ぉ鐨勫悓姝ヨ皟璇曟棩蹇楋紙鏈熬 50 琛岋級
ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$today.log"
# 鏌ョ湅浠婂ぉ鐨勫悓姝ヨ皟璇曟棩蹇楋紙瀹屾暣鍐呭锛?
ssh root@47.98.203.17 "docker exec youle-dlweb cat /var/www/html/api/ext/debug/synchronize/$today.log"
# 瀹炴椂璺熻釜鍚屾璋冭瘯鏃ュ織锛圕trl+C 鍋滄锛?
ssh root@47.98.203.17 "docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$today.log"
# 鈹€鈹€ dlweb/api/ext/debug/SynchronizeReportData 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
ssh root@47.98.203.17 "docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/SynchronizeReportData/"
ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/SynchronizeReportData/$today.log"
# 鈹€鈹€ dlweb/api/ext/debug/autotask 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
ssh root@47.98.203.17 "docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/autotask/"
ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/autotask/$today.log"
# 鈹€鈹€ 涓€閿眹鎬伙細鍚屾椂鏌ョ湅涓や釜鐩綍浠婂ぉ鐨勬棩蹇楁湯灏?鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
$today = (Get-Date -Format "yyyy-MM-dd")
ssh root@47.98.203.17 @"
echo '=== api/logs/$today.log ==='
docker exec youle-api tail -30 /var/www/html/logs/$today.log
echo
echo '=== synchronize/$today.log ==='
docker exec youle-dlweb tail -30 /var/www/html/api/ext/debug/synchronize/$today.log
echo
echo '=== SynchronizeReportData/$today.log ==='
docker exec youle-dlweb tail -30 /var/www/html/api/ext/debug/SynchronizeReportData/$today.log
"@
```
---
#### 鍒犻櫎鏃ュ織
```powershell
# 鈹€鈹€ 鑾峰彇浠婂ぉ鐨勬棩鏈熷瓧绗︿覆 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
$today = (Get-Date -Format "yyyy-MM-dd")
# 鈹€鈹€ api/logs 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
# 娓呯┖浠婂ぉ鐨?API 涓氬姟鏃ュ織锛堜繚鐣欐枃浠讹紝娓呯┖鍐呭锛?
ssh root@47.98.203.17 "docker exec youle-api truncate -s 0 /var/www/html/logs/$today.log"
# 鍒犻櫎浠婂ぉ鐨?API 涓氬姟鏃ュ織鏂囦欢
ssh root@47.98.203.17 "docker exec youle-api rm -f /var/www/html/logs/$today.log"
# 鍒犻櫎鎵€鏈?API 涓氬姟鏃ュ織锛堜繚鐣欎粖澶╋級
ssh root@47.98.203.17 "docker exec youle-api sh -c `"find /var/www/html/logs/ -name '*.log' ! -name '$today.log' -delete`""
# 鍒犻櫎鍏ㄩ儴 API 涓氬姟鏃ュ織锛堝惈浠婂ぉ锛?
ssh root@47.98.203.17 "docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'"
# 鈹€鈹€ dlweb/api/ext/debug 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
# 娓呯┖浠婂ぉ鐨勫悓姝ヨ皟璇曟棩蹇楋紙淇濈暀鏂囦欢锛屾竻绌哄唴瀹癸級
ssh root@47.98.203.17 "docker exec youle-dlweb truncate -s 0 /var/www/html/api/ext/debug/synchronize/$today.log"
# 鍒犻櫎浠婂ぉ鐨勫悓姝ヨ皟璇曟棩蹇楁枃浠?
ssh root@47.98.203.17 "docker exec youle-dlweb rm -f /var/www/html/api/ext/debug/synchronize/$today.log"
# 鍒犻櫎 30 澶╁墠鐨勬棫璋冭瘯鏃ュ織锛堜笁涓瓙鐩綍锛?
ssh root@47.98.203.17 "docker exec youle-dlweb find /var/www/html/api/ext/debug/ -name '*.log' -mtime +30 -delete"
# 鍒犻櫎鎵€鏈夎皟璇曟棩蹇楋紙淇濈暀浠婂ぉ锛屼笁涓瓙鐩綍锛?
ssh root@47.98.203.17 "docker exec youle-dlweb sh -c `"find /var/www/html/api/ext/debug/ -name '*.log' ! -name '$today.log' -delete`""
# 鍒犻櫎鍏ㄩ儴璋冭瘯鏃ュ織锛堝惈浠婂ぉ锛屼笁涓瓙鐩綍锛?
ssh root@47.98.203.17 @"
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/ext/debug/synchronize/*.log
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log
rm -f /var/www/html/api/ext/debug/autotask/*.log
'
"@
# 鈹€鈹€ 涓€閿竻鐞嗭細api/logs + dlweb/api/ext/debug 鍏ㄩ儴鏃ュ織 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
ssh root@47.98.203.17 @"
docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/ext/debug/synchronize/*.log
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log
rm -f /var/www/html/api/ext/debug/autotask/*.log
'
echo "Done"
"@
```
---
#### 蹇嵎閫熸煡琛?
| 鎿嶄綔 | PowerShell 鍛戒护 |
|------|----------------|
| 鏌ョ湅 api/logs 浠婂ぉ鏃ュ織 | `ssh root@47.98.203.17 "docker exec youle-api cat /var/www/html/logs/$(Get-Date -Format 'yyyy-MM-dd').log"` |
| 鏌ョ湅鍚屾璋冭瘯鏃ュ織 | `ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$(Get-Date -Format 'yyyy-MM-dd').log"` |
| 瀹炴椂璺熻釜鍚屾鏃ュ織 | `ssh root@47.98.203.17 "docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$(Get-Date -Format 'yyyy-MM-dd').log"` |
| 娓呯┖ api/logs 浠婂ぉ鏃ュ織 | `ssh root@47.98.203.17 "docker exec youle-api truncate -s 0 /var/www/html/logs/$(Get-Date -Format 'yyyy-MM-dd').log"` |
| 娓呯┖鍚屾璋冭瘯鏃ュ織 | `ssh root@47.98.203.17 "docker exec youle-dlweb truncate -s 0 /var/www/html/api/ext/debug/synchronize/$(Get-Date -Format 'yyyy-MM-dd').log"` |
| 鍒犻櫎鍏ㄩ儴璋冭瘯鏃ュ織 | `ssh root@47.98.203.17 "docker exec youle-dlweb sh -c 'rm -f /var/www/html/api/ext/debug/synchronize/*.log /var/www/html/api/ext/debug/SynchronizeReportData/*.log /var/www/html/api/ext/debug/autotask/*.log'"` |
## 数据库远程管理Navicat SSH 隧道)
> RDS 白名单仅开放服务器 `47.98.203.17`,任何设备需通过 SSH 隧道访问数据库,无需开放公网 IP安全可控。
### 原理
```
本机 Navicat ──SSH加密隧道──▶ 47.98.203.17 ──内网──▶ RDS MySQL
```
### Navicat 连接配置(以 agent_db 为例)
#### 第一步SSH 标签页
| 字段 | 值 |
|------|----|
| 使用 SSH 通道 | ✅ 勾选 |
| 主机 | `47.98.203.17` |
| 端口 | `22` |
| 用户名 | `root` |
| 验证方法 | **公钥** |
| 私钥文件 | `C:\Users\{你的用户名}\.ssh\id_ed25519` |
> **注意**:当前服务器已授权的密钥为 `id_ed25519`(标识 `youle-deploy`),选错密钥会导致认证失败。
#### 第二步:常规标签页
| 字段 | 值 |
|------|----|
| 主机名/IP | `rm-bp1btyuwq77591x0jpo.mysql.rds.aliyuncs.com` |
| 端口 | `3306` |
| 用户名 | `games` |
| 密码 | `Games0791!!` |
| 数据库 | `agent_db`(可留空后再选) |
> ⚠️ **常见错误2013 错误)**:常规标签的主机名填了 `127.0.0.1` 或 `localhost`,会连接到服务器本机而非 RDS导致握手失败。必须填 RDS 完整域名。
#### 数据库与 RDS 实例对应关系
| 数据库 | RDS 主机 |
|--------|---------|
| `agent_db``agent_db_temp``game_field``youlehudong` | `rm-bp1btyuwq77591x0jpo.mysql.rds.aliyuncs.com` |
| `game_db``grade_db` | `rm-bp1749tfxu2rpq670lo.mysql.rds.aliyuncs.com` |
### 新设备接入
在新设备上执行以下步骤:
```powershell
# 1. 生成密钥对(如没有)
ssh-keygen -t ed25519 -C "设备标识备注"
# 2. 查看公钥内容
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"
```
将公钥内容追加到服务器:
```bash
ssh root@47.98.203.17 "echo 'ssh-ed25519 AAAA...你的公钥内容...' >> ~/.ssh/authorized_keys"
```
之后 Navicat SSH 标签填写该设备的私钥路径即可。
### 命令行手动隧道(可选)
如需在命令行工具(如 mysql CLI中使用可手动建立隧道
```bash
# 建立隧道(保持此终端运行,另开终端连接)
ssh -L 3307:rm-bp1btyuwq77591x0jpo.mysql.rds.aliyuncs.com:3306 root@47.98.203.17 -N
# 另开终端,连接本地转发端口
mysql -h 127.0.0.1 -P 3307 -u games -p agent_db
```