medusa-file-r2
Cloudflare R2 storage plugin for Medusa. This plugin also supports CSV exports and imports. R2 is S3-compatible object storage service by Cloudflare and has a 10GB/month forever-free tier.
This plugin is written in Typescript and uses ESBuild to create the bundle and files needed to be included in the Copy to clipboard
medusa.config.js
file.Getting Started
- Create a Cloudflare account: If you don't have one, you can create one here.
- Create a R2 bucket: Follow this guide to create a R2 bucket.
- Make the bucket public: Follow this guide to make the bucket public. While managed public access for your buckets through r2.dev cloudflare subdomain is relatively easy, it's preferred to use a custom domain as the managed r2.dev subdomain is rate-limited, custom domain also makes use of Cloudflare Cache to accelerate access to your R2 bucket.
- Obtain required credentials: You will need the following credentials to configure the plugin:
- Copy to clipboard
account_id
: Login to your Cloudflare account and go to the Copy to clipboardR2
section. The Copy to clipboardaccount_id
is the Copy to clipboardAccount ID
in the top right corner. - Copy to clipboard
access_key
and Copy to clipboardsecret_key
- Follow this guide to generate Access Key ID and Secret Access Key for your R2 bucket.
- Copy to clipboard
bucket
: The name of the R2 bucket you created. - Copy to clipboard
public_url
: The public URL of the R2 bucket you created.
- Copy to clipboard
- Install Copy to clipboard
medusa-file-r2
plugin: Run the following command in your terminal:1yarn add medusa-file-r2 - Add the plugin to medusa.config.js: Add the following code to your medusa.config.js file:12345678910111213141516const plugins = [// other plugin configurations{resolve: "medusa-file-r2",options: {bucket: "YOUR_R2_BUCKET_NAME",endpoint: "https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com",access_key: "YOUR_ACCESS_KEY",secret_key: "YOUR_SECRET_KEY",public_url: "YOUR_R2_BUCKET_PUBLIC_URL",// Optional options// cache_control: "max-age=31536000",// presigned_url_expires: 60 * 60, // 1 hour},},];