DPL - Deploy Pipeline Language
Linguagem de templates usada pelo Runner para gerar configuracoes dinamicas.
Visao Geral
A DPL permite usar variaveis e geradores em arquivos de configuracao:
.deploy.yml- Configuracao de deploy.env.template- Template de variaveis de ambiente- Hooks - Comandos pos-deploy
Sintaxe
${TIPO:parametro:valor}| Parte | Descricao |
|---|---|
TIPO |
Categoria da variavel (GENERATE, CONTEXT, MANUAL) |
parametro |
Nome ou tipo do valor |
valor |
Parametro adicional (opcional) |
Categorias
GENERATE - Geracao Automatica
Gera valores aleatorios no primeiro deploy.
# Sintaxe
${GENERATE:tipo:tamanho}Tipos disponiveis:
| Tipo | Descricao | Exemplo de Output |
|---|---|---|
secret:N |
String alfanumerica de N caracteres | a8Kp2xMn9Qr5tYw... |
password:N |
Senha com caracteres especiais | aB3$xY9@kL2#... |
uuid |
UUID v4 | 550e8400-e29b-41d4-a716-446655440000 |
hex:N |
String hexadecimal de N bytes | a1b2c3d4e5f6... |
Exemplos:
# .env.template
SECRET_KEY=${GENERATE:secret:64}
DB_PASSWORD=${GENERATE:password:32}
SESSION_ID=${GENERATE:uuid}
API_TOKEN=${GENERATE:hex:32}Comportamento:
- Valores sao gerados apenas no primeiro deploy
- Deploys subsequentes preservam o valor existente
- Use
runner env regeneratepara forcar nova geracao
CONTEXT - Variaveis de Contexto
Referencia valores do contexto de deploy.
# Sintaxe
${CONTEXT:variavel}Variaveis disponiveis:
| Variavel | Descricao | Exemplo |
|---|---|---|
PROJECT |
Nome do projeto | meu-app |
DOMAIN |
Dominio principal | app.meusite.com.br |
VERSION |
Versao sendo deployada | v1.2.3 |
INSTANCE |
Nome da instancia | production |
GITHUB_USER |
Usuario/org do GitHub | devborlot |
GITHUB_REPO |
Nome do repositorio | meu-app |
Exemplos:
# .env.template
PROJECT_NAME=${CONTEXT:PROJECT}
BASE_URL=https://${CONTEXT:DOMAIN}
DEPLOYED_VERSION=${CONTEXT:VERSION}MANUAL - Entrada Manual
Solicita valor ao operador no primeiro deploy.
# Sintaxe
${MANUAL:descricao}Exemplos:
# .env.template
EXTERNAL_API_KEY=${MANUAL:API key do servico externo}
SMTP_PASSWORD=${MANUAL:Senha do servidor SMTP}
LICENSE_KEY=${MANUAL:Chave de licenca do produto}Comportamento:
- Runner exibe prompt durante o deploy
- Valor e salvo em
.secrets(permissao 600) - Deploys subsequentes preservam o valor
Templates de Staging
Variaveis especificas para ambientes de staging/PR.
Em .deploy.yml
staging:
enabled: true
domain_template: "pr-${PR_NUMBER}.staging.${DOMAIN}"
container_template: "staging_${PROJECT}_pr${PR_NUMBER}"Variaveis de Staging
| Variavel | Descricao | Exemplo |
|---|---|---|
${PR_NUMBER} |
Numero da Pull Request | 42 |
${PROJECT} |
Nome do projeto | meu-app |
${BRANCH} |
Nome da branch | feature/login |
${DOMAIN} |
Dominio base | meusite.com.br |
${COMMIT} |
Hash curto do commit | abc1234 |
Exemplo de resolucao:
# Template
domain_template: "pr-${PR_NUMBER}.staging.${DOMAIN}"
# PR #42 do projeto com dominio meusite.com.br
# Resultado: pr-42.staging.meusite.com.brVariaveis de Hook
Variaveis disponiveis em comandos de hook.
Em .deploy.yml
hooks:
post_healthy:
- "echo Deploy ${VERSION} em ${CONTAINER}"
- "curl -X POST ${WEBHOOK_URL}/deploy?v=${VERSION}"Variaveis de Hook
| Variavel | Descricao | Exemplo |
|---|---|---|
${VERSION} |
Versao deployada | v1.2.3 |
${APP_PATH} |
Caminho da aplicacao | /data/apps/devborlot_meu-app |
${CONTAINER} |
Nome do container | meu-app_production_v1-2-3 |
${INSTANCE} |
Nome da instancia | production |
${PROJECT} |
Nome do projeto | meu-app |
${DOMAIN} |
Dominio da instancia | app.meusite.com.br |
Arquivos e Uso
.env.template
Template para gerar .env e .secrets.
# Variaveis fixas
FLASK_ENV=production
DEBUG=false
LOG_LEVEL=info
# Geracao automatica (vai para .secrets)
SECRET_KEY=${GENERATE:secret:64}
DB_PASSWORD=${GENERATE:password:32}
REDIS_PASSWORD=${GENERATE:password:24}
# Entrada manual (vai para .secrets)
EXTERNAL_API_KEY=${MANUAL:API key do servico externo}
# Contexto (vai para .env)
PROJECT_NAME=${CONTEXT:PROJECT}
BASE_URL=https://${CONTEXT:DOMAIN}Separacao automatica:
- Valores com
GENERATEouMANUAL→.secrets - Valores fixos e
CONTEXT→.env
.deploy.yml
Templates em configuracoes de staging e hooks.
project: meu-app
instances:
production:
domain: app.meusite.com.br
source:
type: dist
staging:
enabled: true
domain_template: "pr-${PR_NUMBER}.staging.${DOMAIN}"
container_template: "staging_${PROJECT}_pr${PR_NUMBER}"
hooks:
post_healthy:
- "echo Deploy ${VERSION} concluido"Exemplos Completos
Backend Flask
# .env.template
FLASK_ENV=production
DEBUG=false
LOG_LEVEL=info
# Database
DB_HOST=mysql
DB_PORT=3306
DB_NAME=app_${CONTEXT:PROJECT}
DB_USER=app_${CONTEXT:PROJECT}
DB_PASSWORD=${GENERATE:password:32}
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=${GENERATE:password:24}
# Seguranca
SECRET_KEY=${GENERATE:secret:64}
JWT_SECRET=${GENERATE:secret:48}
# Aplicacao
BASE_URL=https://${CONTEXT:DOMAIN}
PROJECT_NAME=${CONTEXT:PROJECT}
# Servicos externos
SMTP_PASSWORD=${MANUAL:Senha do servidor SMTP}
STRIPE_KEY=${MANUAL:Stripe API key (sk_live_...)}Frontend com Staging
# .deploy.yml
project: meu-frontend
image: registry.local/front-static:1.0
port: 80
networks:
- public
instances:
production:
domain: app.meusite.com.br
source:
type: dist
keep_versions: 3
staging:
domain_pattern: "pr-*.staging.meusite.com.br"
source:
type: pr
ephemeral: true
ttl_hours: 48
staging:
enabled: true
domain_template: "pr-${PR_NUMBER}.staging.${DOMAIN}"
container_template: "staging_${PROJECT}_pr${PR_NUMBER}"
max_instances: 5
ttl_hours: 48
hooks:
post_healthy:
- "curl -X POST https://api.slack.com/webhook -d '{\"text\":\"Deploy ${VERSION} em ${DOMAIN}\"}'"Precedencia e Resolucao
Ordem de Resolucao
- Variaveis de ambiente do sistema
- Valores em
.envexistente - Valores em
.secretsexistente - Templates (GENERATE, CONTEXT, MANUAL)
Escapando Variaveis
Para usar $ literal, escape com $$:
# .env.template
BASH_COMMAND=echo $$HOME
REGEX_PATTERN=^\$$[0-9]+Comandos Relacionados
# Ver variaveis atuais
runner env status --app /data/apps/meu-app
# Definir variavel
runner env set --app /data/apps/meu-app --key LOG_LEVEL --value debug
# Regenerar secret
runner env regenerate --app /data/apps/meu-app --key SECRET_KEY
# Validar variaveis obrigatorias
runner env validate --app /data/apps/meu-app --required "DB_HOST,DB_USER,DB_PASSWORD"Boas Praticas
- Nunca commitar secrets - Use
GENERATEouMANUAL - Prefira GENERATE - Evita erros humanos na criacao de senhas
- Use CONTEXT para consistencia - Dominio e projeto sempre sincronizados
- Documente MANUAL - Descricoes claras do que e esperado
- Tamanhos adequados - Secrets: 64+, Passwords: 32+, Tokens: 48+
By Borlot.com.br on 15/02/2026