写博客这件事,最怕的不是没东西写,而是工具本身变成了负担。
一开始的样子
最早这个站是一个 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 的小机器来说,这点内存换开发体验,值。