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.enve o.deploy.ymldefineenvironment:ousecrets: - 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 charsFormatos 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: 3Modo 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=segredo123Valores 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
- Referencia .deploy.yml — formato completo
- Secrets e Encriptacao — ckey, master key, recovery
- runner env — comandos para gerenciar variaveis
- Primeiro Deploy — tutorial passo a passo