第 47 章 / 共 51 章
卷五 · 扩展、运维与实战
实战三:多 vhost 站群(复刻 home)
一个进程运营一片站点——最后一个实战把"部署形态"本身作为项目:按生产标准搭一个五站混布站群。
本章导读
站位:运维向毕业项目。ch20 讲了组织法,本章按生产标准走一遍全流程——蓝本是 home 仓库(14 vhost 的真实生产,我们做 5 站教学版)。
47.1 项目目标
| 站点 | 类型 | 练什么 |
|---|---|---|
| default(兜底) | 静态导航页 | 最低风险兜底纪律(ch20) |
| www 主站 | 动态(脚本+模板+db) | 实战一的成果挂载 |
| api 子域 | 动态(REST) | 域名分流 + 限额独立 |
| docs 文档站 | 纯静态(devlang=static) | 零脚本站点形态 |
| admin 管理站 | 动态(内网绑定) | 管理面隔离(ch27/39) |
47.2 搭站群
- 布局:ch20/37 的 host 目录自包含约定——五目录 + 单 xs.json + 单 exe
- 配置:单 server 双端点(80/443)全收;五 host 的域名、证书、Custom 旋钮(api 站收紧 body_limit;docs 站配 static 四旋钮)
- 共享模块:www 与 api 复用 modules/(拷贝式,ch20)——注意两站的 Custom 键名互不干扰
- 管理站内网化:admin 站域名不进公网 DNS + 防火墙限制源 IP + 令牌(三层叠防)
验收点 1:五站各自命中(Host 头/SNI 测试);未命中域名落 default 导航页;docs 站零脚本进程内痕迹(无 script loaded 行)。
47.3 单站热更新
站群的热重载纪律是"最小爆炸半径":
- 日常:只对目标 host 提交(admin 站的 /admin/reload → xsReloadHostSubmit)
- 验证:其余四站持续压测,零错误零感知(未变更站完全不参与——ch20 的配置级分流)
- 连带更新:共享 modules/ 改动波及多站时按序逐站 reload(不是 all)——滚动而非齐步
- 演练:证书续期(docs 站换证书零断连)、坏脚本回滚(api 站提交坏脚本 → FAILED → 旧版无损)
验收点 2:四站压测下单站 reload 三轮零失败;证书热替换 openssl 对比验证。
47.4 统一巡检与证书
- 巡检路由:admin 站实现 /status——枚举全部 server/host 输出 RunState、代数、请求计数(ch11 查询 API + ch43 模式)
- 证书台账:/status 附各 host 证书的到期日(x509 解析)——续期提醒进运营日历
- 日志聚合:五站日志统一前缀 [站点名],journald 侧按站过滤
47.5 验收清单
| 维度 | 标准 |
|---|---|
| 路由 | 五站精确命中 + default 兜底 + 三来源一致 |
| 隔离 | 单站 reload 零外溢;Custom 互不干扰 |
| 安全 | 管理站三层叠防;44.4 清单全过 |
| 运维 | 巡检路由 / 证书台账 / 分站日志可用 |
| 部署 | systemd + 停机窗口 + 蓝绿脚本(ch42 挑战的产出) |
常见错误
all 一把梭
- 症状
- 改一个站的文案提交 xsReloadAllSubmit,五站全部换代。
- 原因
- all 是"全局配置变更"的整批事务(ch26),不是偷懒的默认项。多站换代 = 多倍编译 + 多份 GC,放大每项风险。
共享模块忘了同步多站
- 症状
- 修复了 www 站的 ReplyJSON bug,api 站还在旧版。
- 原因
- 拷贝式复用的代价(ch20)——共享模块变更要有"波及清单"(哪些站拷了它),按清单逐站滚动。
编程练习
基础五站上线
按 47.2 完成站群搭建与验收点 1。
验收:验收点 1 全过。
进阶运营闭环
完成 47.3/47.4:单站热更 + 巡检路由 + 证书台账。
验收:验收点 2 全过;/status 能预警 30 天内到期的证书。
挑战扩到十四站
参照 home 的真实清单把站群扩到 14 个 vhost(含多个纯静态站),验证配置与运营流程的规模化。
验收:启动 < 3s;巡检路由覆盖全部站点;运营文档更新。
小结
| 要点 | 结论 |
|---|---|
| 形态 | 单进程五站混布:动静分离、管理内网化 |
| 热更纪律 | 最小爆炸半径:逐站提交,共享变更滚动 |
| 运营 | 巡检路由 + 证书台账 + 分站日志 |
| 规模验证 | 教学五站 → 生产 14 站(home 实证) |
本章涉及的 API 参考
xrt 延伸阅读
- xrt · x509 — 证书到期日解析(台账功能)