Primeiro Deploy
Este guia mostra como fazer seu primeiro deploy completo usando o Runner.
Pre-requisitos
- Runner instalado e configurado (
runner initexecutado) - Repositorio Git com seu codigo
- Docker e Traefik rodando no servidor
Passo 1: Preparar Repositorio
Criar Branch dist
cd /caminho/do/projeto
git checkout -b dist
git push -u origin dist
git checkout dev # Voltar para desenvolvimentoCriar .deploy.yml
Crie o arquivo .deploy.yml na raiz:
project: meu-app
port: 8000
networks:
- public
environment:
APP_ENV: production
DB_HOST: "{{::MySQL Host?mysql}}"
DB_NAME: "{{::Database name}}"
secrets:
DB_PASSWORD: "{RANDOM}"
JWT_SECRET: "${GENERATE:hex:64}"
healthcheck:
path: /health # endpoint a ser implementado pela app (HTTP 2xx)
interval: 10s
timeout: 5s
retries: 3
# Para imagens onde generator detecta tipo (nginx/caddy → /, php-fpm → tcp:9000),
# o default é type-aware desde v2.18.2. Override aqui se sua app usa outro path.
# v2.16.0+: o repo é resolvido automaticamente do state file
# (registrado via `runner add --repo`). O bloco `github:` no
# .deploy.yml foi DEPRECATED — não é mais necessário aqui.
version:
source: file
file: package.json
field: version
# Desde v2.18.2, o generator default emite `source: git-commit`
# (deploys versionados via SHA, sem precisar `version` field em arquivo).
# Use `source: file` apenas se quer versão semântica explícita do package.json.
instances:
production:
domain: app.meusite.com.br
source:
type: dist
keep_versions: 3Adapte conforme seu projeto:
project: Nome unico do projetoport: Porta que sua app escutadomain: Dominio de producaoversion.file: Arquivo com a versao (package.json, version.json, etc)environment/secrets: Variaveis de ambiente com suporte a prompts e valores gerados. Veja Env Wizard para detalhes
Commit da Configuracao
git add .deploy.yml
git commit -m "chore: adiciona configuracao CI/CD"
git push origin devPasso 2: Build do Projeto
Frontend (React, Vue, etc)
npm run buildBackend (Flask, Node, etc)
# Para Python com src/
# Nao precisa build, apenas organize o codigo em src/
# Para Node
npm run build # Se necessarioPasso 3: Preparar Branch dist
# Mudar para dist
git checkout dist
# Limpar conteudo antigo
rm -rf dist/ src/ package.json version.json
# Copiar artefatos
# Para frontend:
cp -r /caminho/build/dist ./dist/
# Para backend Python:
cp -r /caminho/src ./src/
cp requirements.txt ./
cp version.json ./ # Se usar
# Copiar configuracao
cp /caminho/.deploy.yml ./
# Commit
git add .
git commit -m "deploy: v1.0.0"
git push origin distPasso 4: Registrar App no Runner
No servidor de producao:
runner add --repo seu-usuario/meu-app --branch dist --token ghp_xxx --ckey "minha-chave-secreta"Nota v2.12.0+:
--branche obrigatorio.--repoaceita URLs (ex:https://github.com/seu-usuario/meu-app).--ckeysem valor gera random automaticamente.
Este comando:
- Clona o repositorio em
/data/apps/meu-app/ - Faz checkout da branch indicada em
--branch - Registra a app no estado do Runner
- Se
secrets.encexiste no repo, restaura.env/.secretsusando a ckey
A flag --ckey permite recuperacao zero-touch dos secrets em caso de perda do servidor. Guarde a ckey em um password manager.
Passo 5: Executar Deploy
Deploy Manual (Primeiro)
runner deploy --app /data/apps/seu-usuario_meu-appAcompanhar o Deploy
# Ver logs em tempo real
runner logs tail --app /data/apps/seu-usuario_meu-app
# Ver status
runner health --app /data/apps/seu-usuario_meu-appPasso 6: Verificar
Testar Acesso
curl https://app.meusite.com.br/healthVerificar Container
docker ps | grep meu-appVerificar Traefik
ls /etc/traefik/dynamic/ | grep meu-appPasso 7: Configurar Cron
Para deploys automaticos, adicione ao crontab:
crontab -e*/5 * * * * /opt/runner/runner fetch --deploy --json >> /var/log/runner-fetch.json 2>&1Proximo Deploy
Para deployar novas versoes:
# 1. Desenvolver em dev
git checkout dev
# ... fazer alteracoes ...
git commit -m "feat: nova funcionalidade"
git push origin dev
# 2. Release para main
git checkout main
git merge dev --no-ff -m "release: v1.1.0"
git tag -a v1.1.0 -m "Release v1.1.0"
git push origin main --tags
# 3. Build e deploy
npm run build
git checkout dist
rm -rf dist/ && cp -r /build/dist ./dist/
git add . && git commit -m "deploy: v1.1.0"
git push origin dist
# Runner detecta e deploya automaticamente (via cron)
# Ou force manualmente:
runner fetch --deployTroubleshooting
Deploy nao inicia
# Verificar se app esta registrada
runner list
# Verificar configuracao
runner validate --file /data/apps/seu-usuario_meu-app/.deploy.ymlHealth check falha
# Ver logs do container
docker logs seu-usuario_meu-app_production
# Verificar endpoint
curl http://localhost:8000/health # Dentro do containerRollback
Se algo der errado:
runner rollback --app /data/apps/seu-usuario_meu-appEstrutura Final
Apos o deploy, a estrutura sera:
/data/apps/seu-usuario_meu-app/
├── .deploy.yml
├── .env
├── .secrets
├── .runner/
│ └── secrets.enc # Secrets encriptados (se ckey configurada)
└── src/
└── production/
└── v1.0.0/
└── current -> v1.0.0Proximos Passos
- Secrets e Encriptacao - Recuperacao zero-touch
- Canary Deployment - Deploy gradual
- Staging de PRs - Ambientes de teste
- Configurando Notificacoes - Telegram/Discord
By Borlot.com.br on 12/02/2026