{
    "fName": "教程",
    "fIndex": [
        {
            "id": 0,
            "name": "绿虎论坛"
        },
        {
            "id": 139,
            "name": "电脑",
            "parent_id": 0,
            "notopic": 1
        },
        {
            "id": 122,
            "name": "教程",
            "parent_id": 139,
            "notopic": 0
        }
    ],
    "tMeta": {
        "title": "Cloudflare 上手动部署Obsidian网页版完整教程 (保姆级)",
        "read_count": 1424,
        "uid": 22230,
        "ctime": 1787512242,
        "mtime": 1788023213,
        "essence": 0,
        "locked": 0,
        "review": 0,
        "level": 0,
        "access": 0
    },
    "floorCount": 8,
    "currPage": 1,
    "maxPage": 1,
    "isLogin": null,
    "blockedReply": 0,
    "floorReverse": false,
    "canReply": false,
    "canLockReply": false,
    "canSink": false,
    "canSetEssence": false,
    "canMove": false,
    "tContents": [
        {
            "uid": 22230,
            "ctime": 1787512242,
            "mtime": 1787561570,
            "content": "<!-- markdown -->\n> **特点**：**全程在浏览器网页中点击鼠标操作**，无需安装 Node.js/Wrangler 命令行，无需终端配置，100% 免费利用 Cloudflare 官方额度（Workers + R2 + KV）搭建个人云端 Obsidian Web。\n\n---\n\n## 📌 部署前准备文件清单\n\n**在进行网页操作前，确认本地 `` 目录已包含以下文件：**\n\n1. **Worker 单文件代码**：[**`dist/index.js`**](dist/index.js)（已编译打包好，约 100KB）\n2. **前端静态资源文件夹**：[**`assets/`**](assets/)（包含 `obsidian/`、`ui/`、`shim/`、`server/`）\n\n下载地址：[obsidian-works_v1.1.zip - 蓝奏云](https://hik.lanzouq.com/inQqQ44c6iuf)\n\n---\n\n## 🚀 第一阶段：创建免费存储组件 (R2 与 KV)\n\n### 步骤 1：创建 R2 存储桶 (存放笔记数据与前端静态资源)\n\n1. **浏览器打开 **[Cloudflare 官方控制台](https://dash.cloudflare.com/) 并登录；\n2. **在左侧菜单栏展开 ****「存储和数据库 (Storage & Databases)」** -> 点击 **「R2 对象存储 (R2 Object Storage)」**；\n3. **点击页面右上角的 ****「创建存储桶 (Create bucket)」** 按钮；\n4. **填写配置：**\n   * **存储桶名称 (Bucket name)**：输入 `obsidian-vault`\n   * **位置提示 (Location Hint)**：选择 `自动 (Automatic)` 或 `亚太地区 (APAC)`\n5. **点击 ****「创建存储桶 (Create bucket)」** 完成。\n\n---\n\n### 步骤 2：在 R2 存储桶中上传前端静态资源\n\n1. **在刚刚创建好的 **`obsidian-vault` 存储桶管理页面中，点击右上角的 **「上传 (Upload)」** 按钮下拉菜单；\n2. **选择 ****「上传文件夹 (Upload folder)」**；\n3. **在本地文件选择器中，定位并选中整个 **`assets` 文件夹：**\n   **👉 路径：`存放路径\\assets`\n4. **确认上传。上传完成后，存储桶中应包含 **`assets/obsidian/...`、`assets/ui/...`、`assets/shim/...` 等资源。\n\n---\n\n### 步骤 3：创建 KV 命名空间 (存放会话与配置)\n\n1. **在左侧菜单栏 ****「存储和数据库」** 下，点击 **「KV」**；\n2. **点击右上角 ****「创建命名空间 (Create namespace)」**；\n3. **命名空间名称 (Namespace Name)** 输入：`IGNIS_KV`；\n4. **点击 ****「添加 (Add)」** 完成创建。\n\n---\n\n## ⚡ 第二阶段：创建并部署 Cloudflare Worker\n\n### 步骤 4：创建 Worker 应用程序\n\n1. **在左侧主菜单栏点击 ****「Workers 和 Pages」** -> 点击 **「概述 (Overview)」**；\n2. **点击右上角的 ****「创建应用程序 (Create Application)」** 按钮；\n3. **确保选中的是 ****「Workers」** 标签页；\n4. **点击 ****「创建 Worker (Create Worker)」**；\n5. **给 Worker 命名（例如默认的 **`obsidian-web` 或自定义名称）；\n6. **点击右下角 ****「部署 (Deploy)」**（此时会先生成一个默认的 Hello World Worker）。\n\n---\n\n### 步骤 5：在线粘贴核心代码\n\n1. **部署成功提示页中，点击 ****「编辑代码 (Edit code)」** 进入 Cloudflare 网页在线代码编辑器；\n2. **打开本地文件：**[**`/dist/index.js`**](typora://app/dist/index.js)；\n3. **使用快捷键 ****Ctrl + A**（全选）然后 **Ctrl + C**（复制）里面的全部代码；\n4. **切换到 Cloudflare 网页编辑器，清空编辑器中原有的默认代码，按 ****Ctrl + V** 粘贴刚才复制的代码；\n5. **点击页面右上角的 ****「部署 (Deploy)」** 按钮保存。\n\n---\n\n## 🔗 第三阶段：配置存储绑定与管理员密码\n\n### 步骤 6：进入 Worker 设置页面\n\n**点击网页编辑器左上角的 ****「← 返回 (Worker 名称)」**，回到 Worker 的管理主面板，然后点击上方导航栏的 **「绑定」** 标签页。\n\n---\n\n### 步骤 7：绑定 R2 存储桶\n\n1. **在 ****绑定** 页面点击「添加绑定+」按钮，然后选择「R2 存储桶绑定」；\n2. **点击弹窗页面中的 ****「添加绑定」**：\n   * **变量名称 (Variable name)** 必须严格填写：`VAULT_BUCKET`\n   * **R2 存储桶 (R2 bucket)** 下拉选择：`obsidian-vault`\n3. **点击 ****「保存并部署 (Save and deploy)」**。\n\n---\n\n### 步骤 8：绑定 KV 命名空间\n\n1. **在 ****绑定** 页面点击「添加绑定+」按钮，然后选择「KV 命名空间绑定」；\n2. **点击 ****「添加绑定 (Add binding)」**：\n   * **变量名称 (Variable name)** 必须严格填写：`IGNIS_KV`\n   * **KV 命名空间 (KV namespace)** 下拉选择：`IGNIS_KV`\n3. **点击 ****「保存并部署 (Save and deploy)」**。\n\n---\n\n### 步骤 9：配置管理员密码与环境变量\n\n1. **向下滚动找到 ****「环境变量 (Environment Variables)」**；\n2. **点击 ****「添加变量 (Add variable)」**，依次添加以下三组配置：\n\n\n   | **变量名称 (Variable name)** | **值 (Value)**                      | **是否加密 (Encrypt)** | **说明**               |\n   | ---------------------------- | ----------------------------------- | ---------------------- | ---------------------- |\n   | `DEFAULT_VAULT_ID`           | `default`                           | **否**                 | **默认仓库 ID**        |\n   | `DEFAULT_VAULT_NAME`         | `我的知识库`                        | **否**                 | **默认仓库展示名称**   |\n   | `ADMIN_PASSWORD`             | `您的管理员密码`(例如Obsidian@2026) | **点击右侧加密小锁**   | **登录后台的访问密码** |\n3. **点击 ****「保存并部署 (Save and deploy)」**。\n\n---\n\n## 🎉 第四阶段：访问与使用\n\n1. **点击回到 Worker 的主页；**\n2. **找到系统为您生成的专属域名（格式为 **`https://obsidian-web.您的子域.workers.dev`）；\n3. **在浏览器中打开该网址，系统将自动展示登录页面：**\n   * **默认用户名**：`admin`\n   * **密码**：刚才在环境变量 `ADMIN_PASSWORD` 中设置的密码\n4. **登录成功后即可秒级进入 Obsidian 网页版，开始畅快记录笔记！所有笔记将实时持久化存储在您的 Cloudflare R2 中。**\n\n---\n\n## 💡 进阶：绑定自己的独立域名 (可选)\n\n**如果您在 Cloudflare 上托管了自己的域名（例如 **`yourdomain.com`）：\n\n1. **在 Worker 的 ****设置 (Settings)** -> **域和路由 (Domains & Routes)**；\n2. **点击 ****「添加 (Add)」** -> **「自定义域 (Custom Domain)」**；\n3. **输入二级域名（例如 **`notes.yourdomain.com`），点击添加；\n4. **Cloudflare 会自动配置 DNS 并签发全球免费 SSL 证书。**\n",
            "floor": 0,
            "id": 845741,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787512242,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787512337,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787512721,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787512811,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787527080,
                    "uid": 22516,
                    "stat": 0
                },
                {
                    "time": 1787561497,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787561570,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787566998,
                    "uid": 22516,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "hik"
            },
            "canEdit": false,
            "canDel": false,
            "canSink": false,
            "canSetEssence": false,
            "canMove": false,
            "canLockReply": false
        },
        {
            "uid": 1604,
            "ctime": 1787536308,
            "mtime": 1787645453,
            "content": "<!-- markdown -->\n现在一般部署运维这些我都装个 cli 让 AI 去自己弄了 {勉强}\n\n《图片：https://file.hu60.cn/file/hash/png/a8a93a577530947e667f9b3a7d9623c8331906.png，image.png（324.13 KB）》",
            "floor": 1,
            "id": 845742,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787536308,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787645454,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787705768,
                    "uid": 1,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "水木易安"
            },
            "canEdit": false,
            "canDel": false
        },
        {
            "uid": 22230,
            "ctime": 1787545183,
            "mtime": 1787545183,
            "content": "<!-- markdown -->\n@水木易安，是的，应该用ai也可以，这个可以命令行部署，只是没网页端直观，点点也行，就是操作步骤比较多\n",
            "floor": 2,
            "id": 845746,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787545183,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787705772,
                    "uid": 1,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "hik"
            },
            "canEdit": false,
            "canDel": false
        },
        {
            "uid": 22230,
            "ctime": 1787562416,
            "mtime": 1787566560,
            "content": "<!-- markdown -->\nv1.1版改了些bug，加了命令行教程，没工具网页慢慢设置也可以，基本可以用了\n\n由于obsidian插件可以用cf的r2存储桶做s3同步服务，而obsidian网页版是直接读取r2存储桶内容的，都不用同步，闭环了{回头看}\n\n就是还剩下一个问题，r2存储桶里文件都是公网开放访问的，存在一定泄露的风险，不过个人记笔记，不记隐私数据就行。\n\n如果怕有人用穷举法猜笔记路径也可以新建个随机字符的库就行，然后把笔记存随机字符的库里，大大增加笔记路径被猜测到的难度。\n\n可能还有点bug，欢迎留言\n",
            "floor": 3,
            "id": 845748,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787562417,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787562823,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787566560,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787567001,
                    "uid": 22516,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "hik"
            },
            "canEdit": false,
            "canDel": false
        },
        {
            "uid": 22516,
            "ctime": 1787566992,
            "mtime": 1787566992,
            "content": "@hik，这个Obsidian感觉有点臃肿",
            "floor": 4,
            "id": 845749,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787566992,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787566995,
                    "uid": 22516,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "上善若水"
            },
            "canEdit": false,
            "canDel": false
        },
        {
            "uid": 22230,
            "ctime": 1787568561,
            "mtime": 1787568561,
            "content": "<!-- markdown -->\n@上善若水，确实有点，本身ob功能插件体系就比较复杂。网页版由于把Electron转网页，每次打开下载资源也比较多，臃肿点，但是用户较多\n",
            "floor": 5,
            "id": 845751,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787568561,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1787622244,
                    "uid": 22282,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "hik"
            },
            "canEdit": false,
            "canDel": false
        },
        {
            "uid": 1,
            "ctime": 1787705822,
            "mtime": 1787705822,
            "content": "<!-- markdown -->\n@水木易安，教程还是有用的，比如可以对AI说：参考 https://hu60.cn/q.php/bbs.topic.107522.json?_content=ubb 进行部署",
            "floor": 6,
            "id": 845759,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1787705822,
                    "uid": -100,
                    "stat": 4
                },
                {
                    "time": 1787705824,
                    "uid": 1,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "老虎会游泳"
            },
            "canEdit": false,
            "canDel": false
        },
        {
            "uid": 1604,
            "ctime": 1788023213,
            "mtime": 1788023213,
            "content": "<!-- markdown -->\n@老虎会游泳，哦，那现在的教程其实是给 AI 看的了，不算教程，算文档{冷}",
            "floor": 7,
            "id": 845785,
            "topic_id": 107522,
            "review": 0,
            "review_log": [
                {
                    "time": 1788023213,
                    "uid": -100,
                    "stat": 6
                },
                {
                    "time": 1788072187,
                    "uid": 1,
                    "stat": 0
                }
            ],
            "locked": 0,
            "flags": 0,
            "uinfo": {
                "name": "水木易安"
            },
            "canEdit": false,
            "canDel": false
        }
    ]
}
