S3-Compatible Services

Copy Markdown View Source

ExOss supports any S3-compatible service using provider: :custom.

Supported services include:

  • MinIO (self-hosted, local testing)
  • DigitalOcean Spaces
  • Cloudflare R2
  • Backblaze B2
  • Wasabi
  • Qiniu S3 API (via provider: :qiniu for auto endpoint)

Configuration

For custom providers, you must set endpoint explicitly. Typically you also need bucket_addressing: :path (most S3-compatible services don't support virtual-hosted style).

MinIO (Local Testing)

config :my_app, MyApp.MinIOStorage,
  provider: :custom,
  endpoint: "http://localhost:9000",
  bucket_addressing: :path,
  access_key_id: "minioadmin",
  secret_access_key: "minioadmin"

DigitalOcean Spaces

config :my_app, MyApp.DOSpaces,
  provider: :custom,
  endpoint: "https://nyc3.digitaloceanspaces.com",
  bucket_addressing: :virtual,
  access_key_id: "...",
  secret_access_key: "...",
  region: "nyc3"

Cloudflare R2

config :my_app, MyApp.R2Storage,
  provider: :custom,
  endpoint: "https://{account_id}.r2.cloudflarestorage.com",
  bucket_addressing: :virtual,
  access_key_id: "...",
  secret_access_key: "..."

Qiniu S3-Compatible API

For Qiniu's S3 API (not the native API), use provider: :qiniu for auto endpoint construction:

config :my_app, MyApp.QiniuStorage,
  provider: :qiniu,
  access_key_id: "...",
  secret_access_key: "...",
  region: "cn-east-1"

Endpoint is auto-constructed as https://{bucket}.s3.{region}.qiniucs.com.

HTTPS and Custom Ports

For services using custom ports or HTTP (e.g., local MinIO):

config :my_app, MyApp.MinIO,
  provider: :custom,
  endpoint: "https://minio.example.com:8443",
  ...

The scheme and port are parsed from the endpoint URL.