# Deploy Miro Performance no cPanel (HostGator VPS)

## Guia Completo de Deploy — cPanel com Node.js Application Manager

---

## Pré-requisitos

- VPS HostGator com cPanel e **Node.js Application Manager** habilitado
- Acesso SSH ao servidor
- Node.js 18+ ou 20+ disponível no cPanel
- Domínio ou subdomínio configurado apontando para a VPS

---

## Estrutura do Projeto para Produção

```
Miro_Sistema/
├── app.js                  ← Ponto de entrada (cPanel aponta aqui)
├── package.json            ← Dependências raiz
├── .htaccess               ← Configuração do Passenger
├── backend/
│   ├── app.js              ← Express app (rotas, middleware)
│   ├── database.js         ← SQLite com caminho em backend/data/
│   ├── server.js           ← Entrada para desenvolvimento local
│   ├── seed.js             ← Dados de teste
│   ├── package.json        ← Dependências do backend
│   ├── data/               ← Banco SQLite (criado automaticamente)
│   │   └── database.sqlite
│   └── public/             ← Frontend compilado (servido pelo Express)
│       ├── index.html
│       ├── assets/
│       └── miro-pixel.js
├── frontend/
│   ├── src/                ← Código-fonte React
│   ├── vite.config.js      ← Compila para backend/public/
│   └── package.json
└── docs/
    └── CPANEL_DEPLOY.md    ← Este arquivo
```

---

## Passo 1: Preparar o Frontend (na máquina local)

Compile o frontend React **antes de enviar para o servidor**:

```bash
cd frontend
npm install
npm run build
```

Isso gera os arquivos compilados em `backend/public/`. Verifique que o `backend/public/index.html` existe.

---

## Passo 2: Enviar Arquivos para o Servidor

Use **Git**, **SFTP** ou o **File Manager do cPanel** para enviar o projeto.

### Opção A: Via Git (Recomendado)

```bash
# No servidor, via SSH:
cd /home/SEU_USUARIO
git clone SEU_REPOSITORIO miro-performance
```

### Opção B: Via SFTP / File Manager

Envie todo o conteúdo da pasta `Miro_Sistema/` para o diretório onde o domínio/subdomínio aponta (ex: `/home/SEU_USUARIO/miro-performance/`).

**IMPORTANTE**: Envie a pasta `backend/public/` com os arquivos compilados. Envie também `node_modules` excluídos — serão instalados no servidor.

---

## Passo 3: Configurar o Node.js Application Manager no cPanel

1. Acesse o **cPanel** → **Setup Node.js App** (ou "Node.js Application Manager")
2. Clique em **Create Application**
3. Preencha os campos:

| Campo                  | Valor                                              |
|------------------------|----------------------------------------------------|
| **Node.js version**    | `20` (ou a mais recente disponível, mínimo 18)     |
| **Application mode**   | `Production`                                       |
| **Application root**   | `miro-performance` (pasta onde está o projeto)      |
| **Application URL**    | Selecione o domínio/subdomínio desejado            |
| **Application startup file** | `app.js`                                    |

4. Clique em **Create** / **Save**

---

## Passo 4: Instalar Dependências no Servidor

Após criar a aplicação no cPanel, use o terminal integrado do Node.js Application Manager ou SSH:

### Via Terminal do cPanel (Node.js App Manager)

O cPanel oferece um botão **"Run NPM Install"** na interface do Node.js Application Manager. Clique nele.

### Via SSH (alternativa)

```bash
# Ative o ambiente virtual do Node.js criado pelo cPanel
source /home/SEU_USUARIO/nodevenv/miro-performance/20/bin/activate

# Navegue até o diretório do projeto
cd /home/SEU_USUARIO/miro-performance

# Instale as dependências raiz (que instala automaticamente as do backend via postinstall)
npm install

# Instale as dependências do backend manualmente (caso o postinstall não funcione)
cd backend
npm install
cd ..
```

---

## Passo 5: Configurar Variáveis de Ambiente (Opcional)

No Node.js Application Manager do cPanel, adicione variáveis de ambiente se necessário:

| Variável               | Descrição                                          | Padrão                                    |
|------------------------|----------------------------------------------------|-------------------------------------------|
| `NODE_ENV`             | Ambiente de execução                               | `production`                              |
| `JWT_SECRET`           | Chave secreta para tokens JWT                      | (gerada internamente se não definida)     |
| `PORT`                 | Porta do servidor (gerenciada pelo cPanel)          | Automático                                |

**⚠️ IMPORTANTE**: O cPanel/Passenger gerencia a variável `PORT` automaticamente. **Não defina PORT manualmente**.

---

## Passo 6: Atualizar o .htaccess

O arquivo `.htaccess` na raiz do projeto já vem pré-configurado. Atualize-o com seus dados reais:

```apache
PassengerNodejs /home/SEU_USUARIO/nodevenv/miro-performance/20/bin/node
PassengerAppType node
PassengerStartupFile app.js
```

Substitua:
- `SEU_USUARIO` → seu nome de usuário no cPanel
- `miro-performance` → nome da pasta do projeto
- `20` → versão do Node.js selecionada no cPanel

**Para descobrir o caminho exato**, execute no SSH:
```bash
which node
```

---

## Passo 7: Reiniciar a Aplicação

No cPanel → Node.js Application Manager:
1. Encontre sua aplicação na lista
2. Clique no botão **"Restart"**

Ou via SSH:
```bash
# Cria/atualiza o arquivo restart.txt que o Passenger monitora
touch /home/SEU_USUARIO/miro-performance/tmp/restart.txt
```

---

## Passo 8: Verificar Funcionamento

1. Acesse o domínio/subdomínio no navegador
2. A tela de login do Miro Performance deve aparecer
3. Credenciais padrão:
   - **Usuário**: `admin`
   - **Senha**: `miro_admin_2026`
4. **Altere a senha padrão** imediatamente após o primeiro login (em Configurações → Senha Administrativa)

---

## Troubleshooting

### Erro 503 ou página em branco
- Verifique se `backend/public/index.html` existe
- Verifique se as dependências do backend foram instaladas (`backend/node_modules/` deve existir)
- Reinicie a aplicação no Node.js Application Manager

### Erro de banco de dados
- A pasta `backend/data/` é criada automaticamente. Verifique as permissões:
  ```bash
  chmod 755 /home/SEU_USUARIO/miro-performance/backend/data/
  ```

### Verificar logs
```bash
# Logs de erro do Passenger
cat /home/SEU_USUARIO/logs/SEU_DOMINIO.error.log

# Ou via cPanel → Metrics → Errors
```

### API retornando 404
- Confirme que o frontend usa caminhos relativos (`/api/...`) — isso já está configurado no código
- Verifique se o `.htaccess` está correto

### Atualizando o código
```bash
cd /home/SEU_USUARIO/miro-performance
git pull origin main

# Reconstrua o frontend localmente ANTES de fazer push:
# cd frontend && npm run build && cd ..
# git add backend/public/ && git commit -m "build" && git push

# No servidor, apenas:
cd backend && npm install && cd ..
touch tmp/restart.txt
```

---

## Fluxo de Atualização Resumido

```
[Local] npm run build:frontend     → Compila React para backend/public/
[Local] git add . && git commit    → Commita incluindo backend/public/
[Local] git push                   → Envia para repositório
[VPS]   git pull                   → Baixa atualização
[VPS]   npm install                → Atualiza dependências
[VPS]   touch tmp/restart.txt      → Reinicia Passenger
```

---

## Notas Importantes

1. **O frontend compilado (`backend/public/`) deve ser commitado no Git** para que o deploy funcione sem precisar instalar dependências de build no servidor.
2. **Nunca use `localhost` nas chamadas de API** — o código já utiliza caminhos relativos (`/api/...`).
3. **O banco SQLite** é criado automaticamente em `backend/data/database.sqlite` na primeira execução.
4. **O arquivo `miro-pixel.js`** em `backend/public/` detecta automaticamente o domínio de hospedagem — não precisa de configuração manual.
5. **O Passenger (cPanel)** gerencia a porta automaticamente via variável de ambiente `PORT`.
