WRITING
介绍一下这个网站

先自报家门:这是一个人运营的站群。 一台 VPS,一个域名 tianli.cyou,上面跑着主站、知识库、水利工具箱,和一堆只有我自己用的东西。2026 年 7 月,它刚经历了两件事:一次叫「纸上手册」的改版,和一次相当彻底的大扫除。趁着灰尘落定,写一篇导览——现在有什么、改了什么、删了什么,以及"只给我自己看的入口"是怎么设计的。
现在有什么
对外公开的,三块:
| 入口 | 是什么 |
|---|---|
| tianli.cyou | 主站:近 30 篇博文(水利 / AI 工程 / 投资三条线)、项目、研究成果、简历 |
| tianli.cyou/kb | 知识库:复盘、playbook、知识卡片的聚合站 |
| hydro.tianli.cyou | 水利工具箱:纳污能力、水能出力、生态流量、灌溉定额,在线直接算 |
不公开的,也是三块:定时任务面板、VPS 运维控制台、一个自用的借贷计算器。它们怎么藏、怎么进,后面单独说。

改版:纸上手册
主站这次改版的设计语言叫「纸上手册」:亮色纸面底、正文优先、克制的导航,整个站读起来像一本装订好的技术手册,而不是一个闪着渐变光的 landing page。中英双语,每篇内容都有镜像。
改版里最重要的一刀不是加东西,是砍导航:顶栏原来挂着一个「应用」下拉大菜单,分类罗列十几个子站——那是旧站群时代的架构遗物,里面一半的域名连 DNS 都已经不存在了。现在整个顶栏只剩两样:名字,和语言切换。
另一刀砍在首页统计上:原来写着「6+ 生产子站」,其中一半已经死了。现在写 3,就是真的 3。
大扫除:活的留,死的删
改版顺带做了一次全面验尸。原则只有一条:每一条删除都要有实测证据——域名用 DoH 查权威应答,服务用 curl 打,进程看 systemd journal 和 docker ps,证明死透了才动手;动手前全部落备份,回滚是一条命令。
挖出来的东西比预想的多:
- 3 个整站:运维面板、文档工具站、思维导图站,代码、路由、访问策略全链路清除
- 5 个僵尸运行时:一个监控容器裸跑了 12 天,但它的域名早已删除,谁都访问不到;一个服务上次清理时宣布退役却漏了停;一个消息推送器三个多月 journal 零输出
- 6 个 Cloudflare Access 应用:守着的入口全部已经不存在
- 若干指向死目标的定时任务和配置实体

僵尸服务最讽刺的地方在于:它们不报错。CPU 不高,日志不红,监控全绿——只是没有任何人需要它们。基础设施的债,不是坏掉的东西,是没人记得为什么还开着的东西。
私人入口:一个书签的设计
站群里有不少东西只给我自己看:运维控制台、定时任务面板、几个自用工具。它们的设计遵循三条规矩:
- 公私分层:公开内容零门槛;私人工具一律套 Cloudflare Access,邮箱验证码进,Zero Trust。
- 永不暴露 IP:port:所有服务走子域名 + HTTPS + CF 代理,源站端口对公网不可见。
- 单一书签:私人入口只需要记一个——控制台。进去之后,顶部一排「站点直达」链接到其余所有站点。

这个设计的好处是对称的:对外,攻击面收敛到 Cloudflare 边缘一层;对内,认知负担收敛到一个书签。改版前我自己都记不全有哪些私人入口——这本身就是该删东西的信号。
(还有少数更私的链路,比如订阅类,走独立路径,这里不展开。)
一个人怎么维护一个站群
最后说方法。一个人管一群站,靠的不是勤快,是让漂移在结构上不可能:
- 菜单即数据库:所有子域、分组、导航关系定义在一组 YAML 实体里,导航栏、服务列表、nginx 配置全部从它生成。改一处,处处同步;15 类漂移审计挂在 pre-commit 上,配置对不上连 commit 都过不去。
- 部署即校验:部署脚本不只是同步文件——构建产物指纹和线上比对、CDN 缓存主动清除、上线前预检 404。「部署成功」是校验出来的,不是感觉出来的。
- 删除即备份:所有清理先落备份再动手,删错了一条命令回来。敢删,才删得动。
这个站会继续长,但方向定了:内容多长,基建少长。欢迎逛。