# 🚀 Guia de Deploy - Maktubia Backend VPS

Este guia contém todas as instruções para fazer deploy do backend na VPS.

## 📋 Pré-requisitos

- Acesso SSH à VPS
- Credenciais de acesso (fornecidas)
- Domínio configurado (opcional, mas recomendado para SSL)

## 🔧 Setup Inicial da VPS (Execute apenas uma vez)

### 1. Conectar à VPS

```bash
ssh root@72.60.20.31
# Senha: #@Doca2535220
```

### 2. Executar Setup Inicial

Na sua máquina local, execute:

```bash
chmod +x deploy/vps-setup.sh
./deploy/vps-setup.sh
```

Ou execute manualmente na VPS:

```bash
# Atualizar sistema
apt-get update && apt-get upgrade -y

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

# Instalar PostgreSQL
apt-get install -y postgresql postgresql-contrib
systemctl start postgresql
systemctl enable postgresql

# Configurar PostgreSQL
sudo -u postgres psql
CREATE DATABASE maktubia_points;
ALTER USER postgres WITH PASSWORD '@21062014';
\q

# Instalar PM2
npm install -g pm2

# Instalar Nginx
apt-get install -y nginx

# Instalar Certbot (SSL)
apt-get install -y certbot python3-certbot-nginx

# Configurar firewall
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw --force enable
```

## 🚀 Deploy da Aplicação

### Opção 1: Script Automático (Recomendado)

Execute na sua máquina local:

```bash
chmod +x deploy/deploy.sh
./deploy/deploy.sh
```

Este script irá:
1. Fazer backup da versão anterior
2. Fazer upload do código
3. Instalar dependências
4. Configurar variáveis de ambiente
5. Iniciar a aplicação com PM2

### Opção 2: Manual

#### 1. Fazer Upload do Código

```bash
# Instalar sshpass (se necessário)
# Ubuntu/Debian:
sudo apt-get install sshpass

# macOS:
brew install hudochenkov/sshpass/sshpass

# Fazer upload
sshpass -p '#@Doca2535220' rsync -avz \
  --exclude 'node_modules' \
  --exclude '.git' \
  --exclude 'logs' \
  --exclude '.env' \
  ./ root@72.60.20.31:/var/www/maktubia-backend/
```

#### 2. Configurar na VPS

```bash
ssh root@72.60.20.31
cd /var/www/maktubia-backend

# Instalar dependências
npm install --production

# Criar arquivo .env
cp deploy/.env.production .env
nano .env  # Ajuste as configurações

# Criar diretórios necessários
mkdir -p uploads logs tmp
chmod -R 777 uploads logs tmp

# Iniciar com PM2
pm2 start app.js --name maktubia-backend
pm2 save
pm2 startup systemd -u root --hp /root
```

## 🌐 Configurar Nginx

### Opção 1: Script Automático

```bash
# Edite deploy/configure-nginx.sh e ajuste o DOMAIN
chmod +x deploy/configure-nginx.sh
./deploy/configure-nginx.sh
```

### Opção 2: Manual

```bash
ssh root@72.60.20.31

# Criar configuração
nano /etc/nginx/sites-available/maktubia-backend

# Cole o conteúdo (ajuste o domínio):
server {
    listen 80;
    server_name seu-dominio.com;

    location / {
        proxy_pass http://localhost:8000;
        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;
    }

    location /socket.io/ {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

# Criar link simbólico
ln -s /etc/nginx/sites-available/maktubia-backend /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default

# Testar e recarregar
nginx -t
systemctl reload nginx
```

## 🔒 Configurar SSL (HTTPS)

```bash
ssh root@72.60.20.31
certbot --nginx -d seu-dominio.com -d www.seu-dominio.com
```

O Certbot irá:
- Obter certificado SSL gratuito da Let's Encrypt
- Configurar renovação automática
- Configurar Nginx para HTTPS

## 📊 Gerenciamento da Aplicação

### Comandos PM2 Úteis

```bash
# Ver status
pm2 status

# Ver logs
pm2 logs maktubia-backend

# Reiniciar
pm2 restart maktubia-backend

# Parar
pm2 stop maktubia-backend

# Ver monitoramento
pm2 monit

# Limpar logs
pm2 flush
```

### Verificar Logs da Aplicação

```bash
cd /var/www/maktubia-backend
tail -f logs/*.log
```

### Verificar Logs do Nginx

```bash
tail -f /var/log/nginx/maktubia-backend-access.log
tail -f /var/log/nginx/maktubia-backend-error.log
```

## 🔄 Atualizações Futuras

Para atualizar a aplicação:

```bash
# Execute o script de deploy novamente
./deploy/deploy.sh

# Ou manualmente:
ssh root@72.60.20.31
cd /var/www/maktubia-backend
git pull  # Se usar Git
npm install --production
pm2 restart maktubia-backend
```

## ⚠️ Segurança

### 1. Alterar Senhas Padrão

```bash
# Alterar senha do PostgreSQL
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'nova_senha_segura';
\q
```

### 2. Configurar Firewall

```bash
ufw status
ufw allow 22/tcp    # SSH
ufw allow 80/tcp    # HTTP
ufw allow 443/tcp   # HTTPS
```

### 3. Configurar SSH Key (Recomendado)

```bash
# Na sua máquina local:
ssh-keygen -t rsa -b 4096
ssh-copy-id root@72.60.20.31

# Depois, desabilitar login com senha (opcional):
# Edite /etc/ssh/sshd_config
# PasswordAuthentication no
```

### 4. Ajustar Secrets no .env

```bash
# Gerar secrets seguros:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

# Editar .env
nano /var/www/maktubia-backend/.env
# Ajuste JWT_SECRET e SESSION_SECRET
```

## 🐛 Troubleshooting

### Aplicação não inicia

```bash
# Verificar logs
pm2 logs maktubia-backend
cd /var/www/maktubia-backend
cat logs/*.log

# Verificar porta
netstat -tulpn | grep 8000

# Verificar PostgreSQL
sudo -u postgres psql -d maktubia_points -c "SELECT 1;"
```

### Erro 502 Bad Gateway

```bash
# Verificar se aplicação está rodando
pm2 status

# Verificar Nginx
nginx -t
systemctl status nginx

# Verificar logs do Nginx
tail -f /var/log/nginx/error.log
```

### Erro de conexão com banco

```bash
# Verificar PostgreSQL
systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"

# Verificar credenciais no .env
cat /var/www/maktubia-backend/.env | grep POSTGRES
```

## 📞 Suporte

Em caso de problemas:
1. Verificar logs da aplicação
2. Verificar logs do Nginx
3. Verificar status do PM2
4. Verificar status dos serviços (PostgreSQL, Nginx)

## 🔗 Links Úteis

- PM2 Docs: https://pm2.keymetrics.io/docs/
- Nginx Docs: https://nginx.org/en/docs/
- Let's Encrypt: https://letsencrypt.org/

