把博客搬回自己的服务器
一台 2 核 1.7G 的小机器,一个 nginx,一个进程,够用了。
这台服务器上已经跑着几个不能停的服务。所以这次部署的第一原则不是「功能全」,而是别把别人的东西弄挂。
先量,再选
选型之前先把内存看清楚:
$ free -m
total used free shared buff/cache available
Mem: 1736 702 351 1 683 864
Swap: 4095 198 3897
800 多兆可用,听起来不少,但一个默认的 Node SSR 进程随手就能吃掉三四百兆,还要留给构建。于是方案很明确:
- 一个进程,不要多 worker;
- 服务端渲染成 HTML,不要前端运行时;
- SQLite,不要独立数据库进程。
前缀是唯一需要小心的地方
站点挂在 /blog/ 下,所以每一条链接、每一个静态资源路径都必须带前缀。做法是让 nginx 把前缀剥掉再转发:
location /blog/ {
proxy_pass http://127.0.0.1:8090/; # 结尾的斜杠 = 剥掉 /blog/
}
应用自己只看见 /posts/hello,而生成链接时统一走一个函数加上前缀:
def url(path: str = "/") -> str:
if path == "/":
return settings.base_path + "/"
return settings.base_path + path
这样本地开发时把 BLOG_BASE_PATH 设成空串,同一个代码库就能跑在域名根上。
上线检查清单
- [x]
nginx -t通过之后再reload - [x] 应用只监听
127.0.0.1 - [x] 不新增任何防火墙规则
- [x] 每个改动过的配置文件都留了备份
部署的成就感不在于写了多少行,而在于第二天早上所有服务都还在。