凌晨两点,服务器监控的流量曲线终于彻底趴平了。我盯着屏幕上那条几乎贴地的绿线,把最后半罐红牛灌下去,喉咙里那股糖精和咖啡因混合的灼烧感异常清晰。
就是现在。真空期到了。
过去两年,我像个数字游民,在五六个最便宜的VPS供应商之间流浪。为了抢那点流量红利,什么野路子都试过:一个爬虫脚本扔在洛杉矶的1核1G机器上,另一个数据处理脚本为了躲频率限制又放在新加坡,数据库更是散落各处。每次迁移,都是噩梦重现。Python 2.7和3.5的路径打架,requests库版本不对直接报错,环境变量像一团乱麻。最崩溃的一次,为了复现一个半年前的爬虫环境,我花了整整两天翻聊天记录和残缺的笔记,那种感觉就像在垃圾堆里找一把特定的钥匙。
不能再这样了。2018年,如果还想规模化,哪怕是小规模的商业化,这种作坊式的运维就是自杀。
我决定把所有东西,全部塞进Docker。
过程有种大扫除般的、近乎暴力的快感。我给每一个独立的脚本都建了一个文件夹,里面就三样东西:脚本本身,一个requirements.txt,一个Dockerfile。Dockerfile写得极其简单,从最精简的Alpine Linux镜像开始,复制文件,pip安装依赖,设定启动命令。看着那些曾经让我头疼不已的环境配置问题,被短短十几行代码定义得清清楚楚、与世隔绝,这种感觉太他妈好了。这就是环境隔离,一个容器就是一个完整、封闭的世界,搬到哪里都能原样跑起来。
最爽的时刻来了。本地build镜像,打上标签,推到自己的私有仓库。然后登录那台新买的、配置高得让我有点心虚的服务器。一行 docker-compose up -d。屏幕开始滚动,那些曾经散落在世界各个角落的“数字资产”,像听到集结号的士兵,一个接一个地从镜像仓库里被拉起来,在新家整齐列队,运行状态全是健康的绿色。
这不仅仅是搬家。
这是一种秩序的确立。以后任何新脚本,都必须以Docker镜像的方式诞生。任何服务器,只需要装好Docker和Compose,就能在几分钟内部署全套服务。我甚至开始琢磨,能不能结合Git的Webhook,搞个最简单的CI/CD流水线,代码一推,自动构建、测试、部署。虽然现在只是雏形,但这条路通了。
窗外的天色还是黑的。但我知道,混乱的游击战时代,随着最后一个容器成功启动,正式结束了。脚下这块用容器化技术夯实的土地,才是2018年能站上去打仗的基础。所有那些关于流量、关于商业化的焦虑,此刻似乎都找到了一个可以着力的支点。技术带来的秩序感,是焦虑最好的镇静剂。














