Migrate data from MinIO to Cloudflare r2
Moving existing s3 compatible bucket data to Cloudflare R2
Clouflare R2 is s3 compatible object storage with zero egress fee, the goal is removing workload from self hosted minio for storing static and media file for this site to Cloudflare.
# first do backup on current minio bucket
$ mc alias set source https://storage.saktidwicahyono.name keyid accesskey
# the name of the bucket is 'public'
$ mc cp --recursive source/public .
$ ls
drwxr-xr-x@ - sakti 28 Oct 23:15 public
Setup R2 bucket for this case I named it web
then create API key for it, from R2 menu - Manage R2 API Tokens - Create API token. For uploading large amount of files, one of the tool that can be used is rclone. And create the rclone configuration:
$ cat -p ~/.config/rclone/rclone.conf
[r2web]
type = s3
provider = Cloudflare
access_key_id = <keyid>
secret_access_key = <accesskey>
endpoint = https://<cloudflare account id>.r2.cloudflarestorage.com
acl = private
then
$ rclone copy public/* r2web:web/
....
then setup custom domain for public access, for this case storager2.saktidwicahyono.name
.
The Django config
The Django app need some adjustment for media and static configuration,
AWS_STORAGE_BUCKET_NAME = "web"
AWS_S3_ENDPOINT_URL = "https://<cloudlare account id>.r2.cloudflarestorage.com"
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_CUSTOM_DOMAIN = "storager2.saktidwicahyono.name"
MEDIA_URL = "https://storager2.saktidwicahyono.name/"
Done, now after deployment of the new version, all media and static files served by Cloudflare.