0%

使用 Cloudflare R2 部署 Hexo 博客

前言

Cloudflare R2 提供兼容 S3 的对象存储服务,零出口流量费用。本文介绍使用 R2 + Docker + rclone 部署 Hexo 博客。

创建 R2 存储桶

在 Cloudflare 控制台操作:

  1. 进入 R2 服务页面,点击「创建存储桶」
  2. 设置存储桶名称(如 blog
  3. 记录 Access Key ID、Secret Access Key 和 Endpoint URL

配置 rclone 自动上传

创建 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
services:
s3-upload:
image: rclone/rclone:latest
container_name: blog-s3-uploader
volumes:
- ./public:/data:ro
environment:
RCLONE_CONFIG_S3_TYPE: s3
RCLONE_CONFIG_S3_PROVIDER: AWS
RCLONE_CONFIG_S3_ENV_AUTH: false
RCLONE_CONFIG_S3_ACCESS_KEY_ID: your_access_key_id_here
RCLONE_CONFIG_S3_SECRET_ACCESS_KEY: your_secret_access_key_here
RCLONE_CONFIG_S3_ENDPOINT: https://your_account_id.r2.cloudflarestorage.com
command: >
sync /data s3:blog/
--progress
--transfers=10
--checkers=20
--fast-list
--exclude .DS_Store
--exclude .git/**
--exclude node_modules/**
restart: 'no'
network_mode: bridge

关键配置:

  • 替换 ACCESS_KEY_IDSECRET_ACCESS_KEYENDPOINT 为实际值
  • --transfers=10--checkers=20 加快同步速度
  • --exclude 排除不必要的文件

配置部署命令

修改 package.json

1
2
3
4
5
{
"scripts": {
"deploy": "npm run clean && npm run build && docker-compose up"
}
}

执行 npm run deploy 即可完成清理、构建、上传

配置自定义域名

在 R2 存储桶设置中,选择「自定义域」,添加域名并完成 DNS 配置。

配置 URL 重写规则

让目录访问(如 /about/)自动加载 index.html

在 Cloudflare 控制台「规则」→「概述」→「创建规则」→「URL 重写规则」中:

自定义筛选表达式:

  • 「URI 路径」→「结尾为」→ /
  • AND
  • 「主机名」→「等于」→ blog.mrabit.com

重写到:

  • 「Dynamic」→ concat(http.request.uri.path, "index.html")

实现访问 /about/ 时自动重写为 /about/index.html

部署

完成配置后,每次部署执行:

1
npm run deploy

总结

使用 Cloudflare R2 部署 Hexo 的优势:

  • 零出口流量费用
  • 全球 CDN 加速
  • Docker + rclone 实现自动化部署
  • Cloudflare 基础设施保障高可用性

参考资料