# Discourse 生产灰度准备清单

> 更新时间：2026-05-27 01:48 CST  
> 目标：在不影响 `/community/` 静态一言堂 MVP 的前提下，准备 `bbs.shuaishuaidnd.cn` 上的 Discourse 灰度试运行。

## 1. 当前现状

### 已具备

- 主站公网 IP：`110.42.248.227`。
- `shuaishuaidnd.cn` 与 `www.shuaishuaidnd.cn` 已解析到 `110.42.248.227`。
- DNS 托管商为 DNSPod：`julia.dnspod.net`、`ash.dnspod.net`。
- Nginx 已运行，当前主站根目录为 `/var/www/shuaishuaidnd/current`。
- `bbs.shuaishuaidnd.cn` 已拆成独立 Nginx server：80 跳 HTTPS，443 服务 Discourse 灰度占位页。
- Docker 已安装，可作为 Discourse 官方部署路线的基础；当前 `ubuntu` 用户无 docker.sock 权限，后续需 `sudo` 执行或明确加入 docker 组；Docker Hub 直连超时已通过配置多个 registry mirror 缓解，小镜像 `alpine:3.20` 已成功拉取运行。
- 磁盘空间约 52G 可用，内存约 3.6GiB、swap 约 1.9GiB；总体可做小规模灰度，但不适合一开始开放大量上传与高并发。
- `/community/` 静态一言堂 MVP 已能承接内容沉淀：本地发帖、互动、候选导入台、资料库落地。

### 尚未具备

- 当前未发现真实 Discourse 后端进程：无 Ruby/Rails/Puma/Sidekiq/Postgres/Redis 监听；3000/4000/9292/5432/6379 未见占用。
- SMTP 已使用 QQ 邮箱 `smtp.qq.com:587 STARTTLS` 完成 AUTH 登录测试，授权码仅保存在内部 secret 文件。
- 已确认 3 个初始管理员账号邮箱：`lyguner`、`zhuyb`、`saner`。注册策略为邀请制；上传限制为单文件 5MB 起步；备份策略为每日一次、保留 7 份、先本机保存。

## 2. 推荐灰度拓扑

### 推荐方案：子域灰度

- `https://shuaishuaidnd.cn/community/`：继续保留静态一言堂 MVP。
- `https://shuaishuaidnd.cn/forum/`：主站兼容入口，展示当前静态一言堂与 bbs 灰度状态。
- `https://bbs.shuaishuaidnd.cn/`：Discourse 灰度子域；当前先服务独立占位页，真实后端部署后再切到反代。

优点：

- 不破坏现有静态站。
- Discourse 可独立反代、独立备份、独立升级。
- 如果试运行失败，可直接暂停 bbs 子域，不影响主站。

## 3. 上线前必须确认

### 域名与证书

- [x] 在 DNSPod 增加记录：`bbs A 110.42.248.227`。
- [x] 确认公网解析：`dig +short bbs.shuaishuaidnd.cn A` 返回 `110.42.248.227`。
- [x] 申请/扩展 Let's Encrypt 证书，包含 `bbs.shuaishuaidnd.cn`。
- [x] Nginx 已拆出独立 `bbs.shuaishuaidnd.cn` server，目前服务占位页，后续可改为反代 Discourse。

### Discourse 基础配置

- [x] 确认站点名：`星界一言堂`。
- [x] 确认主域名：`bbs.shuaishuaidnd.cn`。
- [x] 确认管理员账号：`lyguner <935052840@qq.com>`、`zhuyb <3190237197@qq.com>`、`saner <1604569534@qq.com>`。
- [x] 准备 SMTP：QQ 邮箱 `smtp.qq.com:587 STARTTLS` 已通过登录测试，授权码不公开。
- [x] 确认注册策略：邀请制。
- [x] 确认上传附件大小与总量限制：灰度期单文件 5MB 起步，先观察总量。

### 运维与安全

- [x] 确认备份目录、备份频率、保留天数：先本机每日备份，保留 7 份。
- [x] 确认是否允许图片/附件本地保存，还是后续迁到对象存储：灰度期先本机保存，正式公开前补外部备份/对象存储评估。
- [x] 确认反垃圾策略：邀请制为主，暂不开放公开注册。
- [x] 确认管理员/版主账号与权限：三位初始管理员，版主细分后续在 Discourse 后台配置。
- [ ] 确认升级窗口与回滚方式。

### 与现有站点的边界

- [x] `/community/` 不直接下线，作为静态预览和内容沉淀原型保留。
- [x] `/forum/` 在真实 Discourse 可用前不直接跳 `bbs`，避免用户进入未配置服务。
- [x] 真实 Discourse 的账号短期可以独立；与 `/auth/` 的 SSO 后续单独设计。
- [x] 论坛好帖进入资料库的流程，先人工从 Discourse 复制/整理到 `/admin/content/import/` 或 CMS，再考虑 API 自动化。

## 4. 推荐执行顺序

1. **DNS 准备**：为 `bbs` 增加 A 记录。（已完成）
2. **证书准备**：确认 `bbs` HTTPS 可用。（已完成）
3. **Nginx/端口协调**：已先用独立 `bbs` server 服务占位页；真实后端部署后建议继续由 Nginx 反代到 Discourse 内部端口。
4. **独立部署**：使用官方 Discourse Docker 流程安装到独立目录，避免污染 `/var/www/shuaishuaidnd/current`。
5. **管理员初始化**：创建管理员账号、关闭或限制开放注册。
6. **最小分区映射**：建立四大分区：团务规则、灌水吐槽、FVTT分享、规则 模组资源区。
7. **灰度导流**：先在 `/forum/` 或 `/community/` 放一个“进入 bbs 试运行”的入口，而不是直接替换。
8. **沉淀链路复核**：选 1 篇 FVTT 帖走“话题 → 候选 → 资料库”的人工流程。

## 4.1 部署模板与本次预检

- 内部部署边界说明已生成：`/var/www/shuaishuaidnd/ops/discourse/README.md`。
- `app.yml` 待填模板已生成：`/var/www/shuaishuaidnd/ops/discourse/app.yml.template`。
- 已生成配置预览：`/var/www/shuaishuaidnd/ops/discourse/app.yml.filled-preview`，不含明文授权码。
- SMTP 授权码仅保存在内部权限 600 secret 文件；注册策略、上传限制与备份策略已确认。
- 推荐部署形态已确认：当前服务器小规模灰度，Nginx 继续占用 80/443，Discourse 只监听本机端口，`bbs.shuaishuaidnd.cn` 再从占位页切到反代。
- 当前仍未启动真实 Discourse 服务；下一步可进入官方安装配置与本机端口灰度。

## 4.2 官方安装目录准备

- 官方 `discourse_docker` 已通过 ghproxy 下载并展开到 `/var/discourse`。
- 已生成真实 launcher 配置 `/var/discourse/containers/app.yml`，权限 `600`，包含 SMTP 授权码，不公开。
- 已生成脱敏预览 `/var/www/shuaishuaidnd/ops/discourse/app.yml.launcher-preview`。
- 配置已通过 YAML 解析验证，端口仅暴露 `127.0.0.1:3000:80`，适配后续 Nginx 反代。
- 尚未执行 `launcher bootstrap/rebuild/start`，因此 `bbs` 仍安全停留在占位页。
- 镜像源状态：已配置 `docker.m.daocloud.io`、`docker.1panel.live`、`dockerproxy.net`、`hub.rat.dev`、`ccr.ccs.tencentyun.com`；`alpine:3.20` 已成功 pull/run。
- 风险提示：Discourse bootstrap 仍会拉取更大的官方镜像与依赖，可能需要较长时间或继续调整镜像源。

## 5. 当前建议

关键灰度决策已确认。下一步可以进入真实 Discourse 安装准备，但仍建议先仅监听本机端口，验证通过后再切换 `bbs` 反代：

1. 使用当前服务器 Docker 官方部署路线，小规模灰度。
2. 执行 `launcher bootstrap app` 前再次确认 app.yml 权限与 SMTP 配置。
3. 先 bootstrap，不切换 Nginx；本机 `127.0.0.1:3000` 验证通过后，再把 `bbs` 从占位页切到真实 Discourse。
4. 如果 Discourse 大镜像/依赖仍拉取失败，再补充镜像源或改用离线导入。
