把博客搬回自己的服务器

一台 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] 每个改动过的配置文件都留了备份

部署的成就感不在于写了多少行,而在于第二天早上所有服务都还在。


部署示意图