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
- Navegue até seu app (ou stack para variáveis compartilhadas).
- Abra a aba Ambiente.
- Clique em Adicionar Variável.
- Insira o nome e o valor da variável.
- Clique em Salvar.
Pela API
# 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.
AES-256-GCM
HKDF from master key
Único por valor (96 bits)
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.
Importação em Lote (Arquivo .env)
Se você tem um arquivo .env existente, pode importar todas as variáveis de uma vez:
- Vá à aba Environment do seu app ou stack.
- Clique em Import .env.
- Cole o conteúdo do seu arquivo .env ou faça upload do arquivo diretamente.
- Revise as variáveis parseadas — sh0 mostrará o que será adicionado, atualizado ou ignorado.
- Clique em Import para aplicar.
O parser de importação suporta a sintaxe padrão do .env incluindo:
# 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:
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
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:
# 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:
# 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:6379api, 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ável | Exemplo | Descrição |
|---|---|---|
| SH0_APP_NAME | api | O nome da aplicação dentro da stack |
| SH0_STACK_NAME | my-saas | O nome da stack pai |
| SH0_DEPLOY_ID | d-abc123 | Identificador único desta implantação |
| SH0_DEPLOY_SHA | a1b2c3d | SHA do commit Git do código implantado |
| SH0_DOMAIN | api.example.com | O domínio principal atribuído a esta aplicação |
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.