Storage Setup
Configure the required S3-compatible storage backend for uploads, downloads, and file validation.
Last updated
remoteEaze requires S3-compatible object storage. It does not treat storage as an optional later integration.
The API validates the configured bucket during startup, and browser uploads use presigned URLs directly against the storage provider.
What the app expects
Your storage backend must support:
- S3-compatible authentication
- bucket existence and bucket metadata checks
- presigned upload and download URLs
- browser uploads from the web app
The current storage plugin uses path-style S3 access, which works well with many self-hosted or compatible providers.
Required variables
See the full descriptions in Environment Reference.
STORAGE_ENDPOINT=
STORAGE_REGION=us-east-1
STORAGE_BUCKET=
STORAGE_ACCESS_KEY=
STORAGE_SECRET_KEY=
STORAGE_PRESIGN_UPLOAD_EXPIRY_SECONDS=300
STORAGE_PRESIGN_DOWNLOAD_EXPIRY_SECONDS=900
STORAGE_MAX_FILE_SIZE_BYTES=52428800Supported provider model
The app is designed for S3-compatible storage and can work with many providers if they support the required behavior.
Known tested paths:
- SeaweedFS
- Backblaze B2 S3-compatible API
Other S3-compatible providers may also work, but you should validate:
- presigned
PUTuploads - presigned downloads
- bucket lookup
- browser CORS behavior
SeaweedFS
SeaweedFS is a practical self-hosted option when you want local control over object storage.
Recommended references:
Operational guidance:
- Use the S3 gateway endpoint as
STORAGE_ENDPOINT. - Create the bucket before starting the API.
- Use credentials with bucket access to the selected bucket.
- Keep SeaweedFS on a different machine from the main app host in production if possible.
Backblaze B2 (S3-compatible)
Backblaze works well as a managed S3-compatible backend, but direct browser uploads require correct bucket CORS configuration.
Useful references:
Backblaze setup checklist
- Create the bucket.
- Use the exact S3-compatible endpoint shown by Backblaze for your bucket/region.
- Create an application key with access to the bucket.
- Configure bucket CORS for the web app origin.
Backblaze CORS requirements
Because uploads are browser-to-storage via presigned URLs, the bucket must allow the web app origin.
At minimum, allow:
- your web app origin, for example
https://remote-eaze.example.com - methods:
PUTGETHEAD
- request headers:
content-type- or
*during initial setup if you want the least-friction configuration
Useful exposed headers often include:
ETag
Do not solve Backblaze upload CORS in Fastify CORS
If a presigned upload fails in the browser with a CORS error, the fix belongs in the bucket CORS rules, not in the API server CORS configuration.
Startup failure behavior
If storage is wrong, expect startup or runtime symptoms such as:
- API fails during bucket health check
- upload start succeeds but browser upload fails
- download links are generated but rejected by the provider
Common causes:
- wrong endpoint
- wrong bucket name
- wrong credentials
- bucket not created
- missing bucket CORS rules for browser uploads
Example guidance for common topologies
Managed storage
If you do not want to run storage yourself:
- Backblaze is a reasonable choice
- use the provider endpoint directly
- configure bucket CORS before testing browser uploads
Self-hosted storage
If you want to self-host:
- SeaweedFS is a practical tested path
- provision it separately from the main app host when possible
- confirm the S3 gateway endpoint and bucket are ready before deploying the API
Next step
Once storage is configured, continue with Email and Notifications.