Pular para conteúdo

Primeiro Deploy

Guia completo para fazer o primeiro deploy da integração.

Pré-requisitos

Antes de fazer deploy, certifique-se de que:

  • Código está commitado no Git
  • Variáveis de ambiente configuradas
  • Database criado e testado localmente
  • Migrations funcionando
  • Testes passando
  • Credenciais Saipos obtidas
  • Token Nayax configurado

Ambientes

Development (Local)

Para desenvolvimento local:

# Instalar dependências
npm install

# Configurar ambiente
cp .env.example .env
# Editar .env com suas configurações

# Database
createdb nayax_saipos
npx prisma migrate deploy
npm run seed

# Iniciar
npm run start:dev

Acesso: http://localhost:3000

Staging (Homologação)

Para ambiente de homologação:

# Instalar apenas prod dependencies
npm ci --only=production

# Migrations
npx prisma migrate deploy

# Build
npm run build

# Iniciar
npm run start:prod

Recomendado: Use Saipos homologação:

SAIPOS_BASE=https://homolog-order-api.saipos.com

Production (Produção)

Para produção com PM2:

# Instalar apenas prod dependencies
npm ci --only=production

# Migrations
DATABASE_URL="..." npx prisma migrate deploy

# Build otimizado
NODE_ENV=production npm run build

# Iniciar com PM2
pm2 start dist/main.js \
  --name nayax-saipos \
  --instances 2 \
  --env production

# Salvar configuração PM2
pm2 save

# Auto-start no boot
pm2 startup

Deploy Passo a Passo

1. Preparar Servidor

# Atualizar sistema
sudo apt update && sudo apt upgrade -y

# Instalar Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# Instalar PostgreSQL 15
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y postgresql-15

# Instalar PM2
sudo npm install -g pm2

2. Configurar Database

# Criar database
sudo -u postgres psql

CREATE DATABASE nayax_saipos;
CREATE USER nayax_user WITH PASSWORD 'senha_forte';
GRANT ALL PRIVILEGES ON DATABASE nayax_saipos TO nayax_user;
\q

3. Clonar Repositório

# Clone
git clone https://github.com/seu-usuario/nayax-saipos.git
cd nayax-saipos

# Checkout branch específica (se necessário)
git checkout production

4. Configurar Variáveis de Ambiente

# Copiar template
cp .env.example .env

# Editar com variáveis de produção
nano .env
# Database
DATABASE_URL="postgresql://nayax_user:senha_forte@localhost:5432/nayax_saipos"

# Server
PORT=3000
NODE_ENV=production

# JWT
JWT_SECRET="gere_uma_chave_forte_aqui"
JWT_EXPIRES_IN="7d"

# Nayax
NAYAX_BEARER_TOKEN="token_real_do_nayax"

# Saipos (PRODUÇÃO)
SAIPOS_BASE="https://order-api.saipos.com"

# Jobs
PROCESSING_TTL_MS=120000
LOG_SAIPOS_BODY=false

# Logs
LOG_LEVEL=warn

Segurança

  • Nunca use senhas fracas em produção
  • Gere JWT_SECRET forte: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
  • Use LOG_LEVEL=warn em produção

5. Instalar e Build

# Instalar dependencies (apenas produção)
npm ci --only=production

# Gerar Prisma Client
npx prisma generate

# Build TypeScript
npm run build

# Verificar build
ls -la dist/

6. Executar Migrations

# Aplicar migrations
npx prisma migrate deploy

# Verificar schema
npx prisma db pull

# Opcional: popular dados iniciais
npm run seed

7. Testar Localmente

Antes de iniciar com PM2, teste manualmente:

# Start manual
npm run start:prod

# Em outro terminal, testar
curl http://localhost:3000/health

# Deve retornar:
# {"status":"ok","timestamp":"..."}

Se funcionar, pare com Ctrl+C.

8. Iniciar com PM2

# Start com PM2
pm2 start dist/main.js \
  --name nayax-saipos \
  --instances 2 \
  --env production \
  --log logs/pm2.log \
  --error logs/pm2-error.log

# Verificar status
pm2 status

# Ver logs
pm2 logs nayax-saipos

# Salvar configuração
pm2 save

# Auto-start no boot
pm2 startup
# Copie e execute o comando mostrado

9. Configurar Nginx (Reverse Proxy)

# Instalar Nginx
sudo apt install nginx -y

# Criar configuração
sudo nano /etc/nginx/sites-available/nayax-saipos
server {
    listen 80;
    server_name seu-dominio.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
# Habilitar site
sudo ln -s /etc/nginx/sites-available/nayax-saipos /etc/nginx/sites-enabled/

# Testar configuração
sudo nginx -t

# Reload Nginx
sudo systemctl reload nginx

10. Configurar SSL (Let's Encrypt)

# Instalar Certbot
sudo apt install certbot python3-certbot-nginx -y

# Obter certificado
sudo certbot --nginx -d seu-dominio.com

# Auto-renewal (já configurado automaticamente)
sudo certbot renew --dry-run

11. Configurar Firewall

# UFW
sudo ufw allow 22    # SSH
sudo ufw allow 80    # HTTP
sudo ufw allow 443   # HTTPS
sudo ufw enable
sudo ufw status

12. Verificar Deploy

# Health check
curl https://seu-dominio.com/health

# Testar webhook
curl -X POST https://seu-dominio.com/webhooks/nayax \
  -H "Authorization: Bearer $NAYAX_BEARER_TOKEN" \
  -H "Content-Type: application/json" \
  -d @test-event.json

13. Configurar Webhook no Nayax

Acesse o painel Nayax e configure:

  • URL: https://seu-dominio.com/webhooks/nayax
  • Method: POST
  • Headers:
  • Authorization: Bearer SEU_NAYAX_TOKEN
  • Content-Type: application/json

14. Monitoramento

# Ver logs PM2
pm2 logs nayax-saipos

# Monitoramento em tempo real
pm2 monit

# Ver status
pm2 status

# Restart se necessário
pm2 restart nayax-saipos

Checklist de Deploy

Use este checklist para garantir que tudo está ok:

Pré-Deploy

  • Código testado localmente
  • Testes automatizados passando
  • Database backup criado
  • Variáveis de ambiente configuradas
  • Credenciais Saipos validadas
  • Token Nayax configurado

Durante Deploy

  • Servidor preparado (Node, PostgreSQL)
  • Database criado
  • Código clonado e build feito
  • Migrations aplicadas
  • PM2 configurado
  • Nginx configurado
  • SSL configurado
  • Firewall configurado

Pós-Deploy

  • Health check funcionando
  • Webhook testado
  • Logs sem erros
  • Webhook Nayax configurado
  • Primeiro pedido real testado
  • Monitoramento configurado
  • Backup automatizado configurado

Rollback

Se algo der errado, faça rollback:

# Parar aplicação
pm2 stop nayax-saipos

# Voltar para versão anterior
git checkout versao-anterior

# Rebuild
npm ci --only=production
npm run build

# Reverter migrations (se necessário)
npx prisma migrate resolve --rolled-back <migration_name>

# Restart
pm2 restart nayax-saipos

Backup Automático

Configure backup diário do banco:

# Criar script de backup
nano /home/usuario/backup.sh
#!/bin/bash
BACKUP_DIR="/home/usuario/backups"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR
pg_dump -U nayax_user nayax_saipos > "$BACKUP_DIR/backup_$DATE.sql"

# Manter apenas últimos 7 dias
find $BACKUP_DIR -name "backup_*.sql" -mtime +7 -delete
# Dar permissão
chmod +x /home/usuario/backup.sh

# Adicionar ao cron (diário às 2AM)
crontab -e

# Adicionar linha:
0 2 * * * /home/usuario/backup.sh

Monitoramento de Produção

PM2 Plus (Opcional)

# Link com PM2 Plus
pm2 link <secret> <public>

# Monitoramento web
# https://app.pm2.io

Logs

# Rotação de logs
pm2 install pm2-logrotate

# Configurar
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

Alertas

Configure alertas para: - CPU > 80% - Memória > 80% - Aplicação caiu - Jobs acumulando (> 100 PENDING) - Taxa de erro > 5%

Deploy Contínuo (CI/CD)

Exemplo com GitHub Actions:

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [production]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '20'

      - run: npm ci
      - run: npm run build
      - run: npm test

      - name: Deploy to server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /home/usuario/nayax-saipos
            git pull
            npm ci --only=production
            npm run build
            npx prisma migrate deploy
            pm2 restart nayax-saipos

Troubleshooting de Deploy

Erro: "Port 3000 already in use"

# Encontrar processo
lsof -i :3000

# Matar processo
kill -9 <PID>

Erro: "Cannot connect to database"

# Verificar PostgreSQL
sudo systemctl status postgresql

# Testar conexão
psql -U nayax_user -d nayax_saipos -h localhost

# Ver logs
sudo tail -f /var/log/postgresql/postgresql-15-main.log

PM2 não inicia aplicação

# Ver logs de erro
pm2 logs nayax-saipos --err

# Deletar e recriar
pm2 delete nayax-saipos
pm2 start dist/main.js --name nayax-saipos

Próximos Passos