Docs / Conceitos Fundamentais / Variáveis de Ambiente

Variáveis de Ambiente

Variáveis de ambiente são a principal forma de configurar suas aplicações no sh0. Todos os valores são criptografados em repouso usando AES-256-GCM, e você pode defini-los para aplicações individuais ou compartilhá-los em toda a stack.

Adicionando Variáveis de Ambiente

Você pode adicionar variáveis de ambiente pelo dashboard ou pela API. As variáveis são injetadas nos seus containers na inicialização e estão disponíveis para sua aplicação como variáveis de ambiente padrão.

Pelo Painel

  1. Navegue até seu app (ou stack para variáveis compartilhadas).
  2. Abra a aba Ambiente.
  3. Clique em Adicionar Variável.
  4. Insira o nome e o valor da variável.
  5. Clique em Salvar.
Environment tab showing a form to add a new variable with Name and Value fields, plus a list of existing variables with masked values and edit/delete buttons
Adding environment variables from the dashboard
Note
Alterações em variáveis de ambiente requerem uma reimplantação para entrar em vigor. O sh0 solicitará a reimplantação após salvar as alterações, ou você pode reimplantar manualmente quando estiver pronto.

Pela API

Terminal
# Add a single variable
curl -X POST http://localhost:9000/api/apps/APP_ID/env \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key": "DATABASE_URL", "value": "postgres://user:pass@db:5432/myapp"}'

# Add multiple variables at once
curl -X POST http://localhost:9000/api/apps/APP_ID/env/bulk \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"variables": [
    {"key": "NODE_ENV", "value": "production"},\n    {"key": "PORT", "value": "3000"},\n    {"key": "SECRET_KEY", "value": "your-secret-key"}
  ]}'

Criptografia em Repouso

Todos os valores de variáveis de ambiente são criptografados antes de serem armazenados no banco de dados do sh0. O sh0 usa criptografia AES-256-GCM (Galois/Counter Mode) com um nonce único por valor.

Algoritmo

AES-256-GCM

Derivação de Chave

HKDF from master key

Nonce

Único por valor (96 bits)

Biblioteca

ring (Rust)

Isso significa que, mesmo que alguém obtenha acesso ao arquivo de banco de dados do sh0, não poderá ler seus segredos sem a chave de criptografia. A chave mestra é gerada na primeira inicialização e armazenada separadamente do banco de dados.

Faça Backup da Sua Chave de Criptografia
Se você perder a chave de criptografia (armazenada no diretório de dados do sh0), não será possível descriptografar suas variáveis de ambiente. Certifique-se de que sua estratégia de backup inclua todo o diretório de dados do sh0, não apenas o arquivo do banco de dados.

Importação em Lote (Arquivo .env)

Se você tem um arquivo .env existente, pode importar todas as variáveis de uma vez:

  1. Vá à aba Environment do seu app ou stack.
  2. Clique em Import .env.
  3. Cole o conteúdo do seu arquivo .env ou faça upload do arquivo diretamente.
  4. Revise as variáveis parseadas — sh0 mostrará o que será adicionado, atualizado ou ignorado.
  5. Clique em Import para aplicar.
Import .env dialog showing a text area with pasted env file contents on the left, and a parsed preview on the right showing 6 variables to be added and 2 to be updated, with checkboxes to include/exclude each
Importing variables from a .env file

O parser de importação suporta a sintaxe padrão do .env incluindo:

Supported .env Syntax
# Comments are ignored
DATABASE_URL=postgres://user:pass@db:5432/myapp
SECRET_KEY="value with spaces"
MULTILINE="line1\nline2"

# Empty values are supported
EMPTY_VAR=

# Quotes are stripped automatically
QUOTED='single quotes work too'

Escopo de Variáveis

Variáveis de ambiente podem ser definidas em dois níveis, e o escopo mais específico sempre prevalece:

Diagram showing variable scoping: Stack level (DATABASE_URL, REDIS_URL) flows down to App A and App B, while App A has its own PORT=3000 and App B has PORT=8000, overriding any stack-level PORT value
Stack variables are inherited by all apps, with app-level overrides

Variáveis em Nível de Stack

Variáveis em nível de stack são herdadas por todas as aplicações na stack. Use-as para configurações compartilhadas:

  • Strings de conexão de banco de dados compartilhadas por várias aplicações
  • Chaves de API usadas em todo o projeto
  • Identificadores de ambiente (APP_ENV=production)
  • Feature flags que se aplicam a todo o projeto

Variáveis a Nível de App

Variáveis a nível de app são específicas de um único app e sobrescrevem qualquer variável a nível de stack com o mesmo nome:

  • Números de porta (PORT=3000)
  • Chaves API específicas do app
  • Configuração que difere entre frontend e backend
Exemplo de Sobrescrita
Se uma stack define LOG_LEVEL=info e uma aplicação define LOG_LEVEL=debug, essa aplicação específica roda com log debug enquanto todas as outras aplicações na stack usam info.

Referenciando Entre Aplicações

Aplicações dentro da mesma stack podem se comunicar usando o nome da aplicação como hostname na rede interna do Docker. O sh0 também oferece uma forma de referenciar variáveis de uma aplicação a partir de outra usando sintaxe de template:

Variable References
# In the 'frontend' app, reference the 'api' app's port:
API_URL=http://api:${api.PORT}

# Reference the database connection from the 'db' service:
DATABASE_HOST=${db.HOSTNAME}

O padrão mais comum é usar o hostname interno diretamente, já que todas as aplicações em uma stack compartilham uma rede Docker:

Common Pattern
# In your frontend app's env vars:
API_URL=http://api:3000

# In your API app's env vars:
DATABASE_URL=postgres://user:pass@db:5432/myapp
REDIS_URL=redis://cache:6379
Note
O hostname é o nome da aplicação dentro da stack. Se sua aplicação se chama api, outras aplicações na mesma stack podem acessá-la em http://api:PORT.

Variáveis de Sistema

O sh0 injeta automaticamente um conjunto de variáveis de sistema somente leitura em cada contêiner:

VariávelExemploDescrição
SH0_APP_NAMEapiO nome da aplicação dentro da stack
SH0_STACK_NAMEmy-saasO nome da stack pai
SH0_DEPLOY_IDd-abc123Identificador único desta implantação
SH0_DEPLOY_SHAa1b2c3dSHA do commit Git do código implantado
SH0_DOMAINapi.example.comO domínio principal atribuído a esta aplicação
Tip
Variáveis de sistema são úteis para logging, rastreamento de erros e lógica condicional. Por exemplo, você pode incluir SH0_DEPLOY_SHA nos seus relatórios de erro para correlacionar problemas com implantações específicas.

Boas Práticas

Use variáveis a nível de stack para configuração compartilhada

Se múltiplos apps precisam da mesma URL de banco de dados ou chave API, defina a nível de stack em vez de duplicar em cada app. Isso mantém sua configuração DRY e mais fácil de atualizar.

Nunca commite secrets no Git

Use variáveis de ambiente do sh0 para todos os secrets (chaves API, senhas de banco de dados, tokens). Adicione .env ao seu .gitignore e importe variáveis pelo dashboard.

Use nomes de variáveis descritivos

Prefira STRIPE_SECRET_KEY em vez de KEY ou SK. Nomes claros facilitam o gerenciamento de variáveis conforme seu projeto cresce e novos membros entram na equipe.

Documente as variáveis necessárias

Inclua um arquivo .env.example no seu repositório com todos os nomes de variáveis necessários (sem os valores reais). Isso serve como documentação para qualquer pessoa que fizer deploy do projeto.

A .env.example file in a code editor showing variable names with placeholder descriptions: DATABASE_URL='postgres://...', REDIS_URL='redis://...', SECRET_KEY='generate-a-random-key'
Document required variables with a .env.example file