DevOps - Deploy¶
Este documento descreve o processo completo de deploy do Billings Ease para produção.
Índice¶
- Visão Geral
- Plataformas
- Backend
- Frontend Web
- Banco de Dados
- Variáveis de Ambiente
- Processo de Deploy
Visão Geral¶
O Billings Ease utiliza Railway para deploy do backend e frontend web.
Plataformas: - Backend: Railway (Go) - Frontend Web: Railway (Static Site) - Banco de Dados: Railway PostgreSQL - Storage: Cloudflare R2
Plataformas¶
Railway¶
Serviços: - Backend API (Go) - Frontend Web (Static) - PostgreSQL Database
Vantagens: - Deploy automático via Git - Gerenciamento de variáveis de ambiente - Logs integrados - Escalabilidade automática
Backend¶
Configuração no Railway¶
1. Criar Novo Projeto: - Acessar Railway dashboard - Criar novo projeto - Conectar repositório Git
2. Adicionar Serviço:
- Adicionar serviço "Go"
- Configurar root directory: billings-ease-backend
3. Build Settings:
# Build Command
go build -o server ./cmd/api
# Start Command
./server
4. Variáveis de Ambiente: Ver seção Variáveis de Ambiente
Dockerfile (Alternativa)¶
Se usar Docker:
FROM golang:1.24-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o server ./cmd/api
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/server .
EXPOSE 8080
CMD ["./server"]
Frontend Web¶
Configuração no Railway¶
1. Adicionar Serviço:
- Adicionar serviço "Static Site"
- Configurar root directory: billings-ease-web
2. Build Settings:
# Build Command
npm install && npm run build
# Output Directory
dist
3. Variáveis de Ambiente:
VITE_API_URL=https://api.billings-ease.com/api
Build Local (Teste)¶
cd billings-ease-web
npm install
npm run build
# Arquivos em dist/
Banco de Dados¶
PostgreSQL no Railway¶
1. Adicionar Database: - Adicionar serviço "PostgreSQL" - Railway cria automaticamente
2. Obter Connection String:
- Railway fornece DATABASE_URL
- Usar no backend
3. Migrações: - Executar migrações manualmente após primeiro deploy - Ou configurar script de inicialização
Variáveis de Ambiente¶
Backend (Railway)¶
Obrigatórias:
# Database
DATABASE_URL=postgresql://user:pass@host:port/dbname
# JWT
JWT_SECRET=seu-secret-super-seguro-producao
JWT_REFRESH_SECRET=seu-refresh-secret-super-seguro-producao
# Server
PORT=8080
ENVIRONMENT=production
# CORS
CORS_ALLOWED_ORIGINS=https://app.billings-ease.com,https://billings-ease.com
# Frontend URL
FRONTEND_URL=https://app.billings-ease.com
BACKEND_URL=https://api.billings-ease.com
Opcionais (mas recomendadas):
# R2 Storage
R2_ACCOUNT_ID=your-account-id
R2_ACCESS_KEY_ID=your-access-key
R2_SECRET_ACCESS_KEY=your-secret-key
R2_BUCKET_NAME=billings-ease-symbols
R2_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com
R2_PUBLIC_URL=https://cdn.billings-ease.com
# Email (SendGrid)
SENDGRID_API_KEY=your-sendgrid-api-key
SENDGRID_FROM_EMAIL=noreply@billings-ease.com
# OAuth
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
APPLE_CLIENT_ID=your-apple-client-id
APPLE_TEAM_ID=your-apple-team-id
APPLE_KEY_ID=your-apple-key-id
APPLE_PRIVATE_KEY=your-apple-private-key
Frontend Web (Railway)¶
VITE_API_URL=https://api.billings-ease.com/api
Processo de Deploy¶
Deploy Inicial¶
1. Backend:
# 1. Conectar repositório no Railway
# 2. Configurar variáveis de ambiente
# 3. Deploy automático via Git push
git push origin main
2. Banco de Dados:
# 1. Railway cria PostgreSQL automaticamente
# 2. Obter DATABASE_URL
# 3. Configurar no backend
# 4. Executar migrações
3. Frontend:
# 1. Conectar repositório no Railway
# 2. Configurar VITE_API_URL
# 3. Deploy automático via Git push
Deploy Contínuo¶
Fluxo:
1. Push para main branch
2. Railway detecta mudanças
3. Build automático
4. Deploy automático
5. Health check
Verificar Deploy:
# Backend
curl https://api.billings-ease.com/health
# Frontend
# Acessar https://app.billings-ease.com
Rollback¶
Railway: - Dashboard → Deployments - Selecionar deploy anterior - Clicar em "Redeploy"
Ou via Git:
git revert HEAD
git push origin main
Migrações de Banco¶
Executar Migrações¶
Opção 1: Via Railway CLI
railway run go run ./cmd/migrate
Opção 2: Via Script
# Criar script de migração
# Executar no deploy inicial
Opção 3: Manual
# Conectar ao banco via Railway dashboard
# Executar SQL manualmente
Health Checks¶
Backend¶
Endpoint:
GET /health
Resposta:
{
"status": "ok",
"timestamp": "2024-01-15T10:30:00Z"
}
Railway:
- Configurar health check path: /health
- Intervalo: 30 segundos
Domínios Customizados¶
Configurar Domínio¶
Backend:
1. Railway → Settings → Domains
2. Adicionar domínio: api.billings-ease.com
3. Configurar DNS (CNAME)
Frontend:
1. Railway → Settings → Domains
2. Adicionar domínio: app.billings-ease.com
3. Configurar DNS (CNAME)
SSL/TLS¶
Railway: - SSL automático via Let's Encrypt - Renovação automática - Sem configuração adicional
Monitoramento¶
Logs¶
Railway Dashboard: - Ver logs em tempo real - Filtrar por serviço - Exportar logs
Métricas¶
Railway fornece: - CPU usage - Memory usage - Network traffic - Request count
Troubleshooting¶
Deploy Falha¶
Verificar: 1. Logs no Railway dashboard 2. Variáveis de ambiente configuradas 3. Build command correto 4. Dependências instaladas
Backend não inicia¶
Verificar:
1. DATABASE_URL configurado
2. JWT_SECRET configurado
3. Porta correta (Railway usa PORT env var)
Frontend não carrega¶
Verificar:
1. VITE_API_URL configurado
2. Build gerou arquivos em dist/
3. Output directory correto