--- title: Cloudflare R2 createTime: 2025/11/09 00:26:55 permalink: /storage/r2 --- # Cloudflare R2 配置指南 详细的 Cloudflare R2 配置步骤和最佳实践。 ## 概述 Cloudflare R2 是一个 S3 兼容的对象存储服务,具有以下优势: - 💚 存储流量完全免费 - 🌍 全球 CDN 加速 - 💰 请求费用低(每 100 万次 $0.36) - ⚡ 高性能和高可靠性 - 🔄 S3 API 完全兼容 ## 账户设置 ### 1. 创建 Cloudflare 账户 访问 [Cloudflare 官网](https://dash.cloudflare.com/sign-up) 创建免费账户。 ### 2. 激活 R2 1. 登录 Cloudflare 控制面板 2. 左侧菜单选择 "R2" 3. 点击 "开始使用 R2" 4. 阅读条款并确认 ## 创建存储桶 ### 1. 创建新桶 1. 进入 R2 → "存储桶" 2. 点击 "创建存储桶" 3. 输入存储桶名称(例如 `my-storage`) - 名称必须全局唯一 - 只能包含小写字母、数字和连字符 4. 选择区域(通常选择 "自动" APAC) 5. 点击 "创建存储桶" ### 2. 存储桶设置 进入存储桶 → "设置": - **CORS**: 启用 CORS 以支持跨域请求 - **生命周期规则**: 可选,用于自动删除过期文件 - **版本控制**: 保持禁用(不需要版本历史) ## 获取 API 凭证 ### 1. 创建 API Token 1. 进入 R2 → "API 令牌" 2. 点击 "创建 API 令牌" 3. 选择 "Edit" 权限(允许读写) 4. 配置 TTL(可选,默认无限期) 5. 复制 **Token ID** 和 **Token Secret** 6. 点击 "创建 API 令牌" **权限说明:** - **读取**: 仅允许列表和下载 - **编辑**: 允许读、写和删除(推荐) - **删除**: 包含删除和管理员操作 ### 2. 记录账户 ID 在 R2 仪表盘的任何存储桶页面可以看到 **Account ID**(例如 `a1b2c3d4e5f6g7h8i`) 保存以下信息: ```env ACCESS_KEY_ID = your_token_id SECRET_ACCESS_KEY = your_token_secret R2_ACCOUNT_ID = your_account_id R2_BUCKET_NAME = your-bucket-name ``` ## 配置环境变量 编辑 `.env` 文件: ```env # 存储类型 STORAGE_TYPE=r2 # API 凭证 ACCESS_KEY_ID=your_token_id SECRET_ACCESS_KEY=your_token_secret # R2 配置 R2_ENDPOINT_URL=https://your_account_id.r2.cloudflarestorage.com R2_BUCKET_NAME=your-bucket-name R2_REGION=auto # 可选:公开访问配置 R2_PUBLIC_URL=https://pub-your-bucket-name.r2.dev # 可选:预签名 URL 过期时间(秒,默认 3600) R2_PRESIGN_EXPIRES=3600 ``` ## 配置公开访问(可选) 若要生成可分享的公开链接,需要配置公开 URL。 ### 1. 启用公开访问 1. 进入存储桶 → "设置" 2. 找到 "Public access" 部分 3. 点击 "Allow public access" ### 2. 配置自定义域(推荐) #### 方式 A:使用 R2 默认 URL ```env R2_PUBLIC_URL=https://pub-your-bucket-name.r2.dev ``` #### 方式 B:使用自定义域 1. 进入存储桶 → "设置" → "Custom domains" 2. 点击 "Connect domain" 3. 输入你的域名(例如 `assets.example.com`) 4. 在域名 DNS 设置中添加 CNAME 记录: ``` assets.example.com CNAME your-bucket-name.r2.dev ``` 5. 点击 "Continue" 配置环境变量: ```env R2_PUBLIC_URL=https://assets.example.com ``` ## 与 CDN 集成 ### 方式 A:Cloudflare CDN(推荐) R2 已与 Cloudflare CDN 整合: 1. 进入存储桶设置 2. CDN 部分会自动显示 CDN 可用性 3. 公开访问的文件会自动通过 CDN 加速 ### 方式 B:其他 CDN 供应商 若使用其他 CDN(如 Akamai、AWS CloudFront): 1. 配置 CDN 源指向 R2 2. CDN 会自动缓存文件 3. 在应用中使用 CDN URL ```env # 使用 CDN 加速 R2_PUBLIC_URL=https://your-cdn-url.com ``` ## 测试连接 ### 方式一:启动应用测试 ```bash python app.py ``` 访问 `http://localhost:5000`,查看是否能正常显示文件列表。 ### 方式二:使用 CLI 测试 ```bash # 安装 aws cli pip install awscli # 配置凭证 aws configure --profile r2 # 输入以下信息: # AWS Access Key ID: your_token_id # AWS Secret Access Key: your_token_secret # Default region: auto # 测试连接 aws s3 ls s3://your-bucket-name --profile r2 --endpoint-url https://your_account_id.r2.cloudflarestorage.com ``` ### 方式三:Python 测试 ```python import boto3 s3 = boto3.client( 's3', endpoint_url='https://your_account_id.r2.cloudflarestorage.com', aws_access_key_id='your_token_id', aws_secret_access_key='your_token_secret', region_name='auto' ) # 列出所有对象 response = s3.list_objects_v2(Bucket='your-bucket-name') for obj in response.get('Contents', []): print(obj['Key']) ``` ## 常见配置 ### 启用 CORS 如果需要从浏览器直接上传文件到 R2: 1. 进入存储桶 → "设置" 2. 找到 CORS 部分 3. 添加以下规则: ```json [ { "AllowedOrigins": ["*"], "AllowedMethods": ["GET", "HEAD", "PUT", "POST", "DELETE"], "AllowedHeaders": ["*"], "ExposeHeaders": ["ETag"] } ] ``` ### 生命周期规则(可选) 自动删除旧文件以节省成本: 1. 进入存储桶 → "设置" → "生命周期规则" 2. 点击 "添加规则" 3. 配置规则: - **前缀**: 可选(如 `cache/`) - **在上传后删除**: 指定天数(如 30 天) 4. 点击 "添加" ## 监控和管理 ### 查看使用情况 1. 进入 R2 仪表盘 2. 查看 "存储使用" 和 "请求统计" 3. 可以看到: - 存储桶大小(GB) - 月度请求数 - 估计费用 ### 管理文件 通过 Cloudflare 控制面板: 1. 进入存储桶 → "对象" 2. 可以: - 📁 浏览文件夹 - 📥 上传文件 - 📤 下载文件 - 🗑️ 删除文件 - 📋 查看详情 也可以通过 Cloud Index 应用管理: 访问应用 UI 进行所有文件操作。 ## 最佳实践 ### 1. 安全性 - ✅ 使用编辑权限 Token(最小权限原则) - ✅ 定期轮换凭证 - ✅ 不要在版本控制中提交凭证 - ✅ 使用 `.env` 文件管理凭证 ### 2. 性能优化 - ✅ 启用 R2 CDN 加速 - ✅ 设置合理的缓存 TTL - ✅ 定期清理过期文件 - ✅ 使用生命周期规则自动清理 ### 3. 成本控制 - ✅ 设置存储使用警告 - ✅ 定期检查费用 - ✅ 删除不需要的文件 - ✅ 使用生命周期规则 ### 4. 监控 - ✅ 定期检查使用统计 - ✅ 设置告警 - ✅ 记录访问日志 - ✅ 备份重要数据 ## 常见问题 ### Q: 如何获取文件的公开 URL? **A:** 在 Cloud Index 应用中: 1. 点击文件菜单 2. 选择 "复制链接" 3. 分享链接 ### Q: 如何上传大文件? **A:** R2 支持多部分上传(通过应用自动处理): - 单个文件最大 5GB - 应用会自动分块上传 ### Q: 费用会很高吗? **A:** R2 价格极低: - 存储:每月每 GB $0.015 - 请求:每 100 万次 $0.36 - 流量:完全免费 ✅ 典型用户月费 < $1 ### Q: 可以删除 API Token 吗? **A:** 可以,但需要谨慎: 1. 进入 R2 → "API 令牌" 2. 找到 Token 点击删除 3. 需要配置新 Token 后才能继续使用应用 ## 故障排除 ### 连接失败 检查: 1. 凭证是否正确 2. 端点 URL 是否正确(包含 Account ID) 3. 存储桶名称是否正确 4. 网络连接是否正常 ### 上传失败 检查: 1. Token 权限是否为 "编辑" 或更高 2. 存储桶是否存在 3. 文件名是否有效 4. 磁盘空间是否充足 ### 文件无法访问 检查: 1. 是否启用了公开访问 2. R2_PUBLIC_URL 配置是否正确 3. CDN 是否正常工作 4. 文件权限设置 ## 成本示例 假设月均使用情况: | 指标 | 数值 | 费用 | |-----|------|------| | 存储 | 10GB | $0.15 | | 请求 | 100K | $0.036 | | 流量 | 1TB | $0 | | **总计** | - | **$0.186** | 极低成本!✅ ## 获取帮助 - 📖 [Cloudflare R2 官方文档](https://developers.cloudflare.com/r2/) - 🐛 [提交 Issue](https://github.com/RhenCloud/Cloud-Index/issues) - 💬 [讨论区](https://github.com/RhenCloud/Cloud-Index/discussions) ## 下一步 - 🚀 [快速开始](../guide/quickstart.md) - 开始使用应用 - 📖 [其他存储后端](./overview.md) - 对比其他服务 - 💾 [S3 配置](./s3.md) - AWS S3 配置