Guia de Deploy em VPS

Voltar

Guia de Deploy para VPS - WhatsApp API SaaS

Este guia mostra como fazer o deploy da aplicação WhatsApp API SaaS em um servidor VPS (Ubuntu/Debian).

📋 Pré-requisitos

🚀 Passo a Passo

1. Conectar ao Servidor VPS

ssh root@seu-ip-do-servidor
# ou
ssh usuario@seu-ip-do-servidor

2. Atualizar o Sistema

sudo apt update && sudo apt upgrade -y

3. Instalar Node.js e NPM

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

# Verificar instalação
node --version
npm --version

4. Instalar PM2 (Gerenciador de Processos)

sudo npm install -g pm2

5. Instalar Nginx (Proxy Reverso)

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

6. Instalar Certbot (SSL/HTTPS)

sudo apt install certbot python3-certbot-nginx -y

7. Preparar o Projeto

# Criar diretório para a aplicação
sudo mkdir -p /var/www/whatsapp-api
sudo chown -R $USER:$USER /var/www/whatsapp-api

# Navegar para o diretório
cd /var/www/whatsapp-api

8. Enviar Código para o Servidor

Opção A: Via Git (Recomendado)

# Instalar Git
sudo apt install git -y

# Clonar repositório (se tiver)
git clone seu-repositorio.git .

# Ou fazer upload via SCP do seu computador local:
# scp -r /caminho/local/projeto/* usuario@servidor:/var/www/whatsapp-api/

Opção B: Via SCP (do seu computador local)

# No seu computador local
scp -r /caminho/do/projeto/* root@seu-ip:/var/www/whatsapp-api/

9. Instalar Dependências

cd /var/www/whatsapp-api
npm install --production

10. Configurar Variáveis de Ambiente

# Criar arquivo .env
nano .env

Adicione as seguintes variáveis:

# Porta da aplicação (use uma porta interna, Nginx fará proxy)
PORT=3000

# URL base do webhook (seu domínio)
BASE_WEBHOOK_URL=https://seu-dominio.com/webhook

# Chave secreta JWT (GERE UMA CHAVE FORTE)
JWT_SECRET=SUA_CHAVE_SECRETA_AQUI_GERE_UMA_FORTE

# Chave de admin
ADMIN_API_KEY=SUA_CHAVE_ADMIN_FORTE_AQUI

# API Key global (opcional, para compatibilidade)
API_KEY=SUA_API_KEY_GLOBAL

# Configurações de sessão
SESSIONS_PATH=./sessions
SET_MESSAGES_AS_SEEN=TRUE
MAX_ATTACHMENT_SIZE=10000000

# Swagger
ENABLE_SWAGGER_ENDPOINT=TRUE

# Recuperação de sessões
RECOVER_SESSIONS=TRUE

# Chrome/Chromium (se necessário)
# CHROME_BIN=/usr/bin/chromium-browser

Gerar chaves seguras:

# Gerar JWT_SECRET
openssl rand -base64 32

# Gerar ADMIN_API_KEY
openssl rand -base64 24

11. Instalar Chromium (Necessário para WhatsApp Web)

# Instalar dependências do Chromium
sudo apt install -y \
    chromium-browser \
    chromium-chromedriver \
    fonts-liberation \
    libappindicator3-1 \
    libasound2 \
    libatk-bridge2.0-0 \
    libatk1.0-0 \
    libcups2 \
    libdbus-1-3 \
    libdrm2 \
    libgbm1 \
    libgtk-3-0 \
    libnspr4 \
    libnss3 \
    libx11-xcb1 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    xdg-utils

# Adicionar ao .env
echo "CHROME_BIN=/usr/bin/chromium-browser" >> .env

12. Configurar PM2

# Iniciar aplicação com PM2
pm2 start server.js --name whatsapp-api

# Salvar configuração do PM2
pm2 save

# Configurar PM2 para iniciar no boot
pm2 startup
# Execute o comando que aparecer (algo como: sudo env PATH=...)

13. Configurar Nginx

# Criar configuração do Nginx
sudo nano /etc/nginx/sites-available/whatsapp-api

Adicione:

server {
    listen 80;
    server_name seu-dominio.com www.seu-dominio.com;

    # Tamanho máximo de upload
    client_max_body_size 50M;

    # Proxy para aplicação Node.js
    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;
        
        # Timeouts para WebSocket (se necessário)
        proxy_read_timeout 86400;
    }

    # Logs
    access_log /var/log/nginx/whatsapp-api-access.log;
    error_log /var/log/nginx/whatsapp-api-error.log;
}

Ativar configuração:

# Criar link simbólico
sudo ln -s /etc/nginx/sites-available/whatsapp-api /etc/nginx/sites-enabled/

# Remover configuração padrão (opcional)
sudo rm /etc/nginx/sites-enabled/default

# Testar configuração
sudo nginx -t

# Reiniciar Nginx
sudo systemctl restart nginx

14. Configurar SSL/HTTPS (Let's Encrypt)

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

# Renovação automática (já configurado automaticamente)
sudo certbot renew --dry-run

15. Configurar Firewall

# Instalar UFW (se não estiver instalado)
sudo apt install ufw -y

# Permitir SSH
sudo ufw allow 22/tcp

# Permitir HTTP e HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Ativar firewall
sudo ufw enable

# Verificar status
sudo ufw status

16. Criar Diretórios Necessários

# Criar diretório de sessões
mkdir -p /var/www/whatsapp-api/sessions
chmod 755 /var/www/whatsapp-api/sessions

# Criar diretório de logs (se necessário)
mkdir -p /var/www/whatsapp-api/logs

17. Verificar Funcionamento

# Verificar status do PM2
pm2 status

# Ver logs
pm2 logs whatsapp-api

# Verificar Nginx
sudo systemctl status nginx

# Testar aplicação
curl http://localhost:3000/ping

18. Comandos Úteis

# Reiniciar aplicação
pm2 restart whatsapp-api

# Parar aplicação
pm2 stop whatsapp-api

# Ver logs em tempo real
pm2 logs whatsapp-api

# Monitorar recursos
pm2 monit

# Reiniciar Nginx
sudo systemctl restart nginx

# Ver logs do Nginx
sudo tail -f /var/log/nginx/whatsapp-api-error.log

🔧 Configurações Adicionais

Configurar Backup Automático

# Criar script de backup
nano /usr/local/bin/backup-whatsapp-api.sh

Adicione:

#!/bin/bash
BACKUP_DIR="/backup/whatsapp-api"
DATE=$(date +%Y%m%d_%H%M%S)
SOURCE_DIR="/var/www/whatsapp-api"

mkdir -p $BACKUP_DIR

# Backup do banco de dados
cp $SOURCE_DIR/database.db $BACKUP_DIR/database_$DATE.db

# Backup das sessões
tar -czf $BACKUP_DIR/sessions_$DATE.tar.gz $SOURCE_DIR/sessions/

# Manter apenas últimos 7 dias
find $BACKUP_DIR -type f -mtime +7 -delete

echo "Backup concluído: $DATE"

Tornar executável:

chmod +x /usr/local/bin/backup-whatsapp-api.sh

# Adicionar ao crontab (backup diário às 2h)
crontab -e
# Adicionar linha:
0 2 * * * /usr/local/bin/backup-whatsapp-api.sh

Monitoramento com PM2

# Instalar PM2 monitoring (opcional)
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

🐛 Troubleshooting

Aplicação não inicia

# Verificar logs
pm2 logs whatsapp-api --lines 50

# Verificar se a porta está em uso
sudo netstat -tulpn | grep 3000

# Verificar permissões
ls -la /var/www/whatsapp-api

Erro de Chromium

# Verificar se Chromium está instalado
which chromium-browser

# Testar Chromium
chromium-browser --version

Problemas com Nginx

# Verificar configuração
sudo nginx -t

# Ver logs de erro
sudo tail -f /var/log/nginx/error.log

Problemas com SSL

# Verificar certificado
sudo certbot certificates

# Renovar manualmente
sudo certbot renew

📝 Notas Importantes

  1. Segurança: Sempre use HTTPS em produção
  2. Backup: Configure backups regulares do banco de dados e sessões
  3. Monitoramento: Monitore logs regularmente
  4. Atualizações: Mantenha o sistema atualizado
  5. Firewall: Configure adequadamente o firewall
  6. Senhas: Use senhas fortes e únicas

🔐 Segurança Adicional

Configurar Fail2Ban (Proteção contra ataques)

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Configurar Auto-updates de Segurança

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

✅ Checklist Final

🎉 Pronto!

Sua aplicação WhatsApp API SaaS está no ar! Acesse via https://seu-dominio.com