# 🖥️ Deploy em Servidor Local - Liberi Kids

Guia completo para rodar o sistema no servidor local e manter funcionando automaticamente, mesmo após reinicializações.

---

## 📋 Pré-requisitos

```bash
# Node.js 18+
node --version

# NPM
npm --version

# PM2 (gerenciador de processos)
sudo npm install -g pm2
```

---

## 🚀 Método 1: PM2 (Recomendado - Mais Fácil)

### 1️⃣ Instalação Inicial

```bash
# 1. Entre no diretório do projeto
cd /home/tiago/Downloads/app_estoque_v1.0.0

# 2. Instale as dependências
npm install
cd client && npm install && cd ..

# 3. Configure o .env
cp .env.example .env
nano .env  # Configure suas credenciais do Supabase

# 4. Faça o build do frontend
npm run build
```

### 2️⃣ Iniciar com PM2

```bash
# Inicia o servidor com PM2
pm2 start ecosystem.config.js

# Verifica o status
pm2 status

# Ver logs em tempo real
pm2 logs liberi-kids-estoque

# Ver logs específicos
pm2 logs liberi-kids-estoque --lines 100
```

### 3️⃣ Configurar Inicialização Automática

```bash
# Salva a configuração atual
pm2 save

# Configura para iniciar no boot do sistema
pm2 startup

# Execute o comando que o PM2 mostrar (algo como):
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u seu-usuario --hp /home/seu-usuario
```

### 4️⃣ Comandos Úteis do PM2

```bash
# Reiniciar aplicação
pm2 restart liberi-kids-estoque

# Parar aplicação
pm2 stop liberi-kids-estoque

# Remover do PM2
pm2 delete liberi-kids-estoque

# Ver informações detalhadas
pm2 show liberi-kids-estoque

# Monitorar em tempo real
pm2 monit

# Ver logs de erro
pm2 logs liberi-kids-estoque --err

# Limpar logs antigos
pm2 flush
```

### 5️⃣ Atualizar Aplicação

```bash
# 1. Faça as alterações no código
# 2. Se alterou o frontend, faça o build
cd client && npm run build && cd ..

# 3. Reinicie o PM2
pm2 restart liberi-kids-estoque

# Ou faça reload sem downtime
pm2 reload liberi-kids-estoque
```

---

## 🔧 Método 2: Systemd (Mais Robusto)

### 1️⃣ Criar Serviço Systemd

```bash
# Crie o arquivo de serviço
sudo nano /etc/systemd/system/liberi-kids.service
```

**Conteúdo do arquivo:**

```ini
[Unit]
Description=Liberi Kids - Sistema de Estoque
After=network.target

[Service]
Type=simple
User=tiago
WorkingDirectory=/home/tiago/Downloads/app_estoque_v1.0.0
Environment=NODE_ENV=production
Environment=PORT=5000
ExecStart=/usr/bin/node server-supabase.js
Restart=always
RestartSec=10
StandardOutput=append:/home/tiago/Downloads/app_estoque_v1.0.0/logs/system.log
StandardError=append:/home/tiago/Downloads/app_estoque_v1.0.0/logs/error.log

[Install]
WantedBy=multi-user.target
```

### 2️⃣ Ativar o Serviço

```bash
# Criar diretório de logs
mkdir -p logs

# Recarregar systemd
sudo systemctl daemon-reload

# Habilitar para iniciar no boot
sudo systemctl enable liberi-kids

# Iniciar o serviço
sudo systemctl start liberi-kids

# Verificar status
sudo systemctl status liberi-kids
```

### 3️⃣ Comandos do Systemd

```bash
# Ver status
sudo systemctl status liberi-kids

# Parar serviço
sudo systemctl stop liberi-kids

# Reiniciar serviço
sudo systemctl restart liberi-kids

# Ver logs
sudo journalctl -u liberi-kids -f

# Ver logs das últimas 100 linhas
sudo journalctl -u liberi-kids -n 100

# Desabilitar inicialização automática
sudo systemctl disable liberi-kids
```

---

## 🔥 Script de Deploy Rápido

Criei um script para facilitar o deploy. Execute:

```bash
chmod +x scripts/deploy-servidor.sh
./scripts/deploy-servidor.sh
```

---

## 🌐 Configurar Nginx (Opcional)

Se quiser usar um domínio ou porta 80/443:

```bash
# Instalar Nginx
sudo apt install nginx -y

# Criar configuração
sudo nano /etc/nginx/sites-available/liberi-kids
```

**Configuração do Nginx:**

```nginx
server {
    listen 80;
    server_name seu-dominio.com;  # ou IP do servidor

    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        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;
    }
}
```

```bash
# Ativar site
sudo ln -s /etc/nginx/sites-available/liberi-kids /etc/nginx/sites-enabled/

# Testar configuração
sudo nginx -t

# Reiniciar Nginx
sudo systemctl restart nginx
```

---

## 🔒 Configurar Firewall

```bash
# Permitir porta 5000
sudo ufw allow 5000/tcp

# Ou se usar Nginx
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Verificar status
sudo ufw status
```

---

## 📊 Monitoramento

### Ver uso de recursos

```bash
# Com PM2
pm2 monit

# Processos
htop

# Espaço em disco
df -h

# Memória
free -h
```

### Logs

```bash
# PM2
pm2 logs liberi-kids-estoque --lines 200

# Systemd
sudo journalctl -u liberi-kids -f

# Logs customizados
tail -f logs/pm2-error.log
tail -f logs/pm2-out.log
```

---

## 🔄 Backup Automático

Adicione ao crontab:

```bash
# Editar crontab
crontab -e

# Adicionar linha para backup diário às 3h da manhã
0 3 * * * cd /home/tiago/Downloads/app_estoque_v1.0.0 && ./backup-projeto-completo.sh
```

---

## ⚠️ Troubleshooting

### Aplicação não inicia

```bash
# Verificar logs
pm2 logs liberi-kids-estoque

# Verificar se a porta está em uso
sudo lsof -i :5000

# Matar processo na porta
sudo kill -9 $(sudo lsof -t -i:5000)

# Reiniciar
pm2 restart liberi-kids-estoque
```

### Alto uso de memória

```bash
# Reiniciar aplicação
pm2 restart liberi-kids-estoque

# Limpar cache do npm
npm cache clean --force

# Verificar processos
pm2 monit
```

### Erros de permissão

```bash
# Dar permissões corretas
sudo chown -R $USER:$USER /home/tiago/Downloads/app_estoque_v1.0.0

# Permissões de execução
chmod +x server-supabase.js
```

---

## 📝 Resumo - Comandos Principais

```bash
# ✅ Iniciar aplicação
pm2 start ecosystem.config.js

# ✅ Ver status
pm2 status

# ✅ Ver logs
pm2 logs liberi-kids-estoque

# ✅ Reiniciar
pm2 restart liberi-kids-estoque

# ✅ Salvar configuração
pm2 save

# ✅ Configurar auto-inicialização
pm2 startup

# ✅ Acessar aplicação
# http://seu-ip:5000
```

---

## 🎯 Próximos Passos

1. ✅ Sistema rodando com PM2
2. ⚙️ Configurar Nginx (opcional)
3. 🔒 Configurar SSL com Let's Encrypt (opcional)
4. 📊 Configurar monitoramento
5. 💾 Configurar backups automáticos

---

## 📞 Suporte

- **Logs PM2**: `pm2 logs liberi-kids-estoque`
- **Status**: `pm2 status`
- **Monitoramento**: `pm2 monit`

**Aplicação rodando em**: http://localhost:5000
**Catálogo público**: http://localhost:5000/catalogo
