Skip to main content

Object Storage

Aurora uses S3-compatible object storage for file uploads and artifacts. SeaweedFS is the default backend (Apache 2.0 licensed).

Default: SeaweedFS​

SeaweedFS runs as part of the Docker Compose stack with no additional setup required.

Access Points​

ServiceURLDescription
S3 APIhttp://localhost:8333S3-compatible endpoint
File Browserhttp://localhost:8888Web UI for files
Cluster Statushttp://localhost:9333Master status

Default Credentials​

STORAGE_ACCESS_KEY=admin
STORAGE_SECRET_KEY=admin

Configuration​

# Storage type: seaweedfs, s3, r2, minio
STORAGE_TYPE=seaweedfs

# Bucket name
STORAGE_BUCKET=aurora

# Endpoint (for S3-compatible backends)
STORAGE_ENDPOINT=http://seaweedfs-filer:8333

# Credentials
STORAGE_ACCESS_KEY=admin
STORAGE_SECRET_KEY=admin

# Region (for AWS S3)
STORAGE_REGION=us-east-1

Supported Backends​

Aurora supports any S3-compatible storage:

AWS S3​

With static credentials​

STORAGE_TYPE=s3
STORAGE_BUCKET=your-bucket-name
STORAGE_REGION=us-east-1
STORAGE_ACCESS_KEY=AKIA...
STORAGE_SECRET_KEY=...

With IRSA / pod identity (EKS)​

When running on EKS with IRSA, credentials are injected automatically via the ServiceAccount. Leave access keys empty:

STORAGE_TYPE=s3
STORAGE_BUCKET=your-bucket-name
STORAGE_REGION=us-east-1
# STORAGE_ACCESS_KEY and STORAGE_SECRET_KEY are omitted —
# boto3 uses the IRSA credential chain automatically

See the EKS setup guide for IRSA role and ServiceAccount configuration.

Cloudflare R2​

STORAGE_TYPE=r2
STORAGE_BUCKET=your-bucket-name
STORAGE_ENDPOINT=https://accountid.r2.cloudflarestorage.com
STORAGE_ACCESS_KEY=...
STORAGE_SECRET_KEY=...

MinIO​

MinIO images were removed from public registries

In September 2026 MinIO deleted minio/minio and minio/mc from Docker Hub, closed anonymous pulls on quay.io, and dl.min.io now returns 410 Gone. The community edition is source-only and no longer maintained.

Aurora's chart therefore uses pgsty/silo, a maintained fork of MinIO's final release. It keeps the S3 API, MINIO_* variables, health routes, and the on-disk format, so existing volumes upgrade with no migration — and it still ships CVE fixes. Snapshot the volume first anyway if your storage class supports it.

In-cluster storage is still intended for local dev. For production, use one of the managed options above.

STORAGE_TYPE=minio
STORAGE_BUCKET=aurora
STORAGE_ENDPOINT=http://minio:9000
STORAGE_ACCESS_KEY=minioadmin
STORAGE_SECRET_KEY=minioadmin

Backblaze B2​

STORAGE_TYPE=s3
STORAGE_BUCKET=your-bucket-name
STORAGE_ENDPOINT=https://s3.us-west-000.backblazeb2.com
STORAGE_REGION=us-west-000
STORAGE_ACCESS_KEY=...
STORAGE_SECRET_KEY=...

Google Cloud Storage (S3 Interop)​

Create HMAC keys in GCP Console: Cloud Storage → Settings → Interoperability → Create a key.

STORAGE_TYPE=s3
STORAGE_BUCKET=your-bucket-name
STORAGE_ENDPOINT=https://storage.googleapis.com
STORAGE_ACCESS_KEY=... # HMAC key
STORAGE_SECRET_KEY=... # HMAC secret

Usage in Code​

from utils.storage.storage import get_storage_manager

storage = get_storage_manager()

# Upload
storage.upload_file(local_path, remote_key)

# Download
storage.download_file(remote_key, local_path)

# Delete
storage.delete_file(remote_key)

SeaweedFS Web UI​

Browse uploaded files at http://localhost:8888:

  1. Navigate directories
  2. Preview files
  3. Download/upload via browser

Persistence​

Storage data is persisted in Docker volumes. Use cleanup commands carefully:

# Removes storage data
make prod-clean

# Preserves storage data
make down