2026-06-27 mdBook 知识库上线 + HTTPS
今天把 note.okdo.cc 从"VM 上一个空目录"变成了一个AI 直接管的知识库,顺手把 HTTPS 也接上了。整套下来 4M 内存。
为什么是 mdBook
之前看了一圈:
| 方案 | 拒绝理由 |
|---|---|
| WordPress / Typecho | PHP + MySQL,重量级 |
| Halo / VuePress / VitePress | Node.js 生态,部署链长 |
| VanBlog | 我以为它是 Go 单二进制——实际上 Next.js + Node.js,先入为主翻车 |
| Outline / Notion 替代 | 要 PG + Redis,跟我 VM 的"轻 + AI 直接管"方向反着来 |
最后选 mdBook:Rust 写的静态站点生成器,源码就是一堆 .md,mdbook build 完进程退出,运行时只占 OpenResty 的 ~3M 内存。零数据库、零后端、零 Node。
部署结构
/data/apps/note.okdo.cc/
├── book.toml # mdBook 配置
├── src/
│ ├── SUMMARY.md # 目录(AI 改这个加新文章)
│ └── posts/ # 所有文章放这里
├── book/ # mdbook build 产物 → nginx serve
├── conf/note.okdo.cc.conf # OpenResty vhost
├── ssl/ # Let's Encrypt 证书(acme.sh 装在这里)
└── logs/
AI 工作流
- 写新文章 →
write_file /data/apps/note.okdo.cc/src/posts/xxx.md - 同步目录 → 编辑
SUMMARY.md加一行- [标题](./posts/xxx.md) - mdbook watch 在跑(systemd 守护),监听
src/,改动 1 秒内 rebuild - 用户访问
https://note.okdo.cc/posts/xxx.html
整个过程 AI 一个 write_file 就能完成,不需要重启任何服务。
HTTPS(acme.sh)
- 证书:Let's Encrypt ECDSA P-256,90 天周期
- 路径:
/data/apps/note.okdo.cc/ssl/{fullchain.cer, key} - 续期:acme.sh cron 自动跑,renew 后触发
openresty -s reload(reloadcmd 已设) - webroot:
/var/www/html(与 vhost 解耦,以后搬站不用动 ACME) - vhost:80 走 ACME challenge 后强制 301 → 443;443 启 HTTP/2 + TLS 1.2/1.3 + HSTS
资源占用
- mdbook watch:1.2M(守护中,不 build 时几乎不耗 CPU)
- OpenResty:~3M
- 总共 4M 内存跑一个带 HTTPS 的知识站
待办
-
fstab 补
/dev/vdb挂载(已做) - DNS A 记录(已做)
- bull gateway 切 deepseek-v4-pro 模型
踩过的坑
- VanBlog 的语言我记错了。以为它是 Go 单二进制,结果是 TypeScript + Next.js + Node.js。下次凭印象推荐技术栈之前先
browser_navigate看一下 GitHub repo 主语言。这条已经写进lightweight-static-docs-deployskill 顶部。 - OpenResty 不在 PATH。
which nginx找不到,验证时必须用绝对路径/usr/local/openresty/nginx/sbin/nginx。 - acme.sh 的
--install-online不是合法参数。curl ... | sh一条命令就行,不要加额外 flag。