# Upload storage
Upload storage lets you offload user-uploaded files to one or more external servers. This reduces the load on your origin server, improves reliability, and makes it easier to scale traffic for uploaded assets.
Asset storage
Check the Site storage documentation to control where website assets (backgrounds, avatars, etc.) are stored.
# How it works
Upload storage works by routing file uploads to a configured external server. That server exposes the files over HTTP, so users and visitors can access uploaded images directly without hitting your origin.
# Storage URL
The storage server must provide a publicly accessible URL for reading files. Check your service provider's documentation for the correct URL format.
Chevereto uses the Storage URL as a base URL to map stored files to their public location.
Amazon S3 with direct storage:
| Property | Value |
|---|---|
| Bucket | my-bucket |
| Storage URL | https://s3.amazonaws.com/my-bucket/ |
| Stored image | my-bucket/image.jpg |
| Mapped URL | https://s3.amazonaws.com/my-bucket/image.jpg |
Use a CNAME
It is recommended to use a URL that matches your own domain. Take advantage of a CNAME record (opens new window) to avoid exposing your storage provider's domain directly.
Amazon S3 with folder-based storage and custom CNAME (img.domain.com):
| Property | Value |
|---|---|
| Bucket | my-bucket |
| Storage URL | https://img.domain.com/my-bucket/ |
| Stored image | /my-bucket/2020/10/06/image.jpg |
| Mapped URL | https://img.domain.com/my-bucket/2020/10/06/image.jpg |
# Storage URL with CDN
To use a CDN, create a pull zone at your CDN provider pointing to the origin Storage URL.
For Amazon S3, the origin URL looks like:
https://s3.amazonaws.com/my-bucket/
Your CDN will provide a URL such as:
https://pullzone-url.at.cdn-service.com/
Adding a CNAME record for the CDN URL lets you use a custom Storage URL like:
https://s3-cdn.domain.com/
# Lifecycle settings
Disable lifecycle policies
Some cloud storage providers offer a "lifecycle" feature that retains copies of all file states (modified, deleted, etc.). This can significantly increase your storage costs.
Always disable lifecycle policies on your storage bucket. If prompted, select keep only the last version of the file.
# Providers
# Alibaba Cloud OSS
The Alibaba Cloud OSS API uploads images to Alibaba Cloud (Aliyun) Object Storage System (OSS) (opens new window).
# Amazon S3
The Amazon S3 API uploads images to an Amazon S3 (opens new window) bucket. An Amazon Web Services (opens new window) (AWS) account is required.
Setup steps:
Create access credentials in the IAM console (opens new window):
- Click Create users and create a new user
- Under permissions, click Add permissions, select Attach policies directly, and attach AmazonS3FullAccess
- Click Create access key and select Third-party service
- Save the username, Access Key, and Secret Access Key
Create a bucket in the S3 console (opens new window):
- Click Create bucket, then choose an AWS Region and Bucket name (save both)
- Under Object Ownership, select ACLs enabled and Bucket owner preferred
- Under Block Public Access, leave Block all public access unchecked so objects are publicly accessible
- Under Bucket Versioning, select Disable
To use a custom domain, follow the AWS CNAME documentation (opens new window). Otherwise, ensure the Storage URL ends with /<your_bucket_name>/.
# Backblaze B2
The Backblaze B2 API uploads images to Backblaze's cloud storage (opens new window).
Setup steps:
- Go to B2 Cloud Storage and click Create a Bucket
- Set Files in Bucket to Public
- Go to App Keys and click Add a New Application Key
- Type of Access: Read and Write
B2 S3 Storage (current offering) — select the S3 Compatible storage API:
| B2 Value | Chevereto Storage |
|---|---|
| Region | us-west-002 (from your Endpoint URL) |
| keyID | Storage key |
| applicationKey | Storage secret |
| Endpoint* | https://s3.us-west-002.backblazeb2.com |
| URL | https://f002.backblazeb2.com/file/your_bucket/ |
(*) The endpoint is shown in the bucket details page.
Legacy B2 Storage — select the Backblaze B2 storage API:
| B2 Value | Chevereto Storage |
|---|---|
| keyID | Storage key (Account ID) |
| applicationKey | Storage secret (Master Application Key) |
# FTP
The FTP API uploads images to any server implementing the File Transfer Protocol (opens new window).
# Google Cloud
The Google Cloud API uploads images to a Google Cloud Storage bucket. A Google Cloud (opens new window) service account with Cloud Storage enabled (opens new window) is required.
Setup steps:
- Create a project in Google Cloud
- Go to APIs & Services and confirm that Google Cloud Storage JSON API is enabled. If not, click Enable APIs and Services and enable it
- Go to Cloud Storage > Browser and click Create bucket:
- Uncheck Enforce public access prevention on this bucket
- Set Access control to Fine-grained
- Go to APIs & Services > Credentials, click Create credentials, then Service account:
- Grant role: Owner
- Key type: JSON
- Open your new service account under Service Accounts, go to Keys, and create a new JSON key
- Your browser will download a JSON file — paste its entire contents into Chevereto's Secret Key field
# Local
The Local API uploads images to any filesystem path on the server.
# Microsoft Azure
The Microsoft Azure API uploads images to Microsoft Azure Storage (opens new window).
# OpenStack
The OpenStack API uploads images to an OpenStack (opens new window) container.
| Field | Value |
|---|---|
| Identity URL | Your provider's Keystone identity endpoint URL |
| Username | Your OpenStack username |
| Password | Your OpenStack password |
| Region | The region where your container was created |
| Container | Name of your container |
| Tenant ID | Leave blank if not required by your provider |
| Tenant name | Your project ID (found in OpenStack Horizon under CURRENT PROJECT) |
| URL | Your container's public access URL |
# S3 Compatible
The S3 Compatible API uploads images to any server implementing the Amazon S3 standard ("AWS S3 API"). Configuration is identical to Amazon S3, with the addition of a custom provider endpoint.
Hosted providers supporting the S3 API:
- Backblaze B2 (via S3-compatible API)
- Cloudflare R2
- DigitalOcean Spaces
- DreamHost DreamObjects
- Hetzner Object Storage
- IBM COS S3
- IDrive e2
- Linode Object Storage (now Akamai)
- OVH Cloud Object Storage
- PhoenixNAP Object Storage
- Scaleway Object Storage
- Storj
- Tencent Cloud Object Storage (COS)
- Vultr Object Storage (use region
us-east-1) - Wasabi
Self-hosted S3-compatible solutions:
- MinIO
- Ceph (RGW)
- SeaweedFS (S3 Gateway)
- Zenko (by Scality)
- LeoFS (S3 support in gateway mode)
- Garage (Deuxfleurs)
# SFTP
The SFTP API uploads images to any server implementing the SSH File Transfer Protocol (opens new window).