<?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>CDN on heyaohua's Blog</title><link>https://blog.heyaohua.com/tags/cdn/</link><description>Recent content in CDN on heyaohua's Blog</description><image><title>heyaohua's Blog</title><url>https://blog.heyaohua.com/og-image.png</url><link>https://blog.heyaohua.com/og-image.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 03 Jul 2024 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.heyaohua.com/tags/cdn/index.xml" rel="self" type="application/rss+xml"/><item><title>Cloudflare R2 与 rclone 使用教程</title><link>https://blog.heyaohua.com/posts/2024/07/cloudflare-r2-rclone-guide/</link><pubDate>Wed, 03 Jul 2024 10:00:00 +0800</pubDate><guid>https://blog.heyaohua.com/posts/2024/07/cloudflare-r2-rclone-guide/</guid><description>Cloudflare R2 是 Cloudflare 提供的对象存储服务，类似于 AWS S3，但无出站流量费用，非常适合存储和分发图片、视频等静态资源。rclone 是一个命令行工具，可以用来管理云存储，包括 Cloudflare R2。本教程将指导您如何使用 rclone 配置和管理 Cl...</description><content:encoded><![CDATA[<h2 id="1-简介">1. 简介</h2>
<p>Cloudflare R2 是 Cloudflare 提供的对象存储服务，类似于 AWS S3，但无出站流量费用，非常适合存储和分发图片、视频等静态资源。rclone 是一个命令行工具，可以用来管理云存储，包括 Cloudflare R2。本教程将指导您如何使用 rclone 配置和管理 Cloudflare R2 存储。</p>
<h2 id="2-准备工作">2. 准备工作</h2>
<h3 id="21-安装-rclone">2.1 安装 rclone</h3>
<p><strong>macOS (使用 Homebrew)</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>brew install rclone
</span></span></code></pre></div><p><strong>Linux</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl https://rclone.org/install.sh | sudo bash
</span></span></code></pre></div><p><strong>Windows</strong>:</p>
<ul>
<li>下载安装程序：https://rclone.org/downloads/</li>
<li>运行安装程序并按照提示操作</li>
</ul>
<h3 id="22-获取-cloudflare-r2-凭证">2.2 获取 Cloudflare R2 凭证</h3>
<ol>
<li>登录 Cloudflare 控制台：https://dash.cloudflare.com/</li>
<li>选择「R2」服务</li>
<li>点击「管理 R2 API 令牌」或「创建 API 令牌」</li>
<li>创建新的 API 令牌，确保具有读写权限</li>
<li>记录生成的 <code>Access Key ID</code> 和 <code>Secret Access Key</code></li>
<li>记录您的 Cloudflare 账户 ID（在 Cloudflare 控制台右侧边栏可以找到）</li>
</ol>
<h2 id="3-配置-rclone">3. 配置 rclone</h2>
<h3 id="31-基本配置">3.1 基本配置</h3>
<ol>
<li>打开终端或命令提示符，运行：</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone config
</span></span></code></pre></div><ol>
<li></li>
</ol>
<p>选择 <code>n</code> 创建新的远程配置</p>
<ol start="2">
<li></li>
</ol>
<p>输入远程配置名称，例如 <code>cloudflare</code></p>
<ol start="3">
<li></li>
</ol>
<p>选择存储类型，输入 <code>s3</code> 对应的编号</p>
<ol start="4">
<li></li>
</ol>
<p>选择 S3 提供商，输入 <code>Cloudflare R2</code> 对应的编号</p>
<ol start="5">
<li></li>
</ol>
<p>输入 <code>Access Key ID</code></p>
<ol start="6">
<li></li>
</ol>
<p>输入 <code>Secret Access Key</code></p>
<ol start="7">
<li></li>
</ol>
<p>输入区域，可以直接按 Enter 使用默认值 <code>auto</code></p>
<ol start="8">
<li></li>
</ol>
<p>输入端点 URL，格式为：<code>https://&lt;ACCOUNT_ID&gt;.r2.cloudflarestorage.com</code></p>
<ol start="9">
<li></li>
</ol>
<p>将 <code>&lt;ACCOUNT_ID&gt;</code> 替换为您的 Cloudflare 账户 ID</p>
<ol start="10">
<li></li>
</ol>
<p>当询问是否要编辑高级配置时，选择 <code>y</code>（是）</p>
<h3 id="32-高级配置">3.2 高级配置</h3>
<p>在高级配置中，重点关注以下参数：</p>
<ol>
<li></li>
</ol>
<p><code>force_path_style</code>：设置为 <code>true</code>（这对 Cloudflare R2 很重要）</p>
<ol start="2">
<li></li>
</ol>
<p><code>upload_cutoff</code>：控制切换为分块上传的文件大小阈值</p>
<ol start="3">
<li>默认值为 200MiB，适用于大多数情况</li>
<li>如果主要上传小文件，可以提高到 500MiB</li>
<li></li>
</ol>
<p>如果有大文件或网络不稳定，可以降低到 50-100MiB</p>
<ol start="6">
<li></li>
</ol>
<p><code>chunk_size</code>：分块上传时的块大小，默认为 5MiB</p>
<ol start="7">
<li></li>
</ol>
<p><code>max_upload_parts</code>：分块上传的最大块数，默认为 10000</p>
<ol start="8">
<li></li>
</ol>
<p>其他参数可以保持默认值</p>
<p>完成配置后，选择 <code>y</code> 保存配置。</p>
<h2 id="4-使用-rclone-管理-r2-存储">4. 使用 rclone 管理 R2 存储</h2>
<h3 id="41-创建存储桶">4.1 创建存储桶</h3>
<p>在 Cloudflare 控制台中创建存储桶：</p>
<ol>
<li>进入 R2 服务页面</li>
<li>点击「创建存储桶」</li>
<li>输入存储桶名称，例如 <code>images</code></li>
<li>点击「创建」</li>
</ol>
<h3 id="42-基本操作命令">4.2 基本操作命令</h3>
<p><strong>列出存储桶</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone lsd cloudflare:
</span></span></code></pre></div><p><strong>列出存储桶中的文件</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone ls cloudflare:存储桶名
</span></span></code></pre></div><p><strong>上传单个文件</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone copy 本地文件路径 cloudflare:存储桶名/目标路径
</span></span></code></pre></div><p><strong>上传整个目录</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone copy 本地目录路径 cloudflare:存储桶名/目标路径
</span></span></code></pre></div><p><strong>同步目录</strong>（将删除目标中不存在于源的文件）:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone sync 本地目录路径 cloudflare:存储桶名/目标路径
</span></span></code></pre></div><p><strong>下载文件</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone copy cloudflare:存储桶名/文件路径 本地目录路径
</span></span></code></pre></div><p><strong>删除文件</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone delete cloudflare:存储桶名/文件路径
</span></span></code></pre></div><p><strong>删除目录</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone purge cloudflare:存储桶名/目录路径
</span></span></code></pre></div><h3 id="43-高级操作">4.3 高级操作</h3>
<p><strong>使用 <code>--dry-run</code> 预览操作</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone sync 本地目录路径 cloudflare:存储桶名/目标路径 --dry-run
</span></span></code></pre></div><p><strong>设置并行传输数</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone copy 本地目录路径 cloudflare:存储桶名/目标路径 --transfers=4
</span></span></code></pre></div><p><strong>显示传输进度</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone copy 本地目录路径 cloudflare:存储桶名/目标路径 -P
</span></span></code></pre></div><p><strong>设置带宽限制</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone copy 本地目录路径 cloudflare:存储桶名/目标路径 --bwlimit=10M
</span></span></code></pre></div><h2 id="5-配置-r2-公共访问与-cdn">5. 配置 R2 公共访问与 CDN</h2>
<h3 id="51-设置公共访问权限">5.1 设置公共访问权限</h3>
<ol>
<li>在 Cloudflare 控制台中，进入 R2 服务页面</li>
<li>选择您的存储桶</li>
<li>点击「设置」选项卡</li>
<li>在「公共访问」部分，选择「公开可读」</li>
</ol>
<h3 id="52-配置自定义域名">5.2 配置自定义域名</h3>
<ol>
<li>在 Cloudflare 控制台中，进入 R2 服务页面</li>
<li>选择您的存储桶</li>
<li>点击「设置」选项卡</li>
<li>在「公共访问」部分，点击「添加自定义域」</li>
<li>输入您想要使用的域名，例如 <code>images.example.com</code></li>
<li>按照提示完成 DNS 配置</li>
</ol>
<h3 id="53-在网站中使用-r2-资源">5.3 在网站中使用 R2 资源</h3>
<p>配置完成后，您可以通过以下方式在网站中引用 R2 中的资源：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>// 使用 R2 默认域名
</span></span><span style="display:flex;"><span>const imagePath = `https://&lt;ACCOUNT_ID&gt;.r2.cloudflarestorage.com/存储桶名/文件路径`;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 使用自定义域名
</span></span><span style="display:flex;"><span>const imagePath = `https://images.example.com/文件路径`;
</span></span></code></pre></div><h2 id="6-维护与最佳实践">6. 维护与最佳实践</h2>
<h3 id="61-定期同步">6.1 定期同步</h3>
<p>设置定期同步任务，确保本地和 R2 存储保持一致：</p>
<p><strong>创建定时任务 (cron job)</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span># 编辑 crontab
</span></span><span style="display:flex;"><span>crontab -e
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># 添加定时任务，每天凌晨 2 点执行同步
</span></span><span style="display:flex;"><span>0 2 * * * rclone sync /本地路径 cloudflare:存储桶名/目标路径 --log-file=/path/to/logfile.log
</span></span></code></pre></div><h3 id="62-监控与日志">6.2 监控与日志</h3>
<p>使用 <code>--log-file</code> 参数记录操作日志：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rclone sync /本地路径 cloudflare:存储桶名/目标路径 --log-file=/path/to/logfile.log
</span></span></code></pre></div><h3 id="63-修改现有配置">6.3 修改现有配置</h3>
<p>如果需要修改已有的 rclone 配置：</p>
<ol>
<li>运行 <code>rclone config</code></li>
<li>选择 <code>e</code> 编辑现有远程配置</li>
<li>选择要修改的配置名称</li>
<li>按照提示修改相应参数</li>
<li>完成后保存配置</li>
</ol>
<h2 id="7-故障排除">7. 故障排除</h2>
<h3 id="71-常见错误">7.1 常见错误</h3>
<p><strong>连接错误</strong>:</p>
<ul>
<li>检查账户 ID 是否正确</li>
<li>确认 API 密钥是否有效</li>
<li>验证网络连接是否正常</li>
</ul>
<p><strong>权限错误</strong>:</p>
<ul>
<li>确认 API 令牌具有适当的权限</li>
<li>检查存储桶访问策略</li>
</ul>
<p><strong>上传失败</strong>:</p>
<ul>
<li>尝试减小 <code>chunk_size</code> 和 <code>upload_cutoff</code> 值</li>
<li>使用 <code>-v</code> 参数查看详细日志</li>
</ul>
<h3 id="72-调试命令">7.2 调试命令</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span># 检查配置
</span></span><span style="display:flex;"><span>rclone config show cloudflare
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># 详细日志
</span></span><span style="display:flex;"><span>rclone copy 本地文件路径 cloudflare:存储桶名/目标路径 -v
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># 非常详细的日志
</span></span><span style="display:flex;"><span>rclone copy 本地文件路径 cloudflare:存储桶名/目标路径 -vv
</span></span></code></pre></div><h2 id="8-结语">8. 结语</h2>
<p>通过本教程，您已经学会了如何使用 rclone 配置和管理 Cloudflare R2 存储。R2 结合 Cloudflare 的 CDN 网络，可以为您的网站提供高性能、低成本的静态资源存储和分发解决方案，特别适合图片、视频等大文件的存储和全球分发。</p>
<hr>
<blockquote>
<p>本文档基于实际配置经验编写，适用于需要将静态资源从本地服务器迁移到 Cloudflare R2 的网站管理员和开发者。</p>
</blockquote>
]]></content:encoded></item></channel></rss>