5.3 KiB
Windows Server 发布与启动
该包为 Windows x64 AIServer,提供登录、WebSocket、/game/state 和 /game/command,玩法配置已编译进 exe。使用静态 VC 运行库,不需要安装 .NET 或 Visual Studio。建议 Windows Server 2016 或更新版本。
1. 上传
将 ZIP 解压到服务器 C:\Services\AIGame。不要放到网站静态资源目录,也不要覆盖现有 Kestrel 服务文件。该目录应有 aiserver.exe、以下脚本与本文档。
本包不含任何开发账号数据库。首次启动创建 data\aiserver.db;后续更新保留该文件及其 -wal / -shm 配套文件,先停服再替换 exe。已有线上 ASP.NET/Kestrel 的账号、token 和存档不会自动迁入本服务。若已有正式玩家,需要先做数据迁移;不要将旧后端的数据库直接改名覆盖。本机已在小游戏中创建的游客账号可以在新服务中重新注册,但不会自动带入旧服存档。
2. 首次前台运行
打开 PowerShell:
cd C:\Services\AIGame
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Run-Server.ps1
另开窗口检查:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Services\AIGame\Test-Server.ps1
默认只监听 127.0.0.1:15888。/health 应返回 service=aiserver、gameProtocol=1;无登录令牌访问 /game/state 返回 401 是正常的,404 表示反代仍指向旧后端。
3. 开机后台启动
先关闭前台测试进程,再以管理员身份打开 PowerShell:
cd C:\Services\AIGame
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Install-StartupTask.ps1
Get-ScheduledTask -TaskName AIGame-AIServer
脚本注册计划任务,以 Local Service 运行,开机自动启动,退出后每分钟重试,日志写入 logs\;不是通过 sc.exe create 注册的原生 Windows Service。AIServer 只监听环回地址。公网 15888 由 Caddy 监听,需要在服务器防火墙和云安全组允许 TCP 15888。更换端口时使用 -Port 并同步反代。停止和卸载:
安装前会检查通配/环回地址的端口占用,启动后确认 /health 真正由 AIServer 返回,失败会报错;仅注册计划任务不能证明服务已运行。
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Stop-Server.ps1
# 如需同时移除开机任务:增加 -UninstallTask。数据库和日志保留。
4. 将游戏域名切到新后端
客户端登录/玩法 HTTP:https://BuddyDefense.xworld.ren:15888;WebSocket:wss://BuddyDefense.xworld.ren:15888/ws?pid=...&token=...。
先给 BuddyDefense.xworld.ren 配置指向服务器公网 IPv4 的 DNS A 记录,再准备由 Caddy 管理的该域名有效证书。默认 ACME 需要公网 80/443 的挑战入口,已有 Caddy 继续统一管理证书。微信后台也需更新 request/socket 合法域名配置。
本机 Caddy 与 AIServer 都使用 15888 时,必须分别绑定网卡 IP 和 127.0.0.1,不能让 Caddy 默认监听全部网卡。 在服务器运行以下脚本,会自动识别唯一默认网关的 IPv4 网卡并生成配置片段;多网卡时使用 -ListenIp 指定:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\New-CaddySite.ps1
# 多网卡示例:-ListenIp 10.0.0.5(替换成服务器实际网卡 IPv4)
将生成的 BuddyDefense.caddyfile 内容合入现有 Caddyfile。示意如下,SERVER_NIC_IPV4 必须替换为服务器实际网卡地址;云主机有 NAT 时使用网卡上的私网 IPv4,不要填写未分配给网卡的公网地址:
https://BuddyDefense.xworld.ren:15888 {
bind SERVER_NIC_IPV4
reverse_proxy 127.0.0.1:15888 {
transport http {
read_timeout 0
write_timeout 0
}
}
}
对实际使用的 Caddyfile 执行 caddy.exe validate --config <实际配置路径>,通过后执行 caddy.exe reload --config <实际配置路径>。不要用示例文件替换整个多站点配置;如果当前入口为 IIS/Nginx,在该入口将游戏域名的完整路径反代到同一个地址并启用 WebSocket。
/register、/login、/ws、/game/state、/game/command 必须指向同一个 AIServer。不能只转发 /game/*:旧 Kestrel 签发的 token 无法由新的 SQLite 服务验证。 /health 同样转发用于确认切换。
公网验证:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Test-Server.ps1 -BaseUrl https://BuddyDefense.xworld.ren:15888
# 可选完整联调,会新增一个 deploy_probe_* 测试账号:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Test-Server.ps1 -BaseUrl https://BuddyDefense.xworld.ren:15888 -ExerciseAccount
切换后,小游戏重新登录获取新服务的 token。旧服务和数据库暂时保留,便于必要时恢复原反代配置。不要将新服务对旧 token 返回的 401 与缺少路由的 404 混淆。