Skip to main content
Aurora uses S3-compatible object storage for files, uploads, and artifacts. The storage layer is pluggable and supports multiple backends.

Supported Backends

  • SeaweedFS (default) - Apache 2.0 licensed, included in docker-compose
  • AWS S3 - Amazon’s object storage service
  • Cloudflare R2 - S3-compatible storage with zero egress fees
  • Backblaze B2 - Affordable S3-compatible storage
  • Google Cloud Storage - Via S3 interoperability
  • MinIO - Self-hosted S3-compatible storage
  • Any S3-compatible service

Configuration

Environment Variables

string
default:"aurora-storage"
required
S3 bucket name. Must exist before starting Aurora.
string
default:"http://seaweedfs-filer:8333"
S3 endpoint URL.
  • AWS S3: Omit this variable (uses AWS SDK defaults)
  • SeaweedFS: http://seaweedfs-filer:8333 (Docker) or http://localhost:8333 (local)
  • Cloudflare R2: https://<account_id>.r2.cloudflarestorage.com
  • MinIO: http://minio:9000
string
default:"admin"
required
S3 access key ID
string
default:"admin"
required
S3 secret access key
string
default:"us-east-1"
S3 region. Use auto for Cloudflare R2.
boolean
default:"false"
Enable SSL/TLS for storage connections. Set to true for production.
boolean
default:"false"
Verify SSL certificates. Set to true in production.
Disabling SSL verification is vulnerable to MITM attacks. Only disable for local development or trusted networks.
boolean
default:"true"
Enable Redis caching for file listings
number
default:"60"
Cache TTL in seconds

SeaweedFS (Default)

SeaweedFS is a distributed object storage system included in Aurora’s docker-compose stack.

Features

  • Apache 2.0 licensed - No vendor lock-in
  • S3-compatible API - Drop-in replacement for AWS S3
  • High performance - Built for speed
  • Included in docker-compose - No external dependencies

Configuration

Web UI

SeaweedFS provides web interfaces:

Creating the Bucket

The bucket is created automatically on first access. To create manually:

AWS S3

Use AWS S3 for production deployments with AWS infrastructure.

Configuration

Creating the Bucket

IAM Permissions

Create an IAM user with the following policy:

Cost Optimization

  • Use S3 Intelligent-Tiering for automatic cost optimization
  • Enable lifecycle policies to delete old files
  • Use S3 Transfer Acceleration for faster uploads (optional)

Cloudflare R2

Cloudflare R2 offers S3-compatible storage with zero egress fees.

Configuration

Creating the Bucket

  1. Go to Cloudflare Dashboard → R2
  2. Click “Create bucket”
  3. Name your bucket: my-aurora-bucket
  4. Create API token:
    • Navigate to R2 → API Tokens
    • Create API token with “Object Read & Write” permissions
    • Copy the Access Key ID and Secret Access Key

Benefits

  • Zero egress fees - No charges for downloads
  • S3-compatible API - Works with existing S3 tools
  • Global distribution - Low latency worldwide

MinIO

Self-hosted S3-compatible storage for on-premises deployments.

Configuration

Docker Compose

Add MinIO to your docker-compose:

Web UI

Access MinIO console at http://localhost:9001

Python API

Basic Usage

Upload from Flask Request

User-Scoped Paths

All files are automatically scoped to users:

Caching

File listings are cached in Redis:

File Organization

Path Traversal Protection

The storage manager prevents directory traversal attacks:

Troubleshooting

Connection Errors

Bucket Not Found

Permission Denied

SSL Certificate Errors

File Size Limits

Default max file size is 100MB. To increase:

Security Best Practices

Production Checklist

  • Use strong credentials (not admin/admin)
  • Enable SSL/TLS (STORAGE_USE_SSL=true)
  • Verify SSL certificates (STORAGE_VERIFY_SSL=true)
  • Use IAM roles instead of static keys (AWS)
  • Enable bucket versioning
  • Configure lifecycle policies for old files
  • Restrict bucket access to Aurora services only
  • Enable server-side encryption
  • Monitor access logs

Encryption

Access Control

Migration

Switching Backends

To migrate from SeaweedFS to AWS S3:
  1. Sync existing files:
  2. Update .env:
  3. Restart Aurora:
  4. Verify migration: