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:
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¶
# 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=warnem 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_TOKENContent-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:
#!/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)¶
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"¶
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