S3 Storage
By default, SkySend stores encrypted upload files on the local filesystem. You can switch to any S3-compatible object storage provider for more scalable or managed file storage.
For the full list of configuration variables, see Environment Variables.
Setup
Enable S3 by setting STORAGE_BACKEND=s3 and providing the required credentials:
environment:
STORAGE_BACKEND: s3
S3_BUCKET: your-bucket-name
S3_REGION: your-region
S3_ACCESS_KEY: your-access-key
S3_SECRET_KEY: your-secret-keyTIP
When using S3, the /uploads volume mount is no longer needed - only the /data volume for the SQLite database.
Provider Examples
Cloudflare R2
environment:
STORAGE_BACKEND: s3
S3_BUCKET: skysend-uploads
S3_REGION: auto
S3_ENDPOINT: "https://<account-id>.r2.cloudflarestorage.com"
S3_ACCESS_KEY: your-access-key
S3_SECRET_KEY: your-secret-keyAWS S3
environment:
STORAGE_BACKEND: s3
S3_BUCKET: skysend-uploads
S3_REGION: eu-central-1
S3_ACCESS_KEY: your-access-key
S3_SECRET_KEY: your-secret-keyLeave S3_ENDPOINT unset for AWS S3 - the endpoint is derived automatically from the region.
Hetzner Object Storage
environment:
STORAGE_BACKEND: s3
S3_BUCKET: skysend-uploads
S3_REGION: eu-central-1
S3_ENDPOINT: "https://eu-central-1.your-objectstorage.com"
S3_ACCESS_KEY: your-access-key
S3_SECRET_KEY: your-secret-keyMinIO (Self-Hosted)
environment:
STORAGE_BACKEND: s3
S3_BUCKET: skysend-uploads
S3_REGION: us-east-1
S3_ENDPOINT: "https://minio.example.com:9000"
S3_ACCESS_KEY: your-access-key
S3_SECRET_KEY: your-secret-key
S3_FORCE_PATH_STYLE: "true"MinIO requires S3_FORCE_PATH_STYLE=true. Use the same setting for Garage and other self-hosted providers that do not support virtual-hosted-style URLs.
CORS Configuration
Required for downloads
When using S3 storage, your bucket needs a CORS policy to allow browser downloads. Without it, downloads will fail with No 'Access-Control-Allow-Origin' header errors. The policy must allow GET and HEAD methods from your SkySend domain.
Cloudflare R2
Go to R2 > your bucket > Settings > CORS Policy and add:
[
{
"AllowedOrigins": [
"https://skysend.example.com"
],
"AllowedMethods": [
"GET",
"HEAD"
]
}
]AWS S3
Go to your bucket > Permissions > CORS configuration and add a similar policy.
MinIO
Use mc admin config set or the MinIO Console to configure CORS.
Replace https://skysend.example.com with your actual SkySend BASE_URL. For local development, also add http://localhost:5173.