runner env
Comandos para gerenciar variaveis de ambiente e secrets.
Visao Geral
O Runner separa configuracao em dois arquivos:
.env- Variaveis de configuracao (permissao 644).secrets- Credenciais sensiveis (permissao 600)
Estes arquivos podem ser gerados automaticamente no primeiro deploy via Env Wizard, a partir das secoes environment: e secrets: do .deploy.yml.
Deteccao Automatica de Secrets (v2.4.2)
O runner detecta automaticamente se uma variavel e sensivel pelo nome, usando Aho-Corasick multi-pattern matching com 3 niveis de confianca:
| Confianca | Comportamento | Exemplos |
|---|---|---|
| Alta (95%+) | Auto-encripta se tem ckey, warning se nao | DB_PASSWORD, API_KEY, GITHUB_TOKEN, STRIPE_SECRET |
| Media (75%) | Aviso "pode ser sensivel, use --secret" | MY_TOKEN, APP_SECRET, AUTH_BEARER |
| Nao detectado | Salva no .env sem questionamento |
LOG_LEVEL, DB_HOST, APP_ENV, CACHE_KEY |
Falsos positivos conhecidos sao filtrados automaticamente: keyboard, primary_key, max_tokens, public_key, tokenizer, hash_map, cache_key, etc.
Flags
| Flag | Efeito |
|---|---|
| (sem flag) | Auto-detecta pelo nome. Alta confianca + ckey = encripta. Sem ckey = .env + warning |
--secret |
Forca como secret. Requer ckey — sem ckey retorna erro |
--force |
Forca como secret sem questionamento. Requer ckey |
# Auto-detecta: DB_PASSWORD → secret (alta confianca)
runner env set myapp --key DB_PASSWORD --value xxx
# → Com ckey: "Detectado como secret. Salvando em .secrets (encriptado)"
# → Sem ckey: "Salvando em .env (plaintext). Acessivel a qualquer usuario..."
# Forcar como secret (requer ckey)
runner env set myapp --key CUSTOM_FIELD --value xxx --secret
runner env set myapp --key CUSTOM_FIELD --value xxx --force
# Sem ckey + --secret = erro
runner env set myapp --key X --value Y --secret
# → "Secrets requerem encriptacao. Registre a app com --ckey"Comandos
Status
runner env status --app <path>Exemplo:
runner env status --app /data/apps/usuario_meu-appOutput:
Environment de meu-app:
.env:
FLASK_ENV=production
DEBUG=false
LOG_LEVEL=info
.secrets:
DB_PASSWORD=***
REDIS_PASSWORD=***
SECRET_KEY=***Definir Variavel
runner env set --app <path> --key <key> --value <value>Exemplo:
runner env set --app /data/apps/meu-app --key LOG_LEVEL --value debugDefinir Secret
runner env set --app <path> --key <key> --value <value> --secretExemplo:
runner env set --app /data/apps/meu-app --key API_KEY --value sk_live_xxx --secretRegenerar Secret
runner env regenerate --app <path> --key <key>Gera novo valor aleatorio para o secret.
Exemplo:
runner env regenerate --app /data/apps/meu-app --key SECRET_KEYValidar Variaveis
runner env validate --app <path> --required "VAR1,VAR2,VAR3"Verifica se todas as variaveis obrigatorias estao definidas.
Exemplo:
runner env validate --app /data/apps/meu-app --required "DB_HOST,DB_USER,DB_PASSWORD"Output (sucesso):
All required variables are set.Output (falha):
Missing required variables:
- DB_PASSWORDArquivos
.env
Variaveis de configuracao (nao sensiveis):
FLASK_ENV=production
DEBUG=false
LOG_LEVEL=info
BASE_URL=https://app.meusite.com.br.secrets
Credenciais sensiveis (encriptadas em repouso com --ckey):
DB_PASSWORD=senha_secreta
REDIS_PASSWORD=outra_senha
SECRET_KEY=chave_muito_secreta_gerada
API_KEY=sk_live_xxxxxxxxxxxxPermissoes: chmod 600 .secrets
Comportamento por versao:
| Versao | Sem --ckey |
Com --ckey |
|---|---|---|
| < v2.0.4 | .secrets criado em plaintext |
.secrets encriptado |
| v2.0.4+ | .secrets nao criado — secrets vao pro .env |
.secrets encriptado (sem mudanca) |
runner env set --secret e runner env regenerate continuam gravando no .secrets se ele existir. Se a app nao tem .secrets (registrada sem ckey), estes comandos gravam no .env.
Templates
O Runner processa templates em .env.template:
Sintaxe
# Valor fixo
FLASK_ENV=production
# Gerar automaticamente
SECRET_KEY=${GENERATE:secret:64}
DB_PASSWORD=${GENERATE:password:32}
# Valor manual (prompt no primeiro deploy)
EXTERNAL_API_KEY=${MANUAL:API key do servico externo}
# Referencia a contexto
PROJECT_NAME=${CONTEXT:PROJECT}
DOMAIN=${CONTEXT:DOMAIN}Tipos de GENERATE
| Tipo | Descricao | Exemplo |
|---|---|---|
secret:N |
String alfanumerica de N caracteres | abc123xyz... |
password:N |
Senha com caracteres especiais | aB3$xY9@... |
uuid |
UUID v4 | 550e8400-e29b-... |
hex:N |
String hexadecimal de N bytes | a1b2c3d4... |
Variaveis de CONTEXT
| Variavel | Descricao |
|---|---|
PROJECT |
Nome do projeto |
DOMAIN |
Dominio principal |
VERSION |
Versao atual |
INSTANCE |
Nome da instancia |
Docker Compose
O Runner configura env_file automaticamente:
services:
app:
env_file:
- .env
- .secretsProvisionamento GENERATE (v1.3.2)
No primeiro deploy, o Runner le .env.template e gera valores para variaveis com ${GENERATE:...}. Os valores gerados sao gravados em .env e .secrets.
Em deploys seguintes, o Runner nao sobrescreve valores ja resolvidos. Variaveis com padrao GENERATE no template sao ignoradas nas flags -e do container, garantindo que o valor gerado no primeiro deploy seja preservado.
Antes da v1.3.2, valores contendo ${GENERATE:...} eram injetados como -e flags no docker run, sobrescrevendo os valores ja resolvidos em .env/.secrets.
Seguranca
.secretstem permissao 600- Dollar signs (
$) sao escapados para$$ - Secrets nao aparecem em logs
env statusmostra***para secrets
Encriptacao e Recovery
Se a app foi registrada com runner add --ckey, os arquivos .env e .secrets sao encriptados e persistidos no repositorio como .runner/secrets.enc apos cada deploy.
Em caso de perda do servidor, runner add --ckey restaura automaticamente os secrets a partir do repo.
Consulte o guia Secrets e Encriptacao para detalhes completos.