# Guia de Deploy via FileZilla

## 1. Configuração da Conexão FileZilla

### Configurações de Conexão:
- **Host:** `72.60.20.31`
- **Usuário:** `root`
- **Senha:** `#@Doca2535220`
- **Porta:** `22` (SFTP)
- **Protocolo:** SFTP - SSH File Transfer Protocol

### Passos para conectar:
1. Abra o FileZilla
2. No menu superior, clique em **Arquivo → Gerenciador de Sites**
3. Clique em **Novo Site**
4. Preencha os dados acima
5. Clique em **Conectar**

## 2. Preparação na VPS (ANTES do Upload)

### Verificar o que já existe:
Conecte via SSH e execute:
```bash
ssh root@72.60.20.31
cd /var/www/maktubia-backend
ls -lah
```

### Se já existirem arquivos antigos:

**Opção 1 - Limpar Tudo (Recomendado):**
```bash
cd /var/www
rm -rf maktubia-backend
mkdir -p maktubia-backend
chmod 755 maktubia-backend
```

**Opção 2 - Fazer Backup e Limpar:**
```bash
cd /var/www
tar -czf /tmp/maktubia-backup-$(date +%Y%m%d-%H%M%S).tar.gz maktubia-backend
rm -rf maktubia-backend
mkdir -p maktubia-backend
chmod 755 maktubia-backend
```

**Opção 3 - Usar Script Automático:**
1. Faça upload do arquivo `deploy/limpar-vps.sh` via FileZilla
2. Execute:
   ```bash
   chmod +x limpar-vps.sh
   ./limpar-vps.sh
   ```

## 3. Upload dos Arquivos

### Diretório de Destino:
```
/var/www/maktubia-backend
```

### Arquivos para FAZER Upload:
✅ **Fazer upload de TUDO, exceto:**
- `node_modules/` (pasta)
- `.git/` (pasta)
- `logs/` (pasta)
- `.env` (arquivo - será criado na VPS)
- `env.local` (arquivo)
- `*.log` (todos os arquivos de log)
- `deploy/` (pasta - não precisa)
- `.vscode/` (pasta)
- `.idea/` (pasta)
- `uploads/` (pasta - será criada na VPS)
- `*.db` (arquivos de banco SQLite)
- `tmp/` (pasta - será criada na VPS)
- `package-lock.json` (será recriado)

### Pastas Principais a Fazer Upload:
- ✅ `app.js`
- ✅ `package.json`
- ✅ `config/`
- ✅ `controllers/`
- ✅ `models/`
- ✅ `routes/`
- ✅ `services/`
- ✅ `middleware/`
- ✅ `utils/`
- ✅ `components/` (se existir)
- ✅ `types/` (se existir)
- ✅ `queues/` (se existir)
- ✅ Todos os arquivos `.md` (documentação)
- ✅ Outros arquivos `.js` na raiz

## 3. Configuração na VPS (via SSH)

Após fazer upload de todos os arquivos, conecte via SSH:

### Via FileZilla:
1. Clique com botão direito na VPS
2. Selecione **Abrir no Terminal** ou use um cliente SSH separado

### Via Terminal/CMD:
```bash
ssh root@72.60.20.31
# Senha: #@Doca2535220
```

### Comandos a Executar na VPS:

```bash
# 1. Ir para o diretório da aplicação
cd /var/www/maktubia-backend

# 2. Instalar dependências (se não existir node_modules)
npm install --omit=dev

# 3. Criar arquivo .env (se não existir)
cat > .env << 'EOF'
NODE_ENV=production
PORT=8000
DATABASE=postgres
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=maktubia_points
POSTGRES_USER=postgres
POSTGRES_PASSWORD=@21062014
JWT_SECRET=maktubia_jwt_secret_production_change_me
JWT_EXPIRE=30d
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
SESSION_SECRET=maktubia-production-secret-change-me
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8080
LOG_LEVEL=info
FCM_SERVICE_ACCOUNT_PATH=./config/firebase-service-account.json
EOF

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

# 5. Parar PM2 se estiver rodando
pm2 delete maktubia-backend 2>/dev/null || true

# 6. Iniciar aplicação com PM2
pm2 start app.js --name maktubia-backend --update-env
pm2 save

# 7. Configurar PM2 para iniciar automaticamente
pm2 startup systemd -u root --hp /root

# 8. Verificar status
pm2 status
pm2 logs maktubia-backend --lines 50
```

## 4. Configuração do Nginx (se necessário)

```bash
# Criar configuração Nginx
cat > /etc/nginx/sites-available/maktubia-backend << 'EOF'
server {
    listen 80;
    server_name 72.60.20.31;
    
    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;
    }
    
    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;
    }
}
EOF

# Ativar site
ln -sf /etc/nginx/sites-available/maktubia-backend /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default

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

## 5. Verificação

### Verificar se a aplicação está rodando:
```bash
pm2 status
pm2 logs maktubia-backend --lines 20
```

### Testar acesso:
Abra no navegador: `http://72.60.20.31`

### Verificar porta:
```bash
netstat -tulpn | grep 8000
```

## 6. Comandos Úteis para Manutenção

```bash
# Ver logs em tempo real
pm2 logs maktubia-backend

# Reiniciar aplicação
pm2 restart maktubia-backend

# Parar aplicação
pm2 stop maktubia-backend

# Ver status
pm2 status

# Ver informações detalhadas
pm2 describe maktubia-backend

# Ver uso de recursos
pm2 monit
```

## 7. Troubleshooting

### Se a aplicação não iniciar:
```bash
# Verificar logs de erro
pm2 logs maktubia-backend --err

# Verificar se porta está em uso
lsof -i :8000

# Verificar se PostgreSQL está rodando
systemctl status postgresql

# Verificar variáveis de ambiente
cd /var/www/maktubia-backend
cat .env
```

### Se houver erro de permissões:
```bash
cd /var/www/maktubia-backend
chmod -R 755 .
chmod -R 777 uploads logs tmp
chown -R root:root .
```

## 8. Atualização Futura

Para atualizar a aplicação no futuro:

1. **Via FileZilla:** Fazer upload dos arquivos modificados
2. **Via SSH:** Executar:
   ```bash
   cd /var/www/maktubia-backend
   pm2 restart maktubia-backend
   ```

Ou se precisar reinstalar dependências:
```bash
cd /var/www/maktubia-backend
npm install --omit=dev
pm2 restart maktubia-backend
```

---

**Pronto!** Sua aplicação deve estar rodando em `http://72.60.20.31`
