Ir para o conteúdo

DevOps - Deploy

Este documento descreve o processo completo de deploy do Billings Ease para produção.

Índice

  1. Visão Geral
  2. Plataformas
  3. Backend
  4. Frontend Web
  5. Banco de Dados
  6. Variáveis de Ambiente
  7. 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


Referências