Skip to content

Storage

Set up the two S3-compatible buckets for images and documents.

Updated View as Markdown

Create two buckets: one for images and one for documents. Only the images bucket is public-read. Keep the documents bucket private.

Var Meaning
S3_ENDPOINT Endpoint of your S3 provider
S3_REGION Optional, default auto. R2 wants auto. AWS needs the bucket’s real region.
S3_ACCESS_KEY_ID Access key
S3_SECRET_ACCESS_KEY Secret key
S3_IMAGES_BUCKET_NAME Public-read bucket for images and generated media
S3_DOCUMENTS_BUCKET_NAME Private bucket for documents
MEDIA_URL Public base URL of the images bucket
NUXT_PUBLIC_MEDIA_URL Same value as MEDIA_URL, for the frontend CSP

If MEDIA_URL is missing, the backend and worker log a startup warning and media has no host.

Providers

The endpoint is https://<account-id>.r2.cloudflarestorage.com. For a jurisdiction such as eu, use https://<account-id>.eu.r2.cloudflarestorage.com.

.envbash
S3_ENDPOINT="https://<account-id>.r2.cloudflarestorage.com"
S3_REGION="auto"
S3_IMAGES_BUCKET_NAME="studio-images"
S3_DOCUMENTS_BUCKET_NAME="studio-documents"
MEDIA_URL="https://images.example.com"
NUXT_PUBLIC_MEDIA_URL="https://images.example.com"

Attach a custom domain to the images bucket and use it as MEDIA_URL.

Use the regional endpoint and set the bucket’s real region.

.envbash
S3_ENDPOINT="https://s3.eu-central-1.amazonaws.com"
S3_REGION="eu-central-1"
S3_IMAGES_BUCKET_NAME="studio-images"
S3_DOCUMENTS_BUCKET_NAME="studio-documents"
MEDIA_URL="https://studio-images.s3.eu-central-1.amazonaws.com"
NUXT_PUBLIC_MEDIA_URL="https://studio-images.s3.eu-central-1.amazonaws.com"

The images bucket must allow public reads. A CDN such as CloudFront in front of it also works. Use its URL as MEDIA_URL.

Any S3-compatible server works, including one on localhost. Running it is up to you. We don’t ship or support one.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close