个人主页
- Python
- Flask
- Jinja2
- gunicorn
- systemd
- nginx
目标
做一个能长期维护的个人主页:放得下自我介绍、在做的项目和写过的文字,并且十年后还跑得起来。
因此刻意做了减法:不加数据库、不加前端框架、不加构建步骤。
结构
- 后端:Flask + Jinja2 服务端渲染,gunicorn 常驻,systemd 托管。
- 内容:Markdown 文件 + YAML front matter,存放在部署目录之外,因此发布代码不会覆盖线上写作的内容。
- 部署:本地仓库 → 裸仓库 →
post-receive钩子检出到运行目录并重启服务,一次git push完成上线。 - 对外:nginx 反向代理到
127.0.0.1:8080,由 systemd 保证崩溃自动拉起。
一些取舍
内容层用「内容树最大修改时间」判断缓存是否失效,而不是定时轮询。好处是写完立刻生效,且在多 worker 下依然正确。
服务只监听 127.0.0.1,不对公网直接暴露端口;同时通过 systemd 的 ProtectHome=read-only 与 ReadWritePaths 把进程可写范围限制在内容目录内。