BMAD-METHOD/bmad-web/docs/deployment-guide.md

567 lines
12 KiB
Markdown

# BMAD Web - Guia de Deploy
Este guia cobre todas as opcoes de deploy para a aplicacao BMAD Web.
---
## Sumario
1. [Arquitetura de Deploy](#arquitetura-de-deploy)
2. [Opcao 1: Vercel + Railway (Recomendado)](#opcao-1-vercel--railway-recomendado)
3. [Opcao 2: Docker Compose (Self-hosted)](#opcao-2-docker-compose-self-hosted)
4. [Opcao 3: Kubernetes](#opcao-3-kubernetes)
5. [Configuracao de Banco de Dados](#configuracao-de-banco-de-dados)
6. [Variaveis de Ambiente](#variaveis-de-ambiente)
7. [CI/CD com GitHub Actions](#cicd-com-github-actions)
8. [Monitoramento](#monitoramento)
9. [Checklist de Producao](#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
```bash
# 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
1. Acesse https://vercel.com/dashboard
2. Import o repositorio do GitHub
3. 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
```bash
# Deploy de producao
vercel --prod
```
---
### 1.2 Deploy da API (Railway)
#### Passo 1: Criar projeto Railway
1. Acesse https://railway.app
2. New Project > Deploy from GitHub repo
3. Selecione o repositorio
#### Passo 2: Configurar servico
No dashboard Railway:
1. **Root Directory**: `bmad-web/apps/api`
2. **Build Command**: `npm run build`
3. **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)
1. No projeto Railway, clique em "New"
2. Selecione "Database" > "PostgreSQL"
3. Copie a DATABASE_URL gerada
#### Passo 5: Adicionar Redis (Upstash)
1. Acesse https://upstash.com
2. Crie um banco Redis
3. Copie a REDIS_URL
---
### 1.3 Comandos Rapidos (Vercel + Railway)
```bash
# 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` - Frontend
- `bmad-web/Dockerfile.api` - Backend
- `bmad-web/docker-compose.yml` - Orquestracao
- `bmad-web/docker-compose.prod.yml` - Producao
### 2.2 Build e Run Local
```bash
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.)
```bash
# 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)
```bash
# 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
```bash
# 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)
1. Crie conta em https://supabase.com
2. Crie novo projeto
3. Copie a connection string:
```
DATABASE_URL=postgresql://postgres:[senha]@db.[ref].supabase.co:5432/postgres
```
### Opcao B: PlanetScale (MySQL)
1. Crie conta em https://planetscale.com
2. Crie database
3. Copie connection string
### Opcao C: Neon (Postgres Serverless)
1. Crie conta em https://neon.tech
2. Crie projeto
3. Copie connection string
### Migrations
```bash
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)
```bash
# 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)
```bash
# 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
```bash
openssl rand -base64 32
```
---
## CI/CD com GitHub Actions
### Arquivo: `.github/workflows/deploy.yml`
```yaml
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)
```bash
# 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"
```bash
# Verificar se WebSocket esta habilitado no Railway/Vercel
# Railway: ja suporta nativamente
# Vercel: usar Vercel Serverless Functions com upgrade
```
### Erro: "Database connection timeout"
```bash
# Verificar DATABASE_URL
# Adicionar ?connect_timeout=10&pool_timeout=10
DATABASE_URL=postgresql://...?connect_timeout=10
```
### Erro: "JWT invalid"
```bash
# Verificar se JWT_SECRET e o mesmo em todos os servicos
# Verificar timezone dos servidores
```
### Build falha no Vercel
```bash
# Verificar se todas as deps estao no package.json
# Verificar se NEXT_PUBLIC_* estao configuradas
# Verificar Root Directory
```
---
## Comandos Uteis
```bash
# 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** |