<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>博客搭建 on WitMinder</title>
        <link>https://witminder.com/tags/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/</link>
        <description>Recent content in 博客搭建 on WitMinder</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Thu, 16 Jul 2026 23:00:00 +0800</lastBuildDate><atom:link href="https://witminder.com/tags/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>零 VPS 的笔记同步与博客架构</title>
        <link>https://witminder.com/p/zero-vps-notes-blog/</link>
        <pubDate>Thu, 16 Jul 2026 23:00:00 +0800</pubDate>
        
        <guid>https://witminder.com/p/zero-vps-notes-blog/</guid>
        <description>&lt;h2 id=&#34;背景&#34;&gt;&lt;a href=&#34;#%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;背景
&lt;/h2&gt;&lt;p&gt;我需要一套可以在多个设备之间同步的 Obsidian 笔记系统，同时希望把经过整理的内容发布为公开博客。&lt;/p&gt;
&lt;p&gt;最初考虑过自建 VPS、数据库和实时同步服务，但这会引入服务器运维、备份、HTTPS、监控以及迁移成本。对于个人笔记与静态文章发布，最重要的不是拥有一台服务器，而是：&lt;strong&gt;数据可恢复、发布路径简单、长期维护负担低。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因此最终选择了一套零 VPS 架构。&lt;/p&gt;
&lt;h2 id=&#34;技术选型&#34;&gt;&lt;a href=&#34;#%e6%8a%80%e6%9c%af%e9%80%89%e5%9e%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;技术选型
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;需求&lt;/th&gt;
          &lt;th&gt;方案&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;多端笔记同步&lt;/td&gt;
          &lt;td&gt;Obsidian + Remotely Save&lt;/td&gt;
          &lt;td&gt;在各设备的 Vault 之间同步文件&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;远端对象存储&lt;/td&gt;
          &lt;td&gt;Cloudflare R2&lt;/td&gt;
          &lt;td&gt;以 S3 兼容接口保存同步文件&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;静态站点生成&lt;/td&gt;
          &lt;td&gt;Hugo&lt;/td&gt;
          &lt;td&gt;将 Markdown 构建为静态网站&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;主题&lt;/td&gt;
          &lt;td&gt;PaperMod&lt;/td&gt;
          &lt;td&gt;提供搜索、暗色模式、RSS 和良好的阅读基础&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;代码托管&lt;/td&gt;
          &lt;td&gt;GitHub&lt;/td&gt;
          &lt;td&gt;保存博客源文件与变更历史&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;自动部署&lt;/td&gt;
          &lt;td&gt;Cloudflare Pages&lt;/td&gt;
          &lt;td&gt;监测 &lt;code&gt;main&lt;/code&gt; 分支并自动构建、发布&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;架构&#34;&gt;&lt;a href=&#34;#%e6%9e%b6%e6%9e%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;架构
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;┌────────────────────┐      S3-compatible      ┌──────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;│ Mac / iPhone / iPad │ ◀────────────────────▶ │ Cloudflare R2        │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;│ Obsidian            │     Remotely Save       │ 私有同步 Bucket      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;└────────────────────┘                          └──────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;┌────────────────────┐        git push          ┌──────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;│ Hugo 源码           │ ──────────────────────▶ │ GitHub               │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;│ Ian688/ian-blog     │                          │ main 分支            │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;└────────────────────┘                          └──────────┬───────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                                                           │ 自动构建
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                                                ┌──────────▼───────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                                                │ Cloudflare Pages      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                                                │ ian-blog-3pc.pages.dev│
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                                                └──────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;两条链路刻意分离：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;同步链路&lt;/strong&gt;只处理私有 Vault 文件；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发布链路&lt;/strong&gt;只处理明确放入 Hugo 仓库的公开文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这避免了“把整个笔记库一键发布”的隐私风险。&lt;/p&gt;
&lt;h2 id=&#34;实施要点&#34;&gt;&lt;a href=&#34;#%e5%ae%9e%e6%96%bd%e8%a6%81%e7%82%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;实施要点
&lt;/h2&gt;&lt;h3 id=&#34;1-r2-与-remotely-save&#34;&gt;&lt;a href=&#34;#1-r2-%e4%b8%8e-remotely-save&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. R2 与 Remotely Save
&lt;/h3&gt;&lt;p&gt;R2 Bucket 保持私有，并创建仅限该 Bucket、只拥有对象读写权限的 API Token。Obsidian 中使用 Remotely Save 的 S3 兼容配置连接 R2。&lt;/p&gt;
&lt;p&gt;首次同步前应完成三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对本地 Vault 做完整备份；&lt;/li&gt;
&lt;li&gt;确认远端 Bucket 是空的；&lt;/li&gt;
&lt;li&gt;只在一台设备执行首次上传。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;确认 R2 中的笔记、附件和必要的 Obsidian 配置都完整后，再让其他设备从空 Vault 接入。&lt;/p&gt;
&lt;h3 id=&#34;2-设备特定文件不参与同步&#34;&gt;&lt;a href=&#34;#2-%e8%ae%be%e5%a4%87%e7%89%b9%e5%ae%9a%e6%96%87%e4%bb%b6%e4%b8%8d%e5%8f%82%e4%b8%8e%e5%90%8c%e6%ad%a5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 设备特定文件不参与同步
&lt;/h3&gt;&lt;p&gt;不同设备的窗口布局和缓存不应覆盖彼此。同步时应排除：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;.obsidian/workspace.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;.obsidian/workspace-mobile.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;.obsidian/cache/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;.DS_Store
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;Thumbs.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但不应直接排除整个 &lt;code&gt;.obsidian/&lt;/code&gt; 目录，否则主题、插件和大部分配置也会失去同步。&lt;/p&gt;
&lt;h3 id=&#34;3-博客自动部署&#34;&gt;&lt;a href=&#34;#3-%e5%8d%9a%e5%ae%a2%e8%87%aa%e5%8a%a8%e9%83%a8%e7%bd%b2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 博客自动部署
&lt;/h3&gt;&lt;p&gt;博客源文件位于独立 Git 仓库。Cloudflare Pages 连接 GitHub 仓库后，构建设置很简单：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;Framework preset: Hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;Build command: hugo --minify
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;Build output directory: public
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;Production branch: main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每次将内容推送至 &lt;code&gt;main&lt;/code&gt;，Cloudflare Pages 会重新构建并部署；静态站不需要常驻进程、数据库或 VPS。&lt;/p&gt;
&lt;h2 id=&#34;发布原则&#34;&gt;&lt;a href=&#34;#%e5%8f%91%e5%b8%83%e5%8e%9f%e5%88%99&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;发布原则
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;私有 Vault 与公开博客物理分离；&lt;/li&gt;
&lt;li&gt;只发布经过整理、确认可公开的内容；&lt;/li&gt;
&lt;li&gt;每篇文章保留准确的标题、摘要、分类、标签和更新时间；&lt;/li&gt;
&lt;li&gt;发布前检查是否有 Token、密钥、私密链接、真实地址或未经授权的内容；&lt;/li&gt;
&lt;li&gt;不把 R2 的 Access Key、Secret、Cloudflare Token 提交到 Git 或写进笔记正文。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;成本与维护边界&#34;&gt;&lt;a href=&#34;#%e6%88%90%e6%9c%ac%e4%b8%8e%e7%bb%b4%e6%8a%a4%e8%be%b9%e7%95%8c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;成本与维护边界
&lt;/h2&gt;&lt;p&gt;这套方案没有 VPS 固定成本，但并不意味着没有维护责任：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;R2 免费额度、存储容量和请求次数需要按 Cloudflare 当前规则关注；&lt;/li&gt;
&lt;li&gt;同步不是版本控制，仍应保留本地 Vault 备份；&lt;/li&gt;
&lt;li&gt;两台设备同时编辑同一篇笔记仍可能造成冲突；&lt;/li&gt;
&lt;li&gt;iOS/iPadOS 不保证应用在后台持续同步，打开 App 后应等待同步完成，离开前再同步一次；&lt;/li&gt;
&lt;li&gt;博客发布前仍需人工筛选，自动化不能替代隐私检查。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;结果&#34;&gt;&lt;a href=&#34;#%e7%bb%93%e6%9e%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;结果
&lt;/h2&gt;&lt;p&gt;最终得到的是一套轻量而可迁移的个人基础设施：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;笔记多端同步不依赖自建服务器；&lt;/li&gt;
&lt;li&gt;博客从 Markdown 到上线只需提交 Git；&lt;/li&gt;
&lt;li&gt;Cloudflare Pages 提供 HTTPS、CDN 和自动构建；&lt;/li&gt;
&lt;li&gt;如果未来更换存储或托管平台，数据和 Hugo 源文件都可以迁移。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考&#34;&gt;&lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;参考
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/remotely-save/remotely-save&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Remotely Save&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://developers.cloudflare.com/r2/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cloudflare R2 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gohugo.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugo 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/adityatelange/hugo-PaperMod&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PaperMod&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
