Overview
Azalt supports file storage via:- AWS S3 (default)
- S3-compatible services (MinIO, private cloud S3, etc.)
Environment Variables
Required for File Storage
| Variable | Description |
|---|---|
S3_BUCKET_NAME | The S3 bucket name |
S3_ACCESS_KEY_ID | AWS access key or S3-compatible service credentials |
S3_SECRET_ACCESS_KEY | AWS secret key or S3-compatible service credentials |
Optional Configuration
| Variable | Default | Description |
|---|---|---|
S3_REGION | eu-central-1 | AWS region or S3-compatible service region |
S3_ENDPOINT | (none) | Custom endpoint URL for S3-compatible services |
S3_PUBLIC_ENDPOINT | (none) | Browser-accessible URL for presigned URLs |
S3_FORCE_PATH_STYLE | false | Set to true for MinIO and most S3-compatible services |
Configuration Scenarios
AWS S3 (Standard)
For standard AWS S3, only the basic credentials are needed:S3_ENDPOINT or S3_PUBLIC_ENDPOINT needed.
MinIO (Browser-Accessible)
If your MinIO instance is directly accessible from browsers (e.g., exposed via public IP or domain):S3_PUBLIC_ENDPOINT needed since S3_ENDPOINT is browser-accessible.
MinIO (Docker/Kubernetes Internal)
If MinIO is only accessible internally (e.g., Docker network or Kubernetes cluster):Private Cloud S3
For internal S3-compatible storage in private clouds (e.g., bank infrastructure):S3_PUBLIC_ENDPOINT.
How Presigned URLs Work
When a user uploads or downloads a file, Azalt generates a presigned URL that the browser uses directly.Endpoint Resolution Order
For presigned URLs (browser file access):S3_PUBLIC_ENDPOINTif setS3_ENDPOINTif set- AWS SDK defaults (for standard AWS S3)
S3_ENDPOINTif set- AWS SDK defaults
Helm Values (Kubernetes)
Invalues.yaml:
Troubleshooting
Error: S3 storage is not configured
Error: S3 storage is not configured
Ensure all three required variables are set:
S3_BUCKET_NAMES3_ACCESS_KEY_IDS3_SECRET_ACCESS_KEY
Warning: S3_ENDPOINT is set but S3_PUBLIC_ENDPOINT is not
Warning: S3_ENDPOINT is set but S3_PUBLIC_ENDPOINT is not
This warning appears when
S3_ENDPOINT is configured but S3_PUBLIC_ENDPOINT is not. The app will use S3_ENDPOINT for presigned URLs.Action needed if: S3_ENDPOINT is an internal URL (Docker/Kubernetes service name) that browsers cannot reach. Set S3_PUBLIC_ENDPOINT to the browser-accessible URL.No action needed if: S3_ENDPOINT is already browser-accessible (users on VPN, public endpoint, etc.).File uploads/downloads fail with signature errors
File uploads/downloads fail with signature errors
This usually means there’s a mismatch between the URL used for signing and the URL browsers actually access.
- Verify
S3_PUBLIC_ENDPOINTpoints to where browsers can reach S3 - Check that any reverse proxy preserves the path correctly
- Ensure
S3_FORCE_PATH_STYLEmatches your S3 service requirements
CORS errors on file uploads
CORS errors on file uploads
Ensure your S3 bucket has proper CORS configuration allowing requests from your application domain.

