# 🖥️ 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