一、上线只是第一天
Production 的真正成本发生在上线之后:故障、发布、备份、SSL、容量、安全更新——每一项都需要有人负责。独立开发者最常见的困境是:产品上线时有热情维护,三个月后热情退潮,应用开始无人值守地腐烂。监控和运维不是大厂才需要的东西,恰恰是单人项目最需要的保险。
二、监控:第一时间知道它挂了
三层各答一个问题:
| 层次 | 回答的问题 | 典型手段 |
|---|---|---|
| 可用性监控 | 用户是不是已经打不开了? | 外部拨测(UptimeRobot / 云监控),1-5 分钟间隔 |
| 资源监控 | 是不是快不行了? | CPU / 内存 / 磁盘 / 带宽阈值告警 |
| 日志 | 为什么挂? | 应用日志聚合 + 错误追踪(Sentry) |
关键原则:告警必须能到达人。发到一个没人看的邮箱等于没有告警——接企业微信/钉钉机器人,凌晨两点挂了你也知道。磁盘告警阈值设在 80% 而不是 95%,留出反应时间。
三、备份:能恢复的才叫备份
- 数据库:每日全量 + 增量,保留 7-30 天
- 异地存放:备份和数据库在同一台机器上,机器没了备份也没了
- 定期演练恢复:没恢复过的备份只是心理安慰。每季度拿备份在本地起一次
- 别忘文件和配置:用户上传的文件、环境变量清单、nginx/compose 配置同样要备份
四、SSL 证书续期
免费证书有效期 3 个月,靠人手动续期必然忘记。后果不是「打不开」那么简单——浏览器全屏红色警告会直接清空用户信任。用 certbot 定时任务或云厂商托管证书自动续期,并把证书到期时间纳入监控告警(提前 14 天)。
五、发布与回滚
- 每次发布保留上一个可用版本,出问题能一键回滚
- 数据库迁移要向后兼容:先加列后删列的两段式,否则代码回滚了数据回不去
- 发布选流量低峰,发布后 15 分钟盯一眼错误率
六、故障处理的现实
真实项目里最常发生的故障,按出现频率排:
- 磁盘写满——日志没轮转,Docker 日志膨胀到几十 GB
- 内存泄漏 OOM——进程被杀,重启后过几天又挂
- 依赖的第三方挂了——支付回调超时、短信通道故障,要有降级和重试
- 被扫描器/爬虫打崩——恶意流量把小服务器 CPU 打满,需要限流和 WAF
- 升级依赖引入破坏性变更——lock 文件没锁住,构建结果不可复现
每一条都有对应的预防手段——日志轮转、资源配额、超时降级、限流、lock 文件。这就是「运维」的日常,不神秘,但需要有人持续做。
七、成本优化
- 清理闲置资源:测试机、僵尸容器、没人访问的预发环境
- 镜像和快照定期清理,旧的按策略过期
- 日志设置保留期,避免存储费悄悄涨
- 每季度重新评估按量 vs 包月,流量涨了之后单位成本结构会变
结语:Production 的本质是「有人负责」
监控脚本、备份策略、续期任务都可以自动化——工具能覆盖大部分动作。但「凌晨出问题时有人能处理」这件事没法脚本化,这正是托管服务真正的价值。宇视星提供分级托管套餐:从基础监控告警到全托管运维,让单人项目也有团队级的可靠性。