Storage · modules/storage

Adapter pronto para produção

Object storage
compatível com S3.

O módulo de storage é dono dos uploads de arquivos atrás de um port IStorageProvider. O adapter S3 roda sobre o SDK da AWS e — como AWS, Cloudflare R2 e MinIO falam o mesmo protocolo — o mesmo código serve os três, diferindo apenas em algumas env vars.

AWS, R2 ou MinIO — o mesmo adapter

As únicas diferenças entre AWS S3, Cloudflare R2 e MinIO são o endpoint, o endereçamento path-style e a URL base pública — tudo guiado por env. Aponte o mesmo S3StorageProvider para qualquer um deles.

apps/server/.env
 1  STORAGE_PROVIDER=s3
 2  STORAGE_S3_BUCKET=my-bucket
 3  STORAGE_S3_REGION=auto
 4  STORAGE_S3_ACCESS_KEY_ID=...
 5  STORAGE_S3_SECRET_ACCESS_KEY=...
 6  # R2 / MinIO only:
 7  STORAGE_S3_ENDPOINT=https://<accountid>.r2.cloudflarestorage.com
 8  STORAGE_S3_FORCE_PATH_STYLE=true   # MinIO

O que vem pronto

URLs pré-assinadas

Uploads e downloads usam URLs pré-assinadas via @aws-sdk/s3-request-presigner — os bytes nunca passam pelo seu servidor.

Keys content-addressed

As keys de avatar são avatars/{userId}-{sha256:16}.{ext}, então o header de cache imutável de um ano é seguro entre re-uploads — um arquivo novo escreve uma key nova.

Um port, cinco providers

STORAGE_PROVIDER seleciona null / s3 / local / uploadthing / supabase atrás da mesma interface IStorageProvider.

Público ou assinado

Sete uma URL base pública (CDN / bucket público do R2) ou deixe getPublicUrl cair para uma URL assinada de longa duração.

Referência de configuração

Variáveis de ambiente

  • STORAGE_PROVIDERobrigatória

    Set to s3

  • STORAGE_S3_BUCKETobrigatória
  • STORAGE_S3_REGIONobrigatória
  • STORAGE_S3_ACCESS_KEY_IDobrigatória
  • STORAGE_S3_SECRET_ACCESS_KEYobrigatória
  • STORAGE_S3_ENDPOINTopcional

    R2 / MinIO / CEPH endpoint

  • STORAGE_S3_FORCE_PATH_STYLEopcional

    true for MinIO

Onde ele vive

  • apps/server/src/modules/storage/infrastructure/providers/s3-storage-provider.ts
  • apps/server/src/modules/storage/infrastructure/providers/index.ts

Um adapter de storage, qualquer backend S3.

Publique uploads em AWS S3, Cloudflare R2 ou MinIO sem tocar no código da sua aplicação.