Deployment

Creating Fly S3

Provision Fly Tigris object storage and configure S3-compatible credentials.

When to use this page

  • You need object storage for uploads, media assets, exports, or backups.
  • You deploy on Fly and want an S3-compatible storage backend.

Prerequisites

  • Fly app and organization are set up.
  • You know whether objects should be public or private.
  • You have a naming pattern for buckets and object keys.

Documentation: https://fly.io/docs/tigris/

Fly Tigris Object Store

Overview

Fly.io uses Tigris for S3-compatible globally distributed object storage.

Usage considerations

  • Use for file uploads, media assets, backups, and exports
  • S3-compatible API - works with standard S3 SDKs and tools
  • Globally distributed for low-latency access
  • Prefer signed URLs for private access

Setup checklist

Follow the official Fly.io Tigris documentation for the latest CLI commands and options.

  1. Choose a bucket name and region
  2. Decide on public vs private access
  3. Plan your folder structure and lifecycle rules
  4. Create access keys for your app or CI/CD pipeline

After creation

  • Store credentials in your app's environment variables (example):
    fly secrets set AWS_ACCESS_KEY_ID=<your-access-key-id>
    fly secrets set AWS_SECRET_ACCESS_KEY=<your-secret-access-key>
    fly secrets set BUCKET_NAME=<your-bucket-name>
    fly secrets set S3_ENDPOINT=<your-endpoint>
    fly secrets set S3_REGION=<your-region>
  • In app you configure as regular S3

Verify

  • Upload and download a test file from the running application.
  • Signed URL flow works for private objects.
  • Bucket/object naming and access policies match your security model.

Troubleshooting

  • Upload permission errors: Check key permissions and bucket policy configuration.
  • Broken object URLs: Verify endpoint/region and path-style vs virtual-host style settings.
  • Slow delivery of public assets: Add CDN caching rules and optimize object size.

On this page