12 KiB
12 KiB
BMAD Web - Guia de Deploy
Este guia cobre todas as opcoes de deploy para a aplicacao BMAD Web.
Sumario
- Arquitetura de Deploy
- Opcao 1: Vercel + Railway (Recomendado)
- Opcao 2: Docker Compose (Self-hosted)
- Opcao 3: Kubernetes
- Configuracao de Banco de Dados
- Variaveis de Ambiente
- CI/CD com GitHub Actions
- Monitoramento
- Checklist de Producao
Arquitetura de Deploy
┌─────────────────────────────────────────────────────────────────────┐
│ PRODUCAO │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ Vercel │ │ Railway │ │ Supabase │ │
│ │ (Next.js) │◄───────►│ (API) │◄───────►│ (Postgres)│ │
│ │ │ │ │ │ │ │
│ │ Frontend │ REST │ Backend │ SQL │ Database │ │
│ │ + CDN │ + WS │ + Socket │ │ + Auth │ │
│ └──────────────┘ └──────────────┘ └────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ Cloudflare │ │ Upstash │ │ S3 │ │
│ │ (DNS) │ │ (Redis) │ │ (Assets) │ │
│ └──────────────┘ └──────────────┘ └────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Opcao 1: Vercel + Railway (Recomendado)
A opcao mais simples para comecar. Zero configuracao de infraestrutura.
1.1 Deploy do Frontend (Vercel)
Passo 1: Conectar repositorio
# Instalar Vercel CLI
npm i -g vercel
# Login
vercel login
# Na pasta bmad-web/apps/web
cd bmad-web/apps/web
vercel
Passo 2: Configurar no Dashboard Vercel
- Acesse https://vercel.com/dashboard
- Import o repositorio do GitHub
- Configure:
- Framework Preset: Next.js
- Root Directory:
bmad-web/apps/web - Build Command:
npm run build - Output Directory:
.next
Passo 3: Variaveis de Ambiente
No dashboard Vercel, adicione:
NEXT_PUBLIC_API_URL=https://sua-api.railway.app
NEXT_PUBLIC_WS_URL=wss://sua-api.railway.app
NEXT_PUBLIC_APP_URL=https://seu-app.vercel.app
Passo 4: Deploy
# Deploy de producao
vercel --prod
1.2 Deploy da API (Railway)
Passo 1: Criar projeto Railway
- Acesse https://railway.app
- New Project > Deploy from GitHub repo
- Selecione o repositorio
Passo 2: Configurar servico
No dashboard Railway:
- Root Directory:
bmad-web/apps/api - Build Command:
npm run build - Start Command:
npm start
Passo 3: Variaveis de Ambiente
NODE_ENV=production
PORT=4000
FRONTEND_URL=https://seu-app.vercel.app
JWT_SECRET=sua-chave-super-secreta-aqui
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
BMAD_ROOT=/app/../../..
Passo 4: Adicionar Postgres (Railway)
- No projeto Railway, clique em "New"
- Selecione "Database" > "PostgreSQL"
- Copie a DATABASE_URL gerada
Passo 5: Adicionar Redis (Upstash)
- Acesse https://upstash.com
- Crie um banco Redis
- Copie a REDIS_URL
1.3 Comandos Rapidos (Vercel + Railway)
# Frontend
cd bmad-web/apps/web
vercel --prod
# Backend (Railway CLI)
npm i -g @railway/cli
railway login
cd bmad-web/apps/api
railway up
Opcao 2: Docker Compose (Self-hosted)
Para quem quer controle total ou rodar on-premise.
2.1 Arquivos Docker
Os arquivos ja estao criados:
bmad-web/Dockerfile.web- Frontendbmad-web/Dockerfile.api- Backendbmad-web/docker-compose.yml- Orquestracaobmad-web/docker-compose.prod.yml- Producao
2.2 Build e Run Local
cd bmad-web
# Desenvolvimento
docker-compose up -d
# Producao
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
2.3 Deploy em VPS (DigitalOcean, Hetzner, etc.)
# 1. SSH na VPS
ssh root@seu-servidor
# 2. Instalar Docker
curl -fsSL https://get.docker.com | sh
# 3. Clonar repositorio
git clone https://github.com/seu-usuario/BMAD-METHOD.git
cd BMAD-METHOD/bmad-web
# 4. Configurar ambiente
cp .env.example .env
nano .env # Editar variaveis
# 5. Subir servicos
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# 6. Configurar Nginx (proxy reverso)
apt install nginx
# Copiar config do nginx.conf
2.4 Com Traefik (HTTPS automatico)
# Usar docker-compose.traefik.yml para HTTPS automatico
docker-compose -f docker-compose.yml -f docker-compose.traefik.yml up -d
Opcao 3: Kubernetes
Para escala enterprise.
3.1 Estrutura
bmad-web/k8s/
├── namespace.yaml
├── configmap.yaml
├── secrets.yaml
├── web-deployment.yaml
├── api-deployment.yaml
├── postgres-deployment.yaml
├── redis-deployment.yaml
├── ingress.yaml
└── hpa.yaml
3.2 Deploy
# Criar namespace
kubectl apply -f k8s/namespace.yaml
# Aplicar configs
kubectl apply -f k8s/
# Verificar status
kubectl get pods -n bmad
Configuracao de Banco de Dados
Opcao A: Supabase (Recomendado)
- Crie conta em https://supabase.com
- Crie novo projeto
- Copie a connection string:
DATABASE_URL=postgresql://postgres:[senha]@db.[ref].supabase.co:5432/postgres
Opcao B: PlanetScale (MySQL)
- Crie conta em https://planetscale.com
- Crie database
- Copie connection string
Opcao C: Neon (Postgres Serverless)
- Crie conta em https://neon.tech
- Crie projeto
- Copie connection string
Migrations
cd bmad-web/apps/api
# Gerar cliente Prisma
npx prisma generate
# Push schema para banco
npx prisma db push
# Ou usar migrations
npx prisma migrate deploy
Variaveis de Ambiente
Frontend (.env.local)
# API
NEXT_PUBLIC_API_URL=https://api.bmad.app
NEXT_PUBLIC_WS_URL=wss://api.bmad.app
# App
NEXT_PUBLIC_APP_URL=https://bmad.app
NEXT_PUBLIC_APP_NAME=BMAD
# Analytics (opcional)
NEXT_PUBLIC_MIXPANEL_TOKEN=xxx
NEXT_PUBLIC_GA_ID=G-xxx
# Feature Flags (opcional)
NEXT_PUBLIC_ENABLE_BILLING=true
Backend (.env)
# Server
NODE_ENV=production
PORT=4000
# URLs
FRONTEND_URL=https://bmad.app
# Auth
JWT_SECRET=sua-chave-jwt-muito-secreta-minimo-32-chars
# Database
DATABASE_URL=postgresql://user:pass@host:5432/bmad
# Redis
REDIS_URL=redis://default:pass@host:6379
# BMAD Core
BMAD_ROOT=/app/bmad-core
# AI Providers
OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
# Stripe (billing)
STRIPE_SECRET_KEY=sk_live_xxx
STRIPE_WEBHOOK_SECRET=whsec_xxx
# Email (opcional)
SMTP_HOST=smtp.sendgrid.net
SMTP_USER=apikey
SMTP_PASS=SG.xxx
# Monitoring (opcional)
SENTRY_DSN=https://xxx@sentry.io/xxx
Gerar JWT_SECRET Seguro
openssl rand -base64 32
CI/CD com GitHub Actions
Arquivo: .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: cd bmad-web && npm ci
- name: Lint
run: cd bmad-web && npm run lint
- name: Test
run: cd bmad-web && npm test
deploy-frontend:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
working-directory: bmad-web/apps/web
vercel-args: '--prod'
deploy-backend:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: railwayapp/railway-action@v1
with:
railway-token: ${{ secrets.RAILWAY_TOKEN }}
service: api
Monitoramento
Sentry (Error Tracking)
# Instalar
npm install @sentry/nextjs @sentry/node
# Configurar em next.config.js e api/src/index.ts
Uptime Monitoring
- Better Uptime: https://betteruptime.com
- UptimeRobot: https://uptimerobot.com
Endpoints para monitorar:
https://bmad.app(frontend)https://api.bmad.app/health(backend)
Analytics
- Mixpanel: Eventos de produto
- Google Analytics: Trafego
- PostHog: Open-source alternativa
Checklist de Producao
Seguranca
- JWT_SECRET forte (32+ chars)
- HTTPS em todos os endpoints
- Rate limiting configurado
- CORS configurado corretamente
- Headers de seguranca (helmet)
- Variaveis sensiveis em secrets manager
Performance
- CDN para assets estaticos
- Cache Redis funcionando
- Compressao gzip habilitada
- Images otimizadas (next/image)
- Bundle size otimizado
Banco de Dados
- Backups automaticos configurados
- Connection pooling (PgBouncer)
- Indices criados para queries frequentes
- SSL habilitado na conexao
Monitoramento
- Error tracking (Sentry)
- Uptime monitoring
- Log aggregation
- Alertas configurados
Legal/Compliance
- Termos de Servico
- Politica de Privacidade
- Cookie consent
- LGPD/GDPR compliance
Troubleshooting
Erro: "WebSocket connection failed"
# Verificar se WebSocket esta habilitado no Railway/Vercel
# Railway: ja suporta nativamente
# Vercel: usar Vercel Serverless Functions com upgrade
Erro: "Database connection timeout"
# Verificar DATABASE_URL
# Adicionar ?connect_timeout=10&pool_timeout=10
DATABASE_URL=postgresql://...?connect_timeout=10
Erro: "JWT invalid"
# Verificar se JWT_SECRET e o mesmo em todos os servicos
# Verificar timezone dos servidores
Build falha no Vercel
# Verificar se todas as deps estao no package.json
# Verificar se NEXT_PUBLIC_* estao configuradas
# Verificar Root Directory
Comandos Uteis
# Logs da API (Railway)
railway logs
# Logs do Frontend (Vercel)
vercel logs
# SSH no container Docker
docker exec -it bmad-api sh
# Prisma Studio (visualizar banco)
npx prisma studio
# Reset do banco (CUIDADO!)
npx prisma migrate reset
Custos Estimados
Startup (0-1000 usuarios)
| Servico | Custo/mes |
|---|---|
| Vercel (Hobby) | $0 |
| Railway (Starter) | $5 |
| Supabase (Free) | $0 |
| Upstash (Free) | $0 |
| Total | $5/mes |
Growth (1000-10000 usuarios)
| Servico | Custo/mes |
|---|---|
| Vercel (Pro) | $20 |
| Railway (Pro) | $20 |
| Supabase (Pro) | $25 |
| Upstash (Pay-as-go) | $10 |
| Total | $75/mes |
Scale (10000+ usuarios)
| Servico | Custo/mes |
|---|---|
| Vercel (Enterprise) | $150+ |
| Railway (Team) | $50+ |
| Supabase (Team) | $599+ |
| Redis (Managed) | $50+ |
| Total | $850+/mes |