Bedic 全文索引

搜索公开内容

项目PROJECT

与Obsidian同步的博客搭建(五)——服务器部署

在 Debian 上部署版本化 Publisher、Caddy、Waline 和图片桥接服务,并用账号与目录权限隔离各条数据流。

更新
阅读
2 分钟

与Obsidian同步的博客搭建(五)——服务器部署

当前生产环境运行在 Debian 12。服务器不安装桌面 Obsidian,也不使用 Syncthing 直接托管完整 Vault;内容通过受限同步服务进入只读 Server Mirror,再由独立账号构建网站。

运行组件

组件 作用
Node.js 22 运行 TypeScript Publisher、Astro 构建与互动服务
Caddy HTTPS、静态文件、同源互动代理和安全响应头
systemd 服务、健康检查、备份、同步与构建队列
Waline + SQLite 评论、点赞和浏览量
Bedic Image Upload Android 图片/动态照片到专用对象存储的认证桥接

账号和目录隔离

bedic-sync 只能写镜像;bedic-builder 只能读镜像并写 Publisher 状态、构建和 Release;Caddy 只能读 current;互动账号只能读写自己的 SQLite。即使某个组件被攻破,也不应自然获得完整 Vault 或其他服务的数据。

版本化安装

Publisher 不覆盖一个固定运行目录,而是安装到带版本和内容哈希的路径。部署脚本先在新目录安装依赖、执行 TypeScript、Astro、单元测试和部署契约,再切换 systemd 指向。旧 runtime 和旧 Release 都保留为回滚材料。

/opt/bedic-publisher/<version-hash>/
/srv/bedic/releases/<release-id>/
/srv/bedic/current -> releases/<release-id>/

Caddy 与互动代理

Caddy 直接服务静态 Release。只有 /interactions/ 和受认证保护的图片上传路径进入本地服务;Waline 和上传桥都只监听回环地址。CSP 允许 Pagefind 所需的最小 WebAssembly 能力,并限制图片、媒体和脚本来源。

激活顺序

  1. 记录当前 runtime、Release、Caddy 配置和服务状态。
  2. 上传并校验部署包哈希。
  3. 在新目录执行 Linux 全量测试。
  4. 生成候选 Release,确认警告、路由和隐私契约。
  5. 原子切换 runtime/Release,重载服务。
  6. 检查首页、文章、搜索、互动、健康接口和日志。
  7. 失败时恢复旧 runtime、旧 current 和旧配置。

部署脚本不会把“测试通过”当成“用户已验收”。涉及首次公开切换、删除旧服务或恢复互动数据库时,仍保留独立的人工确认点。

上一篇:与Obsidian同步的博客搭建(四)——Astro前端与阅读体验
下一篇:与Obsidian同步的博客搭建(六)——持续运维

RESPONSE DESK / 读者来信

继续这场讨论

浏览 评论

指出疏漏、补充案例,或留下你在实践中遇到的新问题。

评论区将在接近此处时加载。