1.1 传统服务器 vs 托管平台:运维减法

这本书的项目主角是一个前端开发者,技术栈是 Node(TypeScript),写的是一个 Vue 静态创业页。在决定用托管平台之前,我在一台 2 核 4G 的云服务器上跑了八个月同一个站。这八个月我没写一行业务代码,全在修服务器。本节就是这份“运维账单”的复盘:托管平台到底帮你减掉了哪些活,哪些活它减不掉、你必须自己兜。如果你正犹豫要不要把静态站迁到 网站托管 CloudPages 这类平台,这篇复盘应该比任何宣传页有参考价值——它完整记录了我把时间花在了哪些根本不需要花的地方。

先说清楚一个前提:静态站没有服务端进程。它说到底就是一堆 html、js、css、图片文件,需要的是一块“能被公网访问的存档空间”加一条 HTTPS 入口。传统服务器为了提供这个能力,附赠了整台操作系统的运维;托管平台则只收文件、只返回文件。这个差异决定了后面所有的对比。理解这个前提之后,1.2 节的选型对比表看起来就不是两个“等价方案”的竞争,而是两个不同抽象层的选择。

1.1.1 场景:一台服务器能占掉多少时间

八个月里我处理过的真实事件,按时间排:

日期 事件 我的处理 耗时
3 月 ssh 进不去,密钥过期 重新生成密钥、改 sshd 端口 2 小时
4 月 磁盘日志写满,nginx 502 写 logrotate、清旧日志 3 小时
5 月 Let’s Encrypt 证书续期失败 手动 certbot、排查 DNS 半天
6 月 被扫描器盯上,负载飙满 装 fail2ban、封 IP 段 一整天
7 月 npm run build 内存溢出 加 swap、限制并发 2 小时
8 月 万一机器挂了怎么办 想做备份,发现没方案 焦虑一整周

要注意上表里“耗时”一栏的真实含义:我不只是花了这些时间,而是这些时间全部被打散在工作日的高峰期。扫描器凌晨三点来,我就得凌晨三点起来看;证书续期失败记得是周末发现站打不开的。服务器出问题不挑时间,而静态站的流量低谷恰恰是凌晨——故障伤害度被放大了一倍。

最讽刺的是:站本身从没出过 bug。页面好好的,坏的都是承载它的那台机器。我老婆问我最近在忙什么,我说在给服务器打补丁,她说“你的网站不是只有一页吗”。

这句话把我问醒了。一个访问量并不大的静态页面,凭什么需要一个会呼吸、会生病、需要人定期照看的操作系统?我算了一笔时间账:八个月里真正用于“让网站变得更好”的时间不到总投入的三成,其余全花在维护载体上。对一个两人小团队,这个比例是致命的——我们的核心资产应该是页面内容和产品迭代,而不是对一台机器的熟稳度。

1.1.2 运维减法清单:这些活平台替你做了

托管平台(比如腾讯云网站托管 CloudPages)的本质是把这些“机器层面的琐事”打包成平台能力。逐项对照:

运维事项 传统服务器(自管) 托管平台 减掉的是
操作系统 补丁、内核升级都要管 无操作系统概念 整个系统层
Web 服务器 nginx 配置、调优、防误改 平台内置 进程与配置
HTTPS 证书 申请、续期、故障排查 一键开启自动续期 证书全生命周期
防攻击 自己装 fail2ban、看日志 平台统一防护 安全运营人力
备份 自己写脚本、验证可恢复 存储多副本、版本化 备份方案设计
扩容 大流量来了自己升配 天然按量、突发无需干预 容量规划焦虑

这张表里最值钱的是“证书续期”和“防攻击”两项。前者听起来日常,但证书过期导致的站打不开是低级却高频的故障;后者对小团队是无底洞,攻击流量来一次,自己扛基本等于停服。

1.1.3 减不掉的活:别误以为托管等于甩手

广告不会告诉你的是,托管平台减掉的是“机器运维”,而不是“内容运维”。这些活仍然在你手上,平台一句疑问都不会帮你解决。托管不是免责声明,而是责任转移:把机器的责任转移给平台,换来的是你必须对内容、缓存、发布流程负责到底。

构建与发布流程。 文件传上去之前总要有构建过程。vue-router 的 base 路径配错、构建产物里残留绝对路径、图片没压缩传上去流量费翻倍——这些都是我在这本书后面章节反复要讲的。平台不帮你 build。

缓存与刷新。 CDN 缓存是你的站变快的核心,但缓存一旦忘记刷新,用户看到旧版页面骂的还是你。第五篇会专门讲刷新策略。我们最尴尬的一次是改了价格表忘了刷新,销售在外面跟客户说新价格,客户打开手机一看旧价格,当场信任崩塌。从那以后刷新动作被写进了部署脚本,成为发布流程不可省略的一步。

域名与 DNS。 平台给你的是默认域名,自定义域名要自己解析、自己验证所有权。域名有效期、解析记录、备案,一样都不能少。

成本预算。 托管平台按量计费对小流量友好,但如果哪天被刷流量,账单也可能失控。这事的应对方案放 1.3 费用与免费额度。

1.1.4 托管平台的运行机制:三件事必须先知道

迁到平台之前,有三条机制先弄清楚,否则后面处处是玄学:

文件不在“服务器”上,而在对象存储里。 你传上去的 dist 会被放进类似 COS 的存储桶,平台在前面挂一层 CDN。用户请求时先打最近的 CDN 节点,没有才回源到存储。所以“部署成功”其实是“文件进了存储桶并且缓存刷新生效”。

默认域名是平台借你的,不属于你。 形如 xxx.tcloudbaseapp.com 的域名随时可能因平台规则调整而变化,正式项目必须绑自己的域名。域名相关的完整流程在 3.2 域名与解析,这里只强调一条:别把默认域名印到名片和宣传材料上。

环境是隔离单位。 一个账号下可以开多个环境,测试环境和生产环境分开是最基本的纪律。我们团队的做法是任何改动先上 test 环境验证,再合并到 main 触发生产部署,这套流程在 5.1 CI/CD 里完整展开。

1.1.5 一次对照实验:同一个站两套部署

我做过的最直观的验证:同一个静态创业页,两条线并行跑一周。

传统服务器这条线,发布一次的完整命令是:

# 本地构建
npm run build

# 上传(还得先确认 rsync 在服务器上可用)
rsync -avz --delete dist/ user@server:/var/www/site/

# 远程检查 nginx 配置没被改坏
ssh user@server "nginx -t"

# 重载并验证
ssh user@server "systemctl reload nginx"
curl -I https://example.com

托管平台这条线:

npm run build
# 平台 CLI 或 git push 触发,平台自动接管分发与 HTTPS
npx tcb deploy --path dist

前者五条命令、两台机器、四种失败可能(网络、权限、配置、缓存);后者一条命令,失败原因只有明确的几种。从“一个人维护全链路”变成“一个人写好构建脚本,剩下交给平台”,这就是运维减法的体感。

1.1.6 我的两个反面教训

教训一:把托管平台当服务器用。刚迁移那阵,我习惯性地问“能不能 ssh 进去看看”,还想找 nginx.conf 改个 header。平台没有这些入口,方向就错了。正确问法是“平台提供什么配置项”,活在自己的 abstraction 里,比自己造轮子省心。

教训二:迁了平台就不学基础。托管不等于你可以不懂 HTTPS、不懂缓存。出问题时平台只给现象,诊断还是要靠基础知识,所以 1.2 节我会专门留一节讲“即使选了托管也要懂的东西”,第五篇再补上监控告警。另外还有一个小教训值得记:迁移别在业务高峰做,我们选在了周日上午,理由是当天即使出问题也有完整时间修,而不是周五晚上留下烂摊子。

小结

对静态创业页这种场景,托管平台把运维从“管机器”变成“管发布”。你放弃的是对底层的控制权,换来的是证书、防护、备份、扩容四件大事全部脱手——这几件事恰好是小团队最容易出血故障的地方。代价是你要接受平台的规则:构建自己搞定、缓存策略自己设计、费用自己盯住。下一节 1.2 选型对比:自建 Nginx vs 网站托管 把两条路线的正反两面摆全。

延伸阅读