既然回到了书房,我就把所有的 SOP 封装进 Docker。窗外是成都少有的双节同庆,空气里混着月饼的甜腻和满街红旗的油墨味,热闹得有点失真。我把窗帘拉严实了,书房里只剩下服务器风扇的低鸣和一块 4K 屏的冷光。35岁,折腾了两年团队,最后发现最奢侈的东西,是这种能连续思考四小时不被打断的安静。
团队散了,账上流水看着还行,但人快被掏空了。去年这时候,我还在酒桌上跟人吹嘘我们有二十号人,能接全栈项目,从 App 到后台一把抓。结果呢?一个简单的数据爬虫需求,前端说 API 还没好,后端说前端没给界面测不了,测试说环境没部署。我像个救火队长,白天催进度,晚上改 PRD,凌晨回客服消息。最讽刺的是,那个爬虫需求,最后是我自己用 Python + Scrapy,一晚上写出来的。我付着二十个人的工资,干着最核心的脏活累活。那感觉,就像你花钱请了个交响乐团,最后发现只有你自己在台上吹口哨。
所以今年我断得特别彻底。把那些需要反复沟通、手把手教的“标准化流程”,全部扔进了 Dockerfile。爬虫环境依赖冲突?一个镜像搞定。数据分析那套 Pandas、NumPy、Jupyter 总有人装不好?镜像里锁死版本。连微信自动回复机器人的部署,我都做成了 docker-compose,以前要跟运维扯半天的端口、环境变量、日志路径,现在一行命令 up。这不是技术炫技,这是血泪教训。人的不确定性太高了,而容器,至少它每次启动都一模一样。
我盯着终端里滚动的构建日志,想起以前带人时的无力感。你给他 SOP 文档,他问你“这个参数什么意思”;你录了操作视频,他说“我电脑上好像不一样”。现在好了,我把所有“解释”的成本,都前置到了编写 Dockerfile 和 shell 脚本的那一刻。`COPY`进去的是代码,`RUN`的是安装命令,`EXPOSE`的是端口。逻辑全在文件里,沉默,但精确。谁要再用,`docker pull`,然后`docker run`。没有“好像”,没有“我觉得”,它要么能跑,要么报错。报错信息都还是我精心写好的。
这大概就是中年手艺人最后的倔强。拒绝再为管理的熵增买单,把宝贵的意志力全部回收,聚焦在能封装、能复现、能产生滚雪球效应的核心技能上。街上的热闹是他们的,我只有我的镜像仓库。当那些容器一个个成功跑起来,端口监听正常,cron job 按时触发,那种掌控感,比收到一笔尾款还要踏实。团队扩张像一场高烧,现在烧退了,脑子清醒得可怕。我知道,有些路,一个人走,带着自己打造的自动化武器库,反而更快。
红旗和月饼的节日总会过去,但系统不会。我把最后一条 CI/CD 流水线配置完,推送到 GitLab。看着 pipeline 的状态从 pending 变成 running,再变成绿色的 passed。这大概就是 35 岁,能送给自己的,最实在的礼物。一个完全受控的、高效的、安静的数字车间。明天太阳升起时,它们都会准时开始工作,而我,可以真正决定是继续编码,还是出门,去尝尝那凉了的月饼是什么味道。














