Storage and CDN

Moving images off the server and serving them fast.

By default product images live on the store's own disk. Connect object storage and uploads go there instead, served through a CDN — faster for customers, and it stops images filling your server.

When you need this

  • Your catalog is large, or you use video.
  • You are near your disk quota.
  • Customers outside your region complain the store is slow.

A small catalog on local storage is fine. This is not a day-one task.

Choosing a provider

Anything S3-compatible works. Common choices:

ProviderNotes
Cloudflare R2No charge for bandwidth out, which is the cost that usually bites. Region is auto.
Backblaze B2Cheap storage, S3-compatible endpoint.
Amazon S3The original. Watch egress charges.
DigitalOcean SpacesSimple, with a CDN included.

Connecting it

Integrations → Storage & CDN:

FieldWhat to enter
S3 endpointR2: https://ACCOUNT.r2.cloudflarestorage.com. Others give you theirs.
BucketThe bucket uploads are written to. Create it first.
RegionR2 uses auto; most others want their real region.
Access key IDFrom the provider's API tokens.
Secret access keyShown once when you create the key.
CDN base URLOptional but recommended, e.g. https://cdn.yourstore.com. Assets are served from here.
Max video upload (MB)Default 100.

Setting the bucket up

  1. Create the bucket.
  2. Make objects publicly readable — customers' browsers fetch them directly.
  3. Create an API token scoped to that bucket only, with read and write.
  4. Point a CDN or custom domain at the bucket if your provider supports it.

Scope the token to one bucket. An account-wide key in a store's settings is a much larger blast radius than it needs to be. Most providers make per-bucket tokens easy.

Moving existing images across

If you already have images on local disk, there is a migration that copies them to the bucket and rewrites the URLs. It runs in phases — copy, then rewrite, then clean up — and never deletes anything before verifying it arrived.

  1. Connect the bucket and confirm a new upload lands there.
  2. Start the migration.
  3. Watch the store while it runs. Images stay served throughout.
  4. Only after it reports done are the local copies removed.

Take a backup first anyway. The migration is careful, but a backup costs you five minutes and removes the question entirely.

Testing it

  1. Press Test.
  2. Upload an image to a product.
  3. Right-click the image on the storefront and check the URL — it should be your CDN or bucket, not your store's domain.
  4. Open that URL in a private window. If it will not load, the bucket is not public.

Common problems

SymptomCause
Uploads failWrong endpoint or region, or the token lacks write permission
Upload works, images do not displayBucket objects are not public
Some images load, others do notMigration part-done, or a stale CDN cache
Slow despite the CDNCDN base URL not set, so files come straight from the bucket

Still stuck? Message us on WhatsApp — we would rather answer than have you guess.