Skip to content

S3 Storage

FluxNow provisions S3-compatible object storage, backed by Garage, when you enable it.

  • Garage — an S3-compatible object storage server
  • A dedicated bucket per app (with a 1 GiB quota)
  • Injected credentials — no manual setup required

Add s3.enabled: true to your fluxnow.yaml — at the top level for a single-service repo, or under the app’s spec for a monorepo (each app opts in independently):

# fluxnow.yaml (single service)
s3:
enabled: true
# fluxnow.yaml (monorepo)
apps:
- name: api
path: apps/api
spec:
runtime: node
port: 3000
s3:
enabled: true

Absent or false means no bucket is provisioned — the setting is fully opt-in.

FluxNow injects the credentials at deploy time under a broad set of aliases so any SDK works unchanged — the AWS convention (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, AWS_ENDPOINT_URL_S3, AWS_S3_BUCKET), the generic S3_* convention, and BUCKET_NAME. The core values:

VariableDescription
S3_ENDPOINT / AWS_ENDPOINT_URL_S3The in-cluster S3 API endpoint
S3_ACCESS_KEY_ID / AWS_ACCESS_KEY_IDAccess key for authentication
S3_SECRET_ACCESS_KEY / AWS_SECRET_ACCESS_KEYSecret key for authentication
S3_REGION / AWS_REGIONRegion name
S3_BUCKET / AWS_S3_BUCKET / BUCKET_NAMEThe bucket name

Point any AWS S3 SDK at the endpoint and it just works. You never set these yourself.

S3 is not provisioned for per-PR preview environments — there are no per-preview buckets, so a preview never shares (or can overwrite) your staging objects. Provisioning happens for your staging (and production) environment.