写博客这件事,最怕的不是没东西写,而是工具本身变成了负担。

一开始的样子

最早这个站是一个 Go 单文件二进制:模板、CSS、JS 全被 embed 进了可执行文件里,部署时只要扔一个文件上去就能跑。听起来很爽,实际很快出问题:

  • 改一行 CSS 要重新编译、重新上传、重启进程;
  • 线上修样式靠 nginx 的 sub_filter 往响应里注 CSS,属于"能跑但没人敢碰"的黑魔法;
  • 本地看到的和线上渲染的根本不是同一份代码。

能跑不等于可维护。一个自己都不敢改的站点,迟早会烂在那里。

现在的结构

现在改成模板、样式、脚本各自独立,数据落到 SQLite:

层 技术 负责什么
模板 Jinja2 页面结构,按页拆分
样式 原生 CSS 设计令牌 + 分页面文件
数据 SQLite 文章、照片、配置
渲染 python-markdown 服务端完整解析 Markdown
@app.template_filter("md")
def _md(text):
    return render_markdown(text)

换来什么

  • 改样式不用重启,刷新即可;
  • Markdown 用成熟库解析,列表、表格、引用、代码围栏都不会坏;
  • 想加一个页面,加一个模板和一个路由,不碰其它文件。

代价是多了一个 Python 进程要守着。对一台 2C2G 的小机器来说,这点内存换开发体验,值。