ChatGPT 刷屏的第一晚:我看到了一座正在崩塌的围墙

ChatGPT 刷屏的第一晚,我盯着 GitHub 上那些疯狂增长的 star 数,突然意识到过去三年死磕的爬虫、API 封装、自动化脚本,可能一夜之间变成废铁。这种感觉不是焦虑,是胃里那种实实在在的坠痛,像被人从背后猛踹了一脚。我去年刚把团队解散,回归个人交付,以为靠着一手“技术黑活”能稳吃几年,现在这堵墙开始晃了。

墙晃归墙晃,手里的活不能停。客户那边还有三个数据采集项目挂着,服务器环境部署还是老一套:手动 apt-get,配环境变量,处理依赖冲突,一台机器搞完复制粘贴命令到下一台,出点幺蛾子就得 SSH 上去瞪着眼睛查日志。太他妈原始了。这种重复劳动在 2021 年底显得尤其可笑,尤其是在看到 OpenAI 那种弹指间部署全球服务的可能性之后。我得先把自己从这种泥潭里拔出来,不然连被 AI 替代的资格都没有。

所以今晚的任务不是焦虑,是彻底搞定容器化。目标很明确:任何一个新项目,我写个 Dockerfile,就能在阿里云、腾讯云、甚至我家里那台破 NUC 上,用完全一致的环境跑起来。这听起来是 DevOps 的常识,但对我这种习惯了“够用就行”的独狼来说,是思维上的硬切换。我开始动手,第一个坑就是 Alpine 镜像。为了追求极致轻量,我用了 Alpine 做 Python 基础镜像,结果一堆依赖报错,连基本的 pandas 都装不上。musl libc 和 glibc 的兼容性问题像一记闷棍,把我打回现实——追求极致的前提是别给自己挖坑。老老实实换回 python:3.9-slim。

真正的战斗在 Dockerfile 的优化上。我之前的写法是把所有依赖和代码一股脑 COPY 进去,每次改一行代码,整个镜像都要重建,缓存形同虚设。这次我拆了层级:第一层,只复制 requirements.txt 并安装依赖。只要依赖不变,这层缓存就一直有效。第二层,再复制整个项目代码。这样我日常改代码,构建速度从几分钟缩短到十几秒。这种细节带来的效率提升是实打实的,它让我在频繁迭代时保持了心流,而不是在等待中消耗耐心。

单机跑起来只是第一步。横向扩展的逻辑才是核心。我搞了个 docker-compose.yml,把应用服务、Redis 缓存、PostgreSQL 数据库都定义成独立 service。然后用一个简单的 shell 脚本,配合 sshpass(虽然不安全,但内网临时用用),把构建好的镜像 tar 包 scp 到另外两台备用的 VPS 上,再远程执行 docker load 和 docker-compose up -d。逻辑很简单:一台机器作为构建机,生成标准镜像;其他机器作为运行节点,只负责拉取和运行。我甚至尝试了用 Docker Swarm 做最简单的集群管理,初始化 swarm,加入节点,服务堆叠。看着同一个服务在三个节点的容器间自动分配,那种“掌控感”稍微抵消了一点对 AI 的恐慌。

但这套东西依然粗糙。它没有健康检查,没有自动滚动更新,日志也是分散在各台机器上。可对我来说,2021 年 11 月这个节点,能做到“一键部署,多机运行”,已经是从农耕文明迈进了工业时代。它解决的不是技术先进性,而是把我从繁琐的、重复的、低价值的运维劳动中解放出来。我把更多的时间留给了业务逻辑本身,留给了思考怎么用 Python 把客户那些乱七八糟的 Excel 表清洗得更干净。

凌晨三点,三个节点的服务都跑起来了,监控面板上的曲线平稳。我关掉电脑,脑子里挥之不去的却是晚上看到的 ChatGPT 演示。我的容器化围墙垒高了,但外面已经有人开上了飞机。这种技术代差带来的窒息感,比任何服务器宕机都可怕。我知道,接下来要啃的硬骨头,不再是 Docker 命令,而是怎么让我的“手艺”在 AI 面前,不至于一触即溃。身体刚因为健身教练的调理好了点,精神上的新一轮暴击又来了。这行真他妈没法干,但又停不下来。

© 版权声明
THE END
喜欢就支持一下吧
点赞59 分享