7.1 KiB
XWorld 外网服务器部署检查清单
域名:
game.xworld.ren -> Gateway/API/WSS
www.xworld.ren -> CDN 静态资源
公网只开放 80、443 给 Caddy。5005、15081 只监听 127.0.0.1,不要对公网开放。
1. DNS 与安全组
在域名 DNS 控制台添加 A 记录:
game.xworld.ren A <新服务器公网 IP>
www.xworld.ren A <新服务器公网 IP>
云服务器安全组放行:
TCP 80 入站
TCP 443 入站
不要放行:
TCP 5005
TCP 15081
Windows 防火墙放行:
New-NetFirewallRule -DisplayName "Caddy HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "Caddy HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
检查 DNS:
nslookup game.xworld.ren
nslookup www.xworld.ren
2. 准备服务器目录
管理员 PowerShell:
New-Item -ItemType Directory -Force -Path C:\xworld\app
New-Item -ItemType Directory -Force -Path C:\xworld\games
New-Item -ItemType Directory -Force -Path C:\xworld\cdn
New-Item -ItemType Directory -Force -Path C:\xworld\logs
New-Item -ItemType Directory -Force -Path C:\caddy
New-Item -ItemType Directory -Force -Path C:\nssm
目录约定:
C:\xworld\app\gateway\ Gateway self-contained 发布产物
C:\xworld\app\cdn\ CDN Runner self-contained 发布产物
C:\xworld\games\ 服务端小游戏模块,games\<id>\<ver>\*.dll
C:\xworld\cdn\ CDN 内容,XWorld\<platform>\... 和 minigame\<id>\<ver>\<platform>\...
C:\xworld\logs\ NSSM stdout/stderr 日志
C:\xworld\accounts.db 账号数据库,首次启动自动创建
C:\xworld\auth.key token 密钥,首次启动自动创建,务必备份
3. 安装工具
下载 Caddy Windows amd64:
https://caddyserver.com/download
放到:
C:\caddy\caddy.exe
下载 NSSM:
https://nssm.cc/download
放到:
C:\nssm\nssm.exe
检查:
C:\caddy\caddy.exe version
C:\nssm\nssm.exe version
4. 发布并上传服务程序
在有 .NET 10 SDK 的开发机或构建机上执行:
cd C:\XWorld\AIC#Project
powershell -ExecutionPolicy Bypass -File .\deploy\windows\publish.ps1
产物:
deploy\windows\out\xworld-server.zip
把 xworld-server.zip 上传到新服务器,并解压到 C:\xworld\app:
Expand-Archive C:\xworld\xworld-server.zip -DestinationPath C:\xworld\app -Force
解压后应存在:
C:\xworld\app\gateway\XWorld.Server.Gateway.Runner.exe
C:\xworld\app\cdn\XWorld.Server.Cdn.Runner.exe
不要运行 Server\...\bin\Release\net10.0\*.exe,那是 framework-dependent 构建,会要求服务器安装 .NET Runtime。
5. 上传业务数据
上传服务端小游戏模块到:
C:\xworld\games\<id>\<ver>\*.dll
C:\xworld\games\<id>\<ver>\game.json
上传 CDN 内容到:
C:\xworld\cdn\XWorld\android\updatever.txt
C:\xworld\cdn\XWorld\pc\updatever.txt
C:\xworld\cdn\minigame\<id>\<ver>\<platform>\...
至少先确认一个资源文件存在:
Test-Path C:\xworld\cdn\XWorld\android\updatever.txt
6. 配置 Caddyfile
复制仓库里的配置:
Copy-Item C:\XWorld\AIC#Project\deploy\windows\Caddyfile C:\xworld\Caddyfile -Force
确认核心内容是 xworld.ren:
game.xworld.ren {
encode zstd gzip
reverse_proxy 127.0.0.1:5005
}
www.xworld.ren {
encode zstd gzip
handle_path /game/60S/* {
reverse_proxy 127.0.0.1:15081
}
respond 404
}
7. 先前台启动内层服务
开一个 PowerShell 跑 Gateway:
C:\xworld\app\gateway\XWorld.Server.Gateway.Runner.exe `
--gamesRoot C:\xworld\games `
--port 5005 `
--authDbPath C:\xworld\accounts.db
再开一个 PowerShell 跑 CDN:
C:\xworld\app\cdn\XWorld.Server.Cdn.Runner.exe `
--root C:\xworld\cdn `
--port 15081
检查端口:
Get-NetTCPConnection -LocalPort 5005 -State Listen
Get-NetTCPConnection -LocalPort 15081 -State Listen
检查本机 CDN:
Invoke-WebRequest http://127.0.0.1:15081/XWorld/android/updatever.txt -UseBasicParsing
8. 前台启动 Caddy 验证证书
另开管理员 PowerShell:
C:\caddy\caddy.exe run --config C:\xworld\Caddyfile
正常日志应出现:
serving initial configuration
enabling automatic TLS certificate management
certificate obtained successfully
如果 443 被占用:
Get-NetTCPConnection -LocalPort 443 -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess
如果返回 OwningProcess = 4,通常是 HTTP.sys/IIS 类服务占用,先排查 IIS/WAS/WMSVC。
9. 外网验证
旧版 Windows PowerShell 先启用 TLS 1.2:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
验证 CDN:
Invoke-WebRequest https://www.xworld.ren/game/60S/XWorld/android/updatever.txt -UseBasicParsing
应返回 200。
验证 Gateway:
Invoke-WebRequest https://game.xworld.ren -UseBasicParsing
game.xworld.ren 根路径可能返回 404,这是正常的。不要返回 502。502 说明 Caddy 连不上 127.0.0.1:5005。
验证端口:
Test-NetConnection game.xworld.ren -Port 443
Test-NetConnection www.xworld.ren -Port 443
10. 注册 Windows 服务
内层服务:
powershell -ExecutionPolicy Bypass -File C:\XWorld\AIC#Project\deploy\windows\install-services.ps1 `
-NssmPath C:\nssm\nssm.exe `
-OutRoot C:\xworld\app `
-GamesRoot C:\xworld\games `
-CdnRoot C:\xworld\cdn `
-AuthDbPath C:\xworld\accounts.db `
-LogDir C:\xworld\logs
Caddy 服务:
C:\nssm\nssm.exe install XWorldCaddy C:\caddy\caddy.exe
C:\nssm\nssm.exe set XWorldCaddy AppParameters "run --config C:\xworld\Caddyfile"
C:\nssm\nssm.exe set XWorldCaddy AppDirectory C:\xworld
C:\nssm\nssm.exe set XWorldCaddy Start SERVICE_AUTO_START
C:\nssm\nssm.exe set XWorldCaddy AppStdout C:\xworld\logs\caddy.out.log
C:\nssm\nssm.exe set XWorldCaddy AppStderr C:\xworld\logs\caddy.err.log
C:\nssm\nssm.exe start XWorldCaddy
查看服务:
Get-Service XWorldGateway,XWorldCdn,XWorldCaddy
11. 最终检查
Get-NetTCPConnection -LocalPort 80 -State Listen
Get-NetTCPConnection -LocalPort 443 -State Listen
Get-NetTCPConnection -LocalPort 5005 -State Listen
Get-NetTCPConnection -LocalPort 15081 -State Listen
预期:
80/443 Caddy 监听
5005 Gateway 监听 127.0.0.1
15081 CDN 监听 127.0.0.1
确认客户端生产常量:
ProductionResBase = https://www.xworld.ren/game/60S/
ProductionGatewayUrl = wss://game.xworld.ren/ws
ProductionAuthBase = https://game.xworld.ren
改完域名后需要重新出客户端包。
12. 关键备份
必须备份:
C:\xworld\accounts.db
C:\xworld\auth.key
C:\xworld\games\
C:\xworld\cdn\
C:\xworld\Caddyfile
auth.key 丢失后,所有已签发 token 都会失效,用户需要重新登录。