Env Wizard

O Env Wizard gera .env e .secrets automaticamente a partir das secoes environment: e secrets: do .deploy.yml. Elimina a necessidade de .env.template e .secrets.template separados.

Quando Roda

  • No runner add — se nao existe .env e o .deploy.yml define environment: ou secrets:
  • No runner reset — recria os arquivos do zero
  • Nao roda em deploys normais (runner deploy, fetch --deploy)

Sintaxe

Os valores no .deploy.yml suportam tres tipos:

Valor Fixo

Usado direto, sem perguntar. Vai pro .env ou .secrets conforme a secao.

environment:
  FLASK_ENV: production
  LOG_LEVEL: info
  PORT: "8000"

Valor Gerado (Random)

Gera automaticamente no primeiro deploy. Ideal para senhas, tokens e chaves.

secrets:
  DB_PASSWORD: "{RANDOM}"                # senha alfanumerica de 32 chars
  JWT_SECRET: "${GENERATE:hex:64}"       # hex string de 64 chars
  APP_KEY: "${GENERATE:base64:32}"       # base64 de 32 bytes
  SESSION_ID: "${GENERATE:uuid}"         # UUID v4
  OTP_CODE: "${GENERATE:numeric:6}"      # numerico de 6 digitos
  ADMIN_PASS: "${GENERATE:password:16}"  # senha de 16 chars

Formatos disponiveis:

Sintaxe Resultado Exemplo
{RANDOM} Senha alfanumerica 32 chars a8Kp2mNx7qR...
GENERATE Igual a {RANDOM} a8Kp2mNx7qR...
${GENERATE:hex:N} Hex string de N chars 7f3a9b2c...
${GENERATE:base64:N} Base64 de N bytes dG9rZW4x...
${GENERATE:uuid} UUID v4 550e8400-e29b-...
${GENERATE:numeric:N} Numerico de N digitos 847291
${GENERATE:password:N} Senha de N chars xK9#mP2q...

Prompt Interativo

Pergunta ao operador no terminal. Para deploy remoto, use --env.

environment:
  BASE_DOMAIN: "{{::Domain?projeto.com.br}}"     # com default
  DB_NAME: "{{::Database name}}"                 # sem default
  DB_HOST: "{{::MySQL Host?mysql}}"              # com default

secrets:
  SMTP_PASSWORD: "{{::SMTP Password}}"           # sem default (input mascarado)

Sintaxe: {{::LABEL?DEFAULT}}

Parte Obrigatorio Descricao
{{:: Sim Marcador de inicio
LABEL Sim Texto exibido ao operador
?DEFAULT Nao Valor padrao (aceito com Enter)
}} Sim Marcador de fim

Exemplo Completo

# .deploy.yml
project: meu-app
system: sys
image: python:3.12-slim
port: 5000
networks:
  - public
  - mysql
  - redis

environment:
  FLASK_ENV: production
  BASE_DOMAIN: "{{::Domain?meuapp.com.br}}"
  DB_HOST: "{{::MySQL Host?mysql}}"
  DB_NAME: "{{::Database name}}"
  DB_USER: "{{::Database user}}"
  REDIS_HOST: redis
  REDIS_DB: "{{::Redis DB?0}}"

secrets:
  DB_PASSWORD: "{RANDOM}"
  JWT_SECRET: "${GENERATE:hex:64}"
  SMTP_USER: "{{::SMTP User}}"
  SMTP_PASSWORD: "{{::SMTP Password}}"

healthcheck:
  path: /health

instances:
  production:
    domain: meuapp.com.br
    source:
      type: dist
    keep_versions: 3

Modo Interativo (Terminal)

Quando voce roda runner add no terminal, o wizard pergunta cada valor:

$ runner add --repo usuario/meu-app --branch main --token ghp_xxx --ckey minhachave

Configuring environment for meu-app (sys):

  Domain [meuapp.com.br]:
  MySQL Host [mysql]:
  Database name: meu_app_prod
  Database user: meu_app_user
  Redis DB [0]:
  SMTP User: noreply@meuapp.com.br
  SMTP Password: ****

Generated .env (7 vars), .secrets (4 vars, 2 random)

Valores fixos (FLASK_ENV, REDIS_HOST) e randoms (DB_PASSWORD, JWT_SECRET) sao resolvidos automaticamente sem perguntar.

Modo Remoto (--env)

Para deploy sem interacao (SSH, scripts, CI), passe os valores via --env:

runner add --repo usuario/meu-app --branch main --token ghp_xxx --ckey minhachave \
  --env BASE_DOMAIN=app.cliente.com \
  --env DB_NAME=cliente_prod \
  --env DB_USER=cliente_user \
  --env SMTP_USER=noreply@cliente.com \
  --env SMTP_PASSWORD=segredo123

Valores nao fornecidos via --env usam o default (se houver) ou ficam vazios.

Randoms e fixos sao resolvidos automaticamente em ambos os modos.

Provisioning Completo via SSH

Exemplo de setup completo de um servidor novo:

# 1. Instalar runner
ssh prod "curl -sL https://runner.ccs.systems/init.sh | sudo bash -s -- \
  --set github.default_user=devborlot \
  --mkey 'BASE64_DA_MASTER_KEY'"

# 2. Registrar app com wizard remoto
ssh prod "runner add --repo devborlot/meu-app --branch main --token ghp_xxx --ckey minhachave \
  --env BASE_DOMAIN=app.meusite.com \
  --env DB_NAME=meusite_prod \
  --env DB_USER=meusite_user \
  --env SMTP_PASSWORD=segredo"

# 3. Deploy
ssh prod "runner deploy meu-app"

Arquivos Gerados

Arquivo Permissao Conteudo
.env 644 Variaveis da secao environment:
.secrets 600 Variaveis da secao secrets:

Se o app tem --ckey configurada, os arquivos sao encriptados em .runner/secrets.enc e commitados no repo para recuperacao zero-touch.

Separacao environment vs secrets

Secao Arquivo Permissao Uso
environment: .env 644 Configuracao geral (hosts, ports, flags)
secrets: .secrets 600 Credenciais sensiveis (senhas, tokens, keys)

Regra: Se o valor e sensivel (senha, token, API key), coloque em secrets:. O Runner aplica permissao 600 automaticamente.

Veja Tambem

By Borlot.com.br on 20/04/2026