<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on 斌的博客</title>
    <link>/posts/</link>
    <description>Recent content in Posts on 斌的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 17 Jun 2024 00:00:00 +0000</lastBuildDate>
    <atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hello World</title>
      <link>/posts/hello-world/</link>
      <pubDate>Mon, 17 Jun 2024 00:00:00 +0000</pubDate>
      <guid>/posts/hello-world/</guid>
      <description>&lt;p&gt;欢迎来到我的博客！这是我的第一篇文章。更新一下触发构建1122&lt;/p&gt;</description>
    </item>
    <item>
      <title>我的 Cloudflare 全家桶搭建全记录</title>
      <link>/posts/%E6%88%91%E7%9A%84cloudflare%E5%85%A8%E5%AE%B6%E6%A1%B6%E6%90%AD%E5%BB%BA%E5%85%A8%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Mon, 17 Jun 2024 00:00:00 +0000</pubDate>
      <guid>/posts/%E6%88%91%E7%9A%84cloudflare%E5%85%A8%E5%AE%B6%E6%A1%B6%E6%90%AD%E5%BB%BA%E5%85%A8%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;从零开始搭建个人主页、博客、网盘的完整历程与技术选型分析
2026年6月&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一最终架构总览&#34;&gt;一、最终架构总览&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;用户访问
    │
    ▼
Cloudflare DNS（域名解析 7988798.xyz）
    │
    ├── 7988798.xyz → Cloudflare Pages（主页源码）
    │                     ↓
    │               Caddy反代（腾讯云国内服务器）
    │
    ├── blog.7988798.xyz → Cloudflare Pages（博客源码）
    │                        ↓
    │                  Caddy反代（腾讯云国内服务器）
    │
    ├── drive.7988798.xyz → Cloudflare Pages Functions + R2（网盘）
    │                        ↓
    │                  Caddy反代（腾讯云国内服务器）
    │
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;二完整搭建步骤&#34;&gt;二、完整搭建步骤&lt;/h2&gt;
&lt;h3 id=&#34;1-注册与基础设施&#34;&gt;1. 注册与基础设施&lt;/h3&gt;
&lt;h4 id=&#34;注册-cloudflare&#34;&gt;注册 Cloudflare&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;访问 &lt;a href=&#34;https://dash.cloudflare.com&#34;&gt;https://dash.cloudflare.com&lt;/a&gt; 注册账号&lt;/li&gt;
&lt;li&gt;添加域名 &lt;code&gt;7988798.xyz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改域名的 NS 记录指向 Cloudflare 分配的 DNS 服务器&lt;/li&gt;
&lt;li&gt;等待 DNS 生效（通常几分钟到几小时）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;注册-github&#34;&gt;注册 GitHub&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;访问 &lt;a href=&#34;https://github.com&#34;&gt;https://github.com&lt;/a&gt; 注册账号（用户名: jingbeihai）&lt;/li&gt;
&lt;li&gt;创建 Personal Access Token（用于代码推送）
&lt;ul&gt;
&lt;li&gt;路径: Settings → Developer settings → Personal access tokens → Fine-grained tokens&lt;/li&gt;
&lt;li&gt;权限: Contents (Read and Write)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;开通-cloudflare-r2&#34;&gt;开通 Cloudflare R2&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Cloudflare Dashboard → R2 → 创建存储桶&lt;/li&gt;
&lt;li&gt;创建 API 令牌（Access Key + Secret Key）&lt;/li&gt;
&lt;li&gt;配置 CORS 策略允许跨域访问&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;购买腾讯云服务器解决国内访问问题&#34;&gt;购买腾讯云服务器（解决国内访问问题）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;腾讯云 38元/年 轻量服务器（新用户秒杀价）&lt;/li&gt;
&lt;li&gt;系统: Ubuntu&lt;/li&gt;
&lt;li&gt;安装 1Panel 面板&lt;/li&gt;
&lt;li&gt;安装 Caddy Docker（用于反向代理）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;2-个人主页搭建&#34;&gt;2. 个人主页搭建&lt;/h3&gt;
&lt;h4 id=&#34;github-仓库&#34;&gt;GitHub 仓库&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;仓库名: &lt;code&gt;jingbeihai/homepage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文件: &lt;code&gt;index.html&lt;/code&gt;（纯静态页面）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;cloudflare-pages-部署&#34;&gt;Cloudflare Pages 部署&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Workers &amp;amp; Pages → 创建 → Pages → 连接到 Git&lt;/li&gt;
&lt;li&gt;选择 &lt;code&gt;jingbeihai/homepage&lt;/code&gt; 仓库&lt;/li&gt;
&lt;li&gt;构建设置: 框架预设 = &amp;ldquo;无&amp;rdquo;，输出目录 = &lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;绑定自定义域名 &lt;code&gt;7988798.xyz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;3-博客搭建&#34;&gt;3. 博客搭建&lt;/h3&gt;
&lt;h4 id=&#34;github-仓库-1&#34;&gt;GitHub 仓库&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;仓库名: &lt;code&gt;jingbeihai/myblog&lt;/code&gt;（假设）&lt;/li&gt;
&lt;li&gt;静态博客框架或纯 HTML&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;cloudflare-pages-部署-1&#34;&gt;Cloudflare Pages 部署&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;同样连接 Git 部署&lt;/li&gt;
&lt;li&gt;绑定自定义域名 &lt;code&gt;blog.7988798.xyz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;4-网盘搭建最终方案cloudflare-r2-oss&#34;&gt;4. 网盘搭建（最终方案：Cloudflare-R2-oss）&lt;/h3&gt;
&lt;h4 id=&#34;github-仓库-2&#34;&gt;GitHub 仓库&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;仓库名: &lt;code&gt;jingbeihai/Cloudflare-R2-oss&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;来源: Fork 自 &lt;code&gt;ljxi/Cloudflare-R2-oss&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;包含: 前端页面 + Pages Functions（Worker API）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;cloudflare-pages-部署-2&#34;&gt;Cloudflare Pages 部署&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;连接 Git 仓库&lt;/li&gt;
&lt;li&gt;设置环境变量:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PUBURL&lt;/code&gt; = R2 存储桶公共 URL&lt;/li&gt;
&lt;li&gt;&lt;code&gt;admin:密码&lt;/code&gt; = &lt;code&gt;*&lt;/code&gt;（管理员权限）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;绑定 R2 存储桶（变量名: &lt;code&gt;BUCKET&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;修复 &lt;code&gt;@/&lt;/code&gt; 路径别名问题（改成相对路径）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;worker-api-功能由-pages-functions-提供&#34;&gt;Worker API 功能（由 Pages Functions 提供）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/children/&lt;/code&gt; → 列出文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUT /api/write/items/*&lt;/code&gt; → 上传/复制文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DELETE /api/write/items/*&lt;/code&gt; → 删除文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /raw/*&lt;/code&gt; → 下载文件&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;5-caddy-反向代理解决国内访问慢&#34;&gt;5. Caddy 反向代理（解决国内访问慢）&lt;/h3&gt;
&lt;h4 id=&#34;安装-caddy&#34;&gt;安装 Caddy&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;通过 1Panel 应用商店安装 Caddy Docker&lt;/li&gt;
&lt;li&gt;配置文件路径: &lt;code&gt;/opt/1panel/apps/caddy/caddy/data/config.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;配置内容&#34;&gt;配置内容&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;apps&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;srv0&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;listen&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:80&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;routes&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handle&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;subroute&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;routes&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handle&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;reverse_proxy&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;upstreams&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dial&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cloudflare-r2-oss-3ap.pages.dev:443&amp;#34;&lt;/span&gt;}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  }],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;match&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;host&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;drive.7988798.xyz&amp;#34;&lt;/span&gt;]}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              }]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handle&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;subroute&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;routes&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handle&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;reverse_proxy&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;upstreams&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dial&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;homepage-6wv.pages.dev:443&amp;#34;&lt;/span&gt;}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  }],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;match&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;host&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;7988798.xyz&amp;#34;&lt;/span&gt;]}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              }]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handle&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;subroute&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;routes&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handle&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;reverse_proxy&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;upstreams&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dial&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;myblog-eev.pages.dev:443&amp;#34;&lt;/span&gt;}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  }],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;match&amp;#34;&lt;/span&gt;: [{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;host&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blog.7988798.xyz&amp;#34;&lt;/span&gt;]}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              }]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;三各方案优缺点分析&#34;&gt;三、各方案优缺点分析&lt;/h2&gt;
&lt;h3 id=&#34;方案对比网盘前端&#34;&gt;方案对比：网盘前端&lt;/h3&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;strong&gt;方案A：自写 Worker + 简陋前端&lt;/strong&gt;（最初的）&lt;/td&gt;
          &lt;td&gt;简单直接，代码少&lt;/td&gt;
          &lt;td&gt;界面丑、不支持中文文件名、没有文件夹&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;方案B：R2 Web&lt;/strong&gt;（r2.viki.moe）&lt;/td&gt;
          &lt;td&gt;界面现代美观，支持中文/深色模式，PWA，文件预览功能强&lt;/td&gt;
          &lt;td&gt;纯前端直连 R2，凭证存浏览器，分享给别人要填凭证，无法外部分享，限制 300MB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;方案C：Cloudflare-R2-oss&lt;/strong&gt;（最终采用）&lt;/td&gt;
          &lt;td&gt;有 Worker 后端，有用户认证，支持分享链接，可直接在线预览，创建文件夹、重命名、移动都有&lt;/td&gt;
          &lt;td&gt;初始界面略丑（已美化），部署需要配置环境变量&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;方案D：R2-Explorer&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Google Drive 风格，分享链接带密码/过期时间，功能最强&lt;/td&gt;
          &lt;td&gt;界面老气，不支持中文，部署复杂&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;方案E：FlareDrive-666&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;中文界面，多用户权限，部署简单&lt;/td&gt;
          &lt;td&gt;项目 &lt;code&gt;@/&lt;/code&gt; 路径别名问题导致部署失败，环境变量配置繁琐&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;方案对比国内加速&#34;&gt;方案对比：国内加速&lt;/h3&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;strong&gt;直连 Cloudflare Pages&lt;/strong&gt;（初始）&lt;/td&gt;
          &lt;td&gt;零成本，无需服务器&lt;/td&gt;
          &lt;td&gt;国内被墙/限速，必须 VPN&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Cloudflare 中国网络&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;官方合作节点，速度快&lt;/td&gt;
          &lt;td&gt;$200+/月，需要 ICP 备案，个人承受不起&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;国内 CDN 反代&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;速度快&lt;/td&gt;
          &lt;td&gt;需要额外配置，域名需要备案&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Nginx 反向代理&lt;/strong&gt;（尝试过）&lt;/td&gt;
          &lt;td&gt;稳定成熟&lt;/td&gt;
          &lt;td&gt;配置 HTTPS 麻烦，端口冲突处理繁琐&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Caddy 反向代理&lt;/strong&gt;（最终采用）&lt;/td&gt;
          &lt;td&gt;配置极简（JSON 几行），自动 HTTPS，Docker 一键部署&lt;/td&gt;
          &lt;td&gt;不如 Nginx 生态丰富，但够用&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四为什么最终选择-cloudflare-全家桶--caddy&#34;&gt;四、为什么最终选择 Cloudflare 全家桶 + Caddy&lt;/h2&gt;
&lt;h3 id=&#34;选择-cloudflare-的原因&#34;&gt;选择 Cloudflare 的原因&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&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;strong&gt;完全免费&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Pages、R2（10GB）、Workers、DNS 都免费&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;无需服务器维护&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;博客和网盘的前端托管在 Pages，不用操心操作系统&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;全球 CDN&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;海外访问速度极快（虽然国内需要额外处理）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;全家桶整合&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;DNS + 托管 + 存储 + 隧道在一个平台管理&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;R2 免流量费&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;只收存储费，不收入站/出站流量，网盘最合适&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Pages Functions&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;前端和后端（Worker）在同一个项目里，部署简单&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;选择-caddy-的原因&#34;&gt;选择 Caddy 的原因&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&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;strong&gt;解决国内访问&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Cloudflare Pages 源站在海外，国内需要国内服务器中转&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;配置极简&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;三条 &lt;code&gt;reverse_proxy&lt;/code&gt; 规则搞定主页+博客+网盘，不用写几十行 Nginx 配置&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;自动 HTTPS&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Caddy 自动申请和续期 SSL 证书&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Docker 部署&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;1Panel 应用商店一键安装，不污染宿主机&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;正好有腾讯云服务器&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;38元/年，低成本解决国内访问问题&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;为什么不选传统方案&#34;&gt;为什么不选传统方案&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&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;strong&gt;阿里云/腾讯云直接建站&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;要备案、要维护服务器、要配置数据库，比 Pages 麻烦&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Oracle Cloud 免费服务器&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;注册风控极严，反复失败，账号不稳定&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Azure 免费层&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;1核1G 配置太低，跑不动应用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;仅用 Cloudflare 直连&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;国内访问需要 VPN&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;仅用腾讯云服务器&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;续费贵（200元/年），且相比 Pages 需要更多运维工作&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五最终结论&#34;&gt;五、最终结论&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare 全家桶 + 腾讯云服务器做 Caddy 反代&lt;/strong&gt; 是目前的最优解：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
