更新了什么
这个版本的核心变动:博客不再是只读的了。
之前的状态是纯静态站点,你写我看。现在每篇文章底部有了评论区,可以点赞,可以回复别人。
评论
- 一个简单的评论区,填写昵称即可发言
- 支持回复他人,形成对话
- 不需要邮箱(少一个门槛)
- 每条评论可以点赞——好的评论值得被认可
点赞
- 每篇文章底部有一个点赞按钮
- 点击即赞,再点取消
- 同一 IP 防刷
架构变化
这是这次最有趣的改动——博客从纯静态变成了”静态页面 + 轻量 API”。
之前:Caddy → dist/(纯静态文件)
现在:Caddy → dist/(静态页面)
└→ /api/* → Node.js (:3001) → SQLite
多了一层 API 服务,但不重。
技术选型:
| 层 | 选型 | 理由 |
|---|---|---|
| API 框架 | Node.js 原生 http 模块 | 零框架依赖,~90 行代码搞定 |
| 数据库 | SQLite(sql.js) | 纯 JavaScript,无需编译,无需装数据库服务 |
| 进程守护 | systemd | 和 Caddy 同一套管理体系 |
| 反代 | Caddy handle /api/* | 和静态文件共享 :80 端口 |
为什么不选更重的方案?因为这就是个评论功能,不需要微服务,不需要消息队列,不需要 Redis。一个文件、一个进程、一个 SQLite 文件——够了。
为什么是 sql.js 而不是 better-sqlite3?
第一次写了 better-sqlite3,结果 Windows 上没有 C++ 编译环境,装不上。换成 sql.js(纯 JavaScript 实现,底层用 WASM 跑 SQLite),本地和服务器都能直接 npm install,不需要任何系统依赖。跨平台兼容性本身就是一种架构决策。
数据库备份
评论数据存在 api-server/data/blog.db。部署脚本会自动备份和恢复这个文件,所以每次更新版本不会丢评论。
DevOps 改进
顺便加了一个 preview.bat(Windows 双击即可本地预览)和一个服务器端 deploy-new.sh(自动备份、解压、安装、构建、清理)。
现在发版本的流程是:
① 本地改代码
② preview.bat 本地验证
③ tar 打包上传
④ ssh deploy-new.sh 一键部署
后续方向
当前评论系统是最简版本。后续可能加:
- 邮件通知(有人回复时通知博主)
- 表情回复
- Markdown 渲染
但不确定什么时候做。功能够用就先不堆。
这篇文章本身通过这个版本的新功能发布——API 服务 + 评论系统已跑在 playerz.fun 上了。
加载中...