# Deployment guide

当前状态：已于 2026-08-30 部署到独立 Vercel 项目 `sherluokes-projects/ngon-game-runtime`，稳定别名为 `https://ngon-game-runtime.vercel.app/`。`game.ngonunblocked.com` 尚未绑定，后续可作为不改变运行内容的域名优化。

## 推荐拓扑

- 主站继续使用 `https://ngonunblocked.com/`。
- 本静态运行时当前使用独立 origin `https://ngon-game-runtime.vercel.app/`；未来可换成 `https://game.ngonunblocked.com/`。
- 主站只把 iframe 的 `src` 指向游戏子域；不要把游戏脚本合并进 Next.js bundle，也不要用本目录覆盖主站根页面。

独立子域可以把游戏代码、游戏 localStorage 和主站页面隔离开。切换后，原来保存在 `landgreen.github.io` origin 下的本地设置不能自动迁移，这是预期行为。

## Vercel 项目设置

1. 新建独立 Vercel 项目，Root Directory 指向 `ngon-game-runtime`。
2. Framework Preset 选 `Other`。
3. Build Command 和 Install Command 留空；Output Directory 使用 `.`。
4. 绑定 `game.ngonunblocked.com`，不要绑定主站 apex。
5. `vercel.json` 会对所有路径设置：
   - `X-Robots-Tag: noindex`
   - CSP `frame-ancestors https://ngonunblocked.com`
   - 脚本只能来自当前 origin；外部连接只放行 Wikipedia API 和 GitHub API。

Vercel 官方说明：纯 HTML/CSS/客户端 JS 不需要 build；Framework Preset 使用 Other，build 留空即可。配置参考：<https://vercel.com/docs/builds> 和 <https://vercel.com/docs/project-configuration/vercel-json>。

## 部署前检查

```powershell
node .\scripts\verify-runtime.mjs
powershell -ExecutionPolicy Bypass -File .\scripts\build-source-archive.ps1
node .\scripts\verify-runtime.mjs
```

确认 `source/n-gon-runtime-source-3452c30d.zip` 和对应 `.sha256` 已更新。

## 部署后只读复核

下面命令用于每次生产部署后的复核：

```powershell
curl.exe -I https://ngon-game-runtime.vercel.app/
curl.exe -I https://ngon-game-runtime.vercel.app/source.html
curl.exe -I https://ngon-game-runtime.vercel.app/source/n-gon-runtime-source-3452c30d.zip
```

必须确认：

- 三个 URL 都是 200。
- `X-Robots-Tag` 为 `noindex`。
- CSP 含 `frame-ancestors https://ngonunblocked.com`。
- CSP 不允许 raw GitHub 或 unpkg 作为脚本来源。
- `source.html` 能打开 LICENSE、UPSTREAM、CHANGES、第三方说明和源码包。
- 直接打开游戏能开始一局，键鼠、暂停、全屏和 Wikipedia 查询正常。
- 从 `https://ngonunblocked.com` iframe 能加载；其他 origin 的 iframe 被拒绝属于正确结果。

## 主站后续改动边界

本目录验证通过不代表已授权修改主站。以后切换时，主站只应：

1. 修改 iframe `src`。
2. 把“developer-hosted official build / third-party hosted”类事实描述改成“本站托管的固定上游 GPL 快照”。
3. 保持主站 URL、canonical、Title、H1 和 sitemap 不变。

## 回滚

如自托管版本出现故障，先关闭主站游戏入口或恢复到上一个已验证的自托管快照。不要在未取得书面许可时，把带广告的主站自动回滚到作者托管 iframe。
