Extensão Storage
Object storage S3-compatible para o seu app, pronto para o Active Storage do Rails em poucos minutos.
O que a Extensão entrega
Ao ativar a Extensão Storage, o Jataí provisiona um bucket S3-compatible privado, exclusivo do app, no storage do Jataí. O bucket não é público: só quem tem a credencial consegue ler ou escrever nele.
Junto com o bucket, o app recebe uma credencial própria — uma service account isolada, sem acesso a nenhum outro recurso da conta. Se essa credencial vazar, revogá-la não afeta mais nada além do bucket do app.
Instale a Extensão pela aba Extensões do app no dashboard.
Variáveis de ambiente injetadas
No provisionamento, o Jataí injeta automaticamente as variáveis abaixo no app — nenhuma configuração manual é necessária.
| Variável | Descrição |
|---|---|
STORAGE_BUCKET |
Nome do bucket dedicado ao app |
STORAGE_ENDPOINT |
Endpoint S3 da região, no formato https://<região>.magaluobjects.com |
STORAGE_ACCESS_KEY |
Access key da credencial do app |
STORAGE_SECRET_KEY |
Secret key da credencial do app |
STORAGE_REGION |
Região do bucket (ex: br-se1) |
Rode jatai env list
a qualquer momento para conferir os valores atuais.
Configurando o Active Storage
Adicione o serviço jatai ao
config/storage.yml do seu app,
lendo as variáveis injetadas:
jatai: service: S3 endpoint: <%= ENV["STORAGE_ENDPOINT"] %> access_key_id: <%= ENV["STORAGE_ACCESS_KEY"] %> secret_access_key: <%= ENV["STORAGE_SECRET_KEY"] %> region: <%= ENV["STORAGE_REGION"] %> bucket: <%= ENV["STORAGE_BUCKET"] %> force_path_style: true
force_path_style: true é
obrigatório: o endpoint resolve o bucket pelo caminho da URL, não por subdomínio.
Depois, aponte o ambiente de produção para o novo serviço em
config/environments/production.rb:
config.active_storage.service = :jatai
Funciona com qualquer SDK S3-compatible
O Active Storage é só um caminho — o bucket é S3-compatible de verdade, então qualquer SDK que fale o
protocolo S3 funciona (boto3, AWS SDK para Node/Go, MinIO client, etc.), desde que aponte para o
STORAGE_ENDPOINT injetado e use
path-style em vez de virtual-hosted-style:
endpoint_url = ENV["STORAGE_ENDPOINT"] aws_access_key_id = ENV["STORAGE_ACCESS_KEY"] aws_secret_access_key = ENV["STORAGE_SECRET_KEY"] path_style = true # obrigatório — o bucket é resolvido pelo caminho da URL
URLs assinadas
O bucket é privado, então url_for
do Active Storage gera URLs assinadas com expiração — não links públicos permanentes. Se o app usa o
modo redirect para servir imagens
em páginas públicas (ex: rails_blob_path),
cada carregamento de página gera uma URL assinada nova — funciona normalmente, mas não cacheie a URL em
si além do prazo de expiração, ou o link para de funcionar.
Franquia do plano e comportamento de quota
Cada plano da Extensão Storage tem uma franquia de armazenamento. Ao ultrapassar o limite contratado,
a plataforma pausa apenas os uploads — a credencial do app perde a
permissão de escrita (PutObject).
Leitura e exclusão de arquivos continuam funcionando normalmente, então dá para liberar espaço apagando
o que não precisa mais sem precisar de suporte.
Assim que o uso volta a ficar abaixo do limite do plano, os uploads são restaurados automaticamente — sem intervenção manual.
Saída de dados (egress)
A saída de dados (egress) ainda não é medida por bucket — o uso é regido por fair-use: consumo compatível com o uso normal de um app não sofre restrição. Um plano de uso medido de egress está no roadmap.