Web 服务器部署模型在业余规模下崩了:一次部署的艰辛复盘
来源:w.on-t.work — 2026-08-06
📋 概述
作者复盘了一个想让别人在自己服务器上托管的 web 应用,在业余/自托管规模下遇到的连锁困境:静态文件交给反代却要打洞、缓存中间件覆盖不了真实需求、认证缓存不得不回退、SSR 前端与后端拆分复杂、一个日文用户的全文搜索又把 Postgres 扩展依赖摆上台面。最后这一切标准化成一个把所有东西塞进去的 Dockerfile。
🔑 核心要点
- 想让别人自托管,就意味着立刻失去大量面向私有部署的效率技巧——这说明本来很优雅的内部方案,一旦要交给陌生人安装就全都不再适用
- 容器化后反代访问静态文件需要在各个隔离层打洞,最终又加回让应用自己供文件——这意味着层层抽象的收益被击穿,最直接的方案反而最省事
- 缓存中间件只认 cache-control,无法按查询参数裁剪缓存,专业规模才可能用 Varnish 精确控制——这说明通用缓存工具的粒度赶不上真实需求,精细化只能靠昂贵的基础设施
- 为了支持外部认证缓存,要么写各中间件插件、要么自己写反代,最终只能放弃外部缓存并移动认证中间件——这表明与其在四处打补丁,不如重新划清边界、简化架构
- Postgres 自带全文搜索在非拉丁文字上失效,引入 pgroonga 扩展又要求所有管理员动共享的 Postgres 实例——这意味着为了一个日文搜索,却要说服每个部署者动核心数据库,代价远超收益
- 结局是把反代、缓存、Postgres 与前后端全打包进一个 Dockerfile,宣布只支持 Docker 部署——这说明当各种权衡都走不通时,用单一交付物把复杂度封装起来反而是最务实的选择
💡 金句
是否真的需要这么多层? 用户的请求穿过两层反代与一层缓存,只为抓一条两年前就没更新的旧页面。
👍 0
👎 0
← 返回 Lobsters 首页