5 个子站 · 15 个程序文件 · 十几处写死的
E:\路径 · 106 MB 部署包
切换时网站只断了几十秒。
起点:电脑一关,博客就没了
这个博客,还有财报看板、财报实验室、留言板、管理后台,一直都跑在我自己的电脑上。
外面能访问到,靠的是一条 Cloudflare 隧道:电脑主动连出去,Cloudflare 再把访问转发进来。好处是不用公网 IP、不用开端口;坏处也很直接 ——
电脑关机,所有网站一起下线。
为了让它们别挂,电脑上还有一套「守护」:一个每 10 分钟跑一次的计划任务,发现哪个服务没响应就重启它,隧道断了也拉起来;启动文件夹里还塞着 6 个开机自启的快捷方式。
能用,但它绑死了一台必须一直开着的电脑。
第一步:先摸清楚家底
动手之前,AI 先把电脑上的情况查了一遍:
| 子站 | 本机端口 | 实际是什么 |
|---|---|---|
| 博客 star-fall | 8180 | Mizuki 主题生成的静态页 |
| 财报看板 caiwu | 8080 | 静态页 + 每天刷新一次的 data.js |
| 财报实验室 lab | 8280 | Flask,上传年报 PDF 自动生成分析页 |
| 留言板 msg | 8288 | Flask + SQLite |
| 管理后台 admin | 8289 | Flask,同时读写留言板和实验室的账号 |
有个小插曲:静态页用的是自己写的 serve.py,响应头里写着 Server: CaiwuStatic/1.2 —— 博客和看板共用这一个小服务器。
第二步:要不要重构成 Java?
看到 lab 目录有 277 MB,第一反应是「Python 是不是太大了,要不要重写」。
拆开一看,大的根本不是代码:
| 目录 | 大小 | 要不要上服务器 |
|---|---|---|
| 4 个程序的代码 | 约 1 MB | 要 |
| 博客 + 看板的静态页 | 约 102 MB | 要 |
lab\fixtures 测试数据 | 275 MB | 不用 |
pyenv 虚拟环境 | 193 MB | 不用,服务器上重装 |
而且服务器总共才 1.7 GB 内存。Java 程序光启动就要几百 MB,这几个 Flask 程序上线后每个只占 21–26 MB。解析财报 PDF 的逻辑有几千行,重写不光费劲,结果还可能对不上。
结论:不重构,只改路径。
第三步:十几处写死的 E:\
代码里到处是这样的东西:
BASE = r"E:\deepseek_work\lab"PY = r"E:\Pyt\python.exe"GB_DB = r"E:\deepseek_work\output\guestbook\guestbook.db"AI 写了个小脚本,把用到的 15 个文件复制一份,按一张映射表把路径换成服务器上的:
BASE = "/srv/159911/lab"PY = "/srv/159911/venv/bin/python"GB_DB = "/srv/159911/data/guestbook/guestbook.db"换完做了两件事:
- 扫描残留 —— 还有没有
X:\开头的路径,结果是 0 - 语法检查 —— 每个文件都用
ast.parse过一遍
原来的文件一个没动,改的全是副本。
第四步:服务器上怎么跑
| 原来(电脑上) | 现在(服务器上) |
|---|---|
serve.py 提供静态页 | Nginx |
| 计划任务每 10 分钟检查重启 | systemd:开机自启、崩溃 3 秒后自动重启 |
| 启动文件夹里的快捷方式 | systemd |
| 电脑上的 cloudflared | 服务器上的 cloudflared,同一条隧道、同样的配置 |
每个 Python 服务还加了内存上限(lab 700 MB,其余 200 MB),以独立的低权限用户运行,防止一个程序出问题拖垮整台机器。
账号文件、留言数据库、隧道凭证这几样密钥类文件,全程是直接从原位置传到服务器的,AI 没有读取内容,中转的副本用完就删了。
第五步:切换 —— 最怕两边同时在线
一条隧道如果同时有两个地方在跑,Cloudflare 会把访问随机分给两边。所以顺序很重要:
- 服务器上先装好、本机自检,5 个服务全部返回 200
- 禁用电脑上的守护计划任务(不然 10 分钟后它会把隧道重新拉起来)
- 关掉电脑上的隧道
- 启动服务器上的隧道
- 从外网逐个检查 5 个子站
日志里能看到隧道连上了 4 条线路,网站中断大约几十秒。
最后再把电脑上空跑的 5 个旧程序关掉,6 个开机自启的快捷方式移到备份目录(不是删除),以后要回退,挪回去就行。
收尾:电脑上生成的内容怎么同步
有两样东西还是在电脑上产生的:
- 博客文章 —— 在电脑上写、电脑上构建
- 看板数据 —— 每天一次的计划任务在电脑上刷新
所以给这两个流程各加了一行「上传到服务器」:服务器端收到一个压缩包,先解压到临时目录,确认有 index.html 才整体替换,不会出现传一半网站坏掉的情况。
现在发文章还是双击原来那个「发布博客.bat」,只是最后多了一步自动上传。传完,电脑就可以关了。
(这篇文章本身,就是用这个流程发出来的。)
快了吗?
老实说,打开一个页面的等待时间差不多。
服务器本机访问博客只要 0.0005 秒,时间全花在路上 —— 访问要经过 Cloudflare 的洛杉矶节点绕一圈,在家部署时也是同一条路。
真正的变化是:
- 24 小时在线,电脑关机不影响
- Nginx 比自己写的
serve.py更扛并发,图片多的页面更顺 - 机房的上行带宽比家里宽带稳定
踩过的坑
- 换行符:Windows 上写的 shell 脚本带着
\r\n,上了 Linux 直接报错,每次上传后都要先转一下 - 一个停不下来的服务:顺手清理电脑上的开机自启时,某个游戏平台的后台服务卡在「正在停止」两分钟不动,最后只能直接结束进程
- 差点误伤:清理服务器时,我把另一个暂时打不开的网站当成「用不上」停掉了 —— 好在数据都在,几分钟就恢复了。教训:停服务之前先问一句「这个还要不要」。
本文中的所有操作都由 AI 执行,涉及权限的每一步都先征得了我的同意。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时