Skip to content

Commit b5ec355

Browse files
committed
docs: record production deployment audit
1 parent 00cb193 commit b5ec355

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

docs/DEPLOYMENT_AUDIT.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# docs.openim.io 部署审计
2+
3+
核查与修复日期:2026-08-04
4+
5+
## 结论
6+
7+
`docs.openim.io`**Netlify** 托管。生产站点现已从旧 Docusaurus 文档切换为 `openimsdk/docs` 当前 `main` 分支中的 Next.js/Fumadocs 文档。
8+
9+
仓库迁移后,Netlify 仍监听 `main`,但旧项目配置无法构建新站点。第一轮仓库配置修复使构建恢复成功,随后域名验收发现 Next.js Runtime 未运行,所有路由仍返回 `404`。补充显式 Runtime 配置后,Netlify 成功部署服务端函数、重定向和响应头规则,生产域名的关键路径均已通过验证。
10+
11+
## 当前生产链路
12+
13+
1. `docs.openim.io` 的 CNAME 指向 `apex-loadbalancer.netlify.com`[DNS 查询结果](https://dns.google/resolve?name=docs.openim.io&type=CNAME)
14+
2. 线上响应包含 `server: Netlify``cache-status``x-nf-request-id`,实际流量由 Netlify Edge 提供。[生产站点](https://docs.openim.io/)
15+
3. Netlify 站点名称为 `openimdocs`,Site ID 为 `4f231446-b290-4e4a-95c7-193e0ec555b9`[Netlify 站点记录](https://api.netlify.com/api/v1/sites/docs.openim.io)
16+
4. 首个通过完整验收的修复 deploy 为 `6a71a995a90caa00096c4be0`,对应提交 `00cb193d0f55ca9a40002010f5876b48dabc1266`,发布时间为 2026-08-04 08:58:46 UTC。[修复验证 deploy](https://api.netlify.com/api/v1/deploys/6a71a995a90caa00096c4be0)
17+
5. 部署摘要确认已处理 3 条重定向、1 条响应头规则,并部署 1 个 Next.js 服务端函数。
18+
19+
当前发布链路为:
20+
21+
```text
22+
openimsdk/docs main
23+
↓ Netlify Git 集成自动构建
24+
Netlify Next.js Runtime
25+
↓ Published deploy
26+
docs.openim.io
27+
```
28+
29+
## 故障经过与根因
30+
31+
仓库切换为新版文档后,以下 Production 部署均为 `error`
32+
33+
| 提交 | 时间(UTC) | Netlify 状态 |
34+
| ---------- | ---------------- | ------------ |
35+
| `a49496f5` | 2026-08-04 08:21 | `error` |
36+
| `a3646471` | 2026-08-04 08:23 | `error` |
37+
| `4df14827` | 2026-08-04 08:29 | `error` |
38+
39+
匿名 API 不公开失败构建日志,但仓库和公开部署状态足以定位两层问题:
40+
41+
1. 旧站曾使用 `build-ignore-errors.sh` 构建并发布 Docusaurus 的 `build` 目录。新版仓库没有 `netlify.toml` 覆盖项目后台遗留设置,同时保留了与 `pnpm-lock.yaml` 不一致的旧 `package-lock.json`。提交 `05c4281b71` 固定 `pnpm build``.next` 发布目录和 Node.js 版本,并移除旧 npm 锁文件后,Netlify 构建从 `error` 恢复为 `ready`
42+
2. 该次部署摘要同时显示 `No functions deployed`。Netlify 只是上传了原始 `.next` 文件,没有运行 Next.js 适配器,因此域名上的所有应用路由仍返回 `404`。提交 `00cb193d0f` 显式启用 `@netlify/plugin-nextjs` 后,部署生成服务端函数和路由规则,页面恢复正常。
43+
44+
Netlify 的文件配置会覆盖冲突的项目后台设置,因此上述修复可以在没有账号权限的情况下由仓库接管。[文件配置说明](https://docs.netlify.com/build/configure-builds/file-based-configuration/) Next.js Runtime 负责把 App Router、服务端渲染和相关平台能力转换为 Netlify 可运行的产物。[Next.js on Netlify](https://docs.netlify.com/build/frameworks/framework-setup-guides/nextjs/overview/)
45+
46+
## 仓库中的部署约束
47+
48+
- [`netlify.toml`](../netlify.toml) 固定生产构建命令、发布目录、Node.js 版本和 Next.js Runtime。
49+
- [`next.config.mjs`](../next.config.mjs) 只在 Docker 或普通 Node.js 自托管环境生成 standalone 产物;Netlify 和 Vercel 使用各自的托管 Runtime。
50+
- 仓库只保留 `pnpm-lock.yaml`,并通过 `packageManager` 固定 pnpm 版本,避免不同包管理器解析出不同依赖树。
51+
- [`scripts/__tests__/netlify-deployment.test.mjs`](../scripts/__tests__/netlify-deployment.test.mjs) 防止 Netlify 构建配置、Runtime 和包管理器约束被意外移除。
52+
53+
## GitHub 当前承担的职责
54+
55+
[`CI` 工作流](https://github.com/openimsdk/docs/blob/main/.github/workflows/ci.yml)`main` 推送和 Pull Request 时执行安装、依赖审计、内容检查与生产构建。工作流本身不上传站点;生产发布由 Netlify 的 Git 集成在 `main` 更新后自动触发。
56+
57+
GitHub Pages 不是当前线上来源:
58+
59+
- GitHub Pages API 对该仓库返回 `404`,没有启用中的 Pages site。[GitHub Pages API](https://api.github.com/repos/openimsdk/docs/pages)
60+
- 仓库仍保留 `gh-pages` 分支,但生产域名 DNS 指向 Netlify。
61+
- `bak` 分支中的历史工作流曾把 Docusaurus 的 `build` 目录推送到 `gh-pages`,该流程不再用于当前站点。[历史工作流](https://github.com/openimsdk/docs/blob/bak/.github/workflows/build-ci.yaml)
62+
63+
## 其他保留的部署方式
64+
65+
### Vercel
66+
67+
仓库包含 [`vercel.json`](../vercel.json),并兼容 Vercel 的 Next.js Runtime,但 `docs.openim.io` 当前未使用 Vercel。GitHub Deployments 中最后一批 Vercel Production 记录停留在 2024-04-25,属于旧仓库历史。[历史 Vercel deployment](https://api.github.com/repos/openimsdk/docs/deployments/1474301770)
68+
69+
### Standalone Node.js / Docker
70+
71+
[`next.config.mjs`](../next.config.mjs) 为非托管平台生成 standalone 输出,[`Dockerfile`](../Dockerfile) 可以运行该产物。该方式继续作为自托管能力保留,但不是生产域名当前的流量来源。
72+
73+
### AWS Amplify
74+
75+
`bak` 分支保留 `amplify.yml`,当前 `main` 已无此配置,DNS 也未指向 Amplify。它属于历史方案。
76+
77+
## 生产验收结果
78+
79+
修复后已直接对 `https://docs.openim.io` 完成以下检查:
80+
81+
| 检查项 | 结果 |
82+
| ----------------------------- | -------------------------------------- |
83+
| `/``/zh` | `200`,中英文首页正常 |
84+
| WASM SDK 中英文概览 | `200` |
85+
| Platform API 中英文概览 | `200` |
86+
| `/api/search` | `200`,返回按语言筛选的搜索结果 |
87+
| `/robots.txt``/sitemap.xml` | `200`,内容类型正确 |
88+
| 不存在的地址 | `404` |
89+
| WASM 旧地址 | `308` 到对应的新地址,中英文路径均正常 |
90+
91+
后续每次调整构建配置时,至少应运行 `pnpm check`、Netlify 本地构建,并在 Production deploy 进入 `ready` 后复查上述关键路径。Netlify 仍保留历史 deploy,可用于必要时回滚。

0 commit comments

Comments
 (0)