强哥笔记

这是一个用 mdBook 驱动的个人知识库,AI 可以直接通过文件系统管理文章。

开始

  • 编辑 src/posts/*.md 添加新文章
  • 修改 src/SUMMARY.md 更新目录
  • mdbook build 重新生成静态站点

你好,这是第一篇笔记

这是一个由 mdBook 渲染的知识库示例。

它的工作原理

  • 文章放在 src/posts/ 目录
  • 编辑后自动 mdbook build
  • nginx 直接 serve 渲染产物 book/

AI 怎么管理

AI 写新文章 = 写一个 .md 文件 + 触发 build。
AI 改文章 = 修改 .md + build。
AI 删文章 = 删 .md + build。

自动 build 测试

如果你能看到这行,说明 mdbook watch 在工作。

2026-06-27 mdBook 知识库上线 + HTTPS

今天把 note.okdo.cc 从"VM 上一个空目录"变成了一个AI 直接管的知识库,顺手把 HTTPS 也接上了。整套下来 4M 内存。

为什么是 mdBook

之前看了一圈:

方案拒绝理由
WordPress / TypechoPHP + MySQL,重量级
Halo / VuePress / VitePressNode.js 生态,部署链长
VanBlog我以为它是 Go 单二进制——实际上 Next.js + Node.js,先入为主翻车
Outline / Notion 替代要 PG + Redis,跟我 VM 的"轻 + AI 直接管"方向反着来

最后选 mdBook:Rust 写的静态站点生成器,源码就是一堆 .mdmdbook 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 工作流

  1. 写新文章write_file /data/apps/note.okdo.cc/src/posts/xxx.md
  2. 同步目录 → 编辑 SUMMARY.md 加一行 - [标题](./posts/xxx.md)
  3. mdbook watch 在跑(systemd 守护),监听 src/,改动 1 秒内 rebuild
  4. 用户访问 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 模型

踩过的坑

  1. VanBlog 的语言我记错了。以为它是 Go 单二进制,结果是 TypeScript + Next.js + Node.js。下次凭印象推荐技术栈之前先 browser_navigate 看一下 GitHub repo 主语言。这条已经写进 lightweight-static-docs-deploy skill 顶部。
  2. OpenResty 不在 PATHwhich nginx 找不到,验证时必须用绝对路径 /usr/local/openresty/nginx/sbin/nginx
  3. acme.sh 的 --install-online 不是合法参数curl ... | sh 一条命令就行,不要加额外 flag。