记得五年前刚升任技术负责人的时候,我陷入过一种疯狂的"文档焦虑"。
那时我坚信:团队混乱是因为文档不够多。于是我逼着大家在Confluence上疯狂输出,架构图、流程图、详细到每个参数的部署手册……结果呢?新人入职第一周,对着那堆半年前更新的Wiki发呆,最后还是小心翼翼地跑来拍我肩膀:“哥,这个IP好像ping不通了。”
那一刻我才意识到,对于没有专职运维的中小团队,过期的"厚文档"比没有文档更可怕。它是一种虚假的安全感。
这两年,我带着现在的团队把几十页的Wiki砍成了几个Markdown文件,反而事故率降了,新人上手快了。今天想和大家聊聊,如何用"极简主义"做DevOps知识沉淀,文末我会分享那个救了我发际线的通用模板。
一、 别做"说明书",要做"检查清单"
很多团队的部署文档写得像论文,从Linux内核参数讲到业务逻辑。但实际上,在半夜两点服务挂掉的时候,运维或者替补上场的开发人员根本不想看"为什么",只想知道"怎么做"。
真实案例: 2021年双十一前夕,我们团队的小李负责紧急扩容。当时的文档里写了大段关于Nginx负载均衡原理的描述,关键的配置路径却夹杂在一段废话里。结果小李看岔了行,改错了配置文件,导致服务502了整整10分钟。
事后复盘,我们并没有责怪小李,而是反思了文档结构。
改进方法: 我们引入了航空业的Checklist(检查清单) 理念。
在我们的代码仓库根目录下,必须有一个 OPS_README.md。这个文件里不允许出现大段文字,只能有步骤。
比如,不要写:“我们需要确保数据库连接正常,可以通过检查配置文件…”
要写成:
cat /etc/config/db.json确认 host 为192.168.1.10- 执行
npm run db:check返回Success
这种傻瓜式的清单,能让一个完全不懂这块业务的实习生,在紧张环境下也能按部就班地完成操作。
二、 只有代码库里的文档,才是鲜活的
不知道大家有没有这种经历:Wiki在Confluence上,代码在GitLab里,部署脚本在Jenkins里。三处分离,维护成本极高。
我的惨痛教训: 我曾经维护过一个支付服务,代码里的环境变量名改了,但Wiki没更新。结果两个月后,一位同事按照Wiki配置新环境,怎么跑都报错,查了一下午才发现是文档"骗"了他。
落地建议:Docs as Code(文档即代码)
现在,我强制要求所有运维相关的文档,必须随代码提交。
这意味着:
- 文档就是Markdown文件,放在代码仓库的
/docs或者根目录下。 - 代码改动如果涉及环境变更,必须在同一个Merge Request里修改文档。
- 文档不更新,代码不让合并。
这样做最大的好处是,你查看任何一个历史版本的代码时,都能看到当时那个版本对应的正确文档,这对于回滚操作简直是救命稻草。
三、 极简模板:中小团队的"救命三页纸"
经过多次迭代,我总结出了一套适配中小团队(5-50人规模)的极简DevOps文档模板。你可以直接复制到你的项目中。
这套模板的核心逻辑是:假设操作者只有大专水平的Linux基础,且处于极度疲劳状态。
模板文件:DEPLOY.md 或 OPS_MANUAL.md
| |
3. 部署与重启 (标准动作)
常规部署:
| |
紧急回滚 (救火专用):
- 确认上一版本镜像 Tag:
docker images | grep my-app - 执行回滚:
./scripts/rollback.sh <tag_id> - 验证:
curl http://localhost:8080/health返回{"status":"UP"}
4. 常见报错 (踩坑记录)
这里只记录真实发生过的故障,不要臆想。
| 现象 | 报错关键字 | 解决方案 |
|---|---|---|
| 启动失败 | Connection refused | 检查 MySQL 是否挂了,或防火墙是否拦截 3306 |
| 登录慢 | Redis timeout | 可能是连接池满了,重启服务可暂时恢复,后续需排查慢查询 |
| |