第 001 期 · 2026 年 10 月 Private Journal of Systems & Attention 长文 · 3,000 字
流明LUMEN NO.001 / RSS ↗
← 返回本期
长文 / Essay · 运维

十三个课程站,一个人怎么维护

十三个课程站加一个门户,写起来是十三次重复劳动,维护起来是同一个问题。 这篇记录一年里攒下的三件东西:一套统一的版面语言、一个会体检的打包脚本、两套能直接复制的部署配置。

摘要 / Abstract 一个 2 核 4G 的云主机上跑着十三个课程站、一个门户、一个答疑系统和一个监控面板。 本文记录这套东西怎么从「十三个文件夹各写各的」变成「一套规矩加三个脚本」, 以及在哪三件事上我付出了代价才学会。

第一个课程站是我一个人写的,第二个也是。写到第三个的时候我开始复制粘贴, 写到第五个的时候,改一处样式要打开十几个文件夹——那时候才明白,问题不在「做站」,在「维护」。

一八个站,一套版面语言

十三个站原来各写各的:Hadoop 深青、Hive 蓝、Java 橙,各有各的卡片圆角、各有各的标题字号。 单独看都还行,摆在一起像八个人做的。后来统一成一套「刊物」语言:两种字体、 一套间距、一条细线分栏,颜色只留一个变量给栏目。

改完之后,新增一个站从两天变成半天。省下来的不是打字速度,是不用再重新决定「这个站长什么样」, 只需要决定「这个站讲什么」。

一个人做十三个站,省下来的时间不是写得快,是不用再决定。 ——本文第 2 稿,写在改完第八个站的凌晨

二打包脚本顺带做体检

站点是静态的,构建产物放进一个目录就能跑。但每次手工拷目录都会漏东西:一个相对链接写错了、 文件名大小写在 Windows 上没问题到 Linux 就 404、某个路径是绝对路径,搬到子目录就断。 这三类错误有个共同点——本地打开看不出来。

所以打包脚本多做了三件事:扫全部链接检查目标存在、比对文件名与实际大小写、把根绝对路径挑出来。 跑一遍十几秒,比上线之后挨个点省事得多。

表 1 三种部署方式的代价 / 2026 年 10 月实测
方式适合什么要维护什么坑
Caddy自己的机器、给局域网看一个地址、一行密码子路径要 handle_path
nginx 主机装云主机、长期跑charset、gzip、缓存、鉴权默认不认中文目录
Docker 容器换机器、想一键复现镜像与本机目录的挂载挂载时忘了只读

表格最后一行是我现在的选择。换服务器的时候,最怕的不是配置写不出来, 而是记不清上一次写了什么——容器把那份记忆变成了一个文件。

三两套配置,各有用处

自己机器上给局域网看,用 Caddy:一行地址就是自动 HTTPS,加一层 basic_auth 挡一下, 配置文件十几行。搬到云主机上用 nginx:要自己写 charset utf-8, 不然中文目录名直接 404;要开 gzip,要设静态缓存,要配鉴权,或者干脆只开内网。

两套配置都留在仓库里。不是为了炫技,是因为下一次部署的时候,我大概率不记得上次是怎么弄的。 留一份能复制的东西,比留一份能理解的东西更管用。

四三条教训

这三条都是花时间换的,写在这里免得再交一次学费:

  1. 课件原件 120MB,别塞进站点。第一版把 PPT 和视频原件也打进包里,上传一次要八分钟。现在只放生成后的 HTML,原件另存。
  2. 中文目录必须 charset utf-8。nginx 默认不是,出问题的时候它不会告诉你原因,只会给你 404。
  3. 迁移前先备份。这条是拿一百多个会话记录换来的,代价最大,道理最简单。

现在八个站加一个门户装在一台 2 核 4G 的机器上,跑着不费劲。维护的成本主要不在服务器, 在我自己的记性——所以脚本越写越啰嗦,注释越写越长,都是写给三个月后的我看的。

1 十三个站指 Hadoop、Hive、Java、Python、Scala、JavaScript、数据库、数据可视化、数据采集、专业英语、Photoshop、经济学原理、四级等课程站与一个门户页; 打包后体积约 96MB,其中课件 PDF 占七成,不进仓库。

全文完