R2 图片托管
商品图片由 rCommerce 服务端上传并保存在本地磁盘([media]
local_path,默认 ./uploads)。为了在全球范围快速分发,把它们
同步到按店铺划分的 Cloudflare R2 bucket,并通过 bucket 的公开
URL 提供访问。
后端:IMAGE_BASE_URL
Section titled “后端:IMAGE_BASE_URL”导入器在导入时决定写入 product_images.src 的 URL,依据是
IMAGE_BASE_URL 环境变量(WooCommerce 导入器下载图片到本地存储时
读取):
# 每个店铺都必须设置它,让图片 URL 指向 CDN 而不是 API 主机。# 没有可靠的默认值。IMAGE_BASE_URL=https://images.shop.example.com在执行任何导入或重新导入之前,把它设置到店铺的服务环境中。已导入
的图片会保留旧 URL,直到用 --overwrite 重新导入(或直接改库)。
R2 bucket
Section titled “R2 bucket”每家店铺一个 bucket(R2 → Manage R2 → Create bucket),例如
store-b-uploads。两种公开访问方式:
- 公开开发域名 —— 在 bucket 上启用 “Public URL”,会得到
https://pub-….r2.dev。适合测试。 - 自定义域名(推荐)—— 给 bucket 绑定
images.<store>.com。 在 DNS 提供商处将该主机名 CNAME 到public.r2.dev,并保持 Cloudflare 代理开启(橙色云)。
rclone 同步
Section titled “rclone 同步”rclone 使用 S3 兼容协议访问 R2。为每个店铺配置一个 remote:
[store-b-r2]type = s3provider = Cloudflareaccess_key_id = <r2_access_key_id>secret_access_key = <r2_secret_access_key>endpoint = https://<account_id>.r2.cloudflarestorage.comacl = private创建只对应该 bucket 的 API token(R2 → Manage R2 → Manage R2 API Tokens)。然后把服务端的 uploads 目录同步到 bucket:
rclone sync /var/db/store-b/uploads store-b-r2:store-b-uploads \ --transfers 8 --checkers 16 --fast-list --delete-after(具体本地路径取决于你的目录布局,例如配置在
/usr/local/etc/<store>、数据在 /var/db/<store>/uploads。)
在服务器上用 5 分钟一次的 cron 保持 bucket 新鲜:
*/5 * * * * /usr/local/bin/rclone sync /var/db/store-b/uploads store-b-r2:store-b-uploads --transfers 8 --checkers 16 --fast-list --delete-after >> /var/log/store-b/rclone-sync.log 2>&1保留 /uploads 兜底
Section titled “保留 /uploads 兜底”迁移到 R2 后不要删掉反向代理里 /uploads/* 的 file_server。旧的
图片记录仍指向 https://api.<store>.com/uploads/…,Caddy 中服务
/uploads/* 的块能保证它们继续可用。新导入的图片通过
IMAGE_BASE_URL 写入 R2 URL,兜底路径的流量会随时间越来越少。