05 — Deploy e Infraestrutura
Ambientes
| Ambiente | Propósito | Branch | URLs |
|---|---|---|---|
| Local | Dev | — | localhost (app :3001, service :3002, website :3000, backoffice :3003, hasura :8080) |
| Produção | Clientes | main | *.framework.forestbit.io |
Fonte canônica de domínios: packages/brand/src/config.ts → domains. Uso obrigatório e integração por app: 10-brand-kit.
Produção
- Provider: Digital Ocean
- Orquestração: Dokploy + Docker
- SSH: credenciais em
.envna raiz (SERVER_IP,SSH_USER); scripts carregam viascripts/lib/load-root-env.sh+scripts/lib/ssh-env.sh. Preferir./scripts/prod/server-ssh.shepnpm server:docker— ver.cursor/rules/server-ssh.mdcescripts/README.md
./scripts/prod/server-ssh.sh 'docker ps'
pnpm server:docker -- logs --tail 100 framework-service
Setup one-time: adicionar chave SSH default ao droplet na criação; definir SERVER_IP no .env.
Containers principais
| Container | Função |
|---|---|
framework-postgres | PostgreSQL |
framework-pgbouncer | Connection pooler (porta 6432) |
framework-redis | Redis |
framework-hasura | GraphQL |
framework-service | API |
framework-app | Dashboard |
framework-backoffice | Admin interno |
framework-website | Marketing |
Fonte: cloud/dokploy/apps.json — 8 Applications (postgres, redis, pgbouncer, hasura, service, app, backoffice, website). Sem Compose em produção.
Deploy: merge em main → Dokploy rebuild das Applications afetadas.
Ordem completa: postgres → redis → pgbouncer → hasura → service → app → backoffice → website
pnpm dokploy:health
./cloud/dokploy/deploy-hooks.sh env-templates production
Apps — portas e health checks
Frontend App (apps/app)
- Porta: 3001
- Domínio prod:
app.framework.forestbit.io - Build:
pnpm run build - Start:
node server.js - Health:
http://localhost:3001/
Variáveis: VITE_API_URL, VITE_HASURA_GRAPHQL_URL, VITE_LOGO_URL, VITE_APP_NAME, VITE_GOOGLE_CLIENT_ID
Backoffice (apps/backoffice)
- Porta: 3003
- Domínio prod:
backoffice.framework.forestbit.io - Build:
pnpm run build - Start:
node server.js - Health:
http://localhost:3003/
Variáveis: VITE_API_URL, VITE_HASURA_GRAPHQL_URL, VITE_LOGO_URL, VITE_APP_NAME, VITE_GOOGLE_CLIENT_ID
Backend Service (apps/service)
- Porta: 3002
- Build:
pnpm run build - Start:
pnpm start - Health:
http://localhost:3002/health
Variáveis: NODE_ENV, PORT, DATABASE_URL, HASURA_GRAPHQL_ENDPOINT, HASURA_ADMIN_SECRET, JWT_SECRET
Website (apps/website)
- Porta: 3000
- Build:
pnpm run build - Start:
node server.js - Health:
http://localhost:3000/healthz
Variáveis: NODE_ENV, PORT, NEXT_PUBLIC_API_URL
Deploy com Docker (local / manual)
docker build -f apps/app/Dockerfile -t framework-app:latest .
docker build -f apps/backoffice/Dockerfile -t framework-backoffice:latest .
docker build -f apps/service/Dockerfile -t framework-service:latest .
docker build -f apps/website/Dockerfile -t framework-website:latest .
Ordem recomendada: service → app → backoffice → website
Deploy produção (Dokploy)
Primeira vez (greenfield): cloud/BOOTSTRAP.md — DO, Dokploy install, GitHub, prompts IA.
Deploy contínuo (infra já no ar):
- Merge em
main - Dokploy build + deploy por app
- Health checks:
- app:
/ - backoffice:
/ - service:
/health - website:
/healthz - hasura:
/healthz
- app:
pnpm dokploy:health
./scripts/prod/server-ssh.sh 'docker ps'
Guia completo: cloud/BOOTSTRAP.md (greenfield) · cloud/README.md · Por serviço: cloud/apps/ · Dokploy: cloud/dokploy/README.md
Variáveis de ambiente
- Nunca commitar
.env .env.examplepor app- Secrets via Dokploy / painel
Verificação pós-deploy
- Health checks respondendo
- Logs sem erros
- URLs acessíveis
- Variáveis configuradas
Troubleshooting
| Problema | Ações |
|---|---|
| Build falha | Dependências, path do Dockerfile, logs do build |
| App não inicia | Env vars, logs, porta |
| Health check falha | Endpoint existe, timeout, processo rodando |
Runbooks
Rollback
<!-- Documentar passos -->Postgres backup
<!-- Frequência, restore -->Incidente service down
docker logs framework-service --tail 100- Verificar postgres/redis
- Escalar para founder se dados em risco
Links relacionados
- 07-security-observability
cloud/dokploy/README.md