# Guia de Deploy — cPanel (Hospedagem Compartilhada/Revendedor)

> Servidor: us158-cp | cPanel 136 | Apache 2.4 | MariaDB 10.11 | nginx

---

## 1. Criar banco de dados MariaDB

No cPanel → **MySQL® Databases**:

1. Em "Create New Database", digite o nome: `escola_sistema` → clique **Create Database**
2. Em "MySQL Users" → crie um usuário: `escola_user` com uma senha forte → **Create User**
3. Em "Add User To Database" → selecione o usuário e o banco → clique **Add** → marque **ALL PRIVILEGES** → **Make Changes**

Anote: `usuario_cpanel_escola_sistema`, `escola_user`, e a senha.

---

## 2. Criar conta de e-mail para envio

No cPanel → **Email Accounts**:

1. Crie um e-mail como `sistema@seudominio.com.br`
2. Anote o servidor SMTP (normalmente `mail.seudominio.com.br`), porta `587` e a senha

---

## 3. Criar o subdomínio (recomendado)

No cPanel → **Subdomains** (ou **Addon Domains**):

- Crie algo como `escola.seudominio.com.br`
- Anote o **Document Root** que o cPanel criar (ex: `/home/seuusuario/escola.seudominio.com.br`)

> ⚠️ O **Document Root** é onde ficam os arquivos **públicos** (HTML/CSS/JS). Nosso app Next.js vai em uma pasta **separada**, fora do `public_html`.

---

## 4. Criar a pasta do app (fora do public_html)

Via **File Manager** do cPanel ou **FTP**, crie a pasta:
```
/home/seuusuario/apps/escola-sistema/
```

Faça upload de **todos os arquivos do projeto** para essa pasta (exceto `node_modules/` e `.next/`).

**Estrutura esperada:**
```
/home/seuusuario/apps/escola-sistema/
  ├── src/
  ├── prisma/
  ├── public/
  ├── server.js          ← arquivo de inicialização para o Passenger
  ├── package.json
  ├── next.config.ts
  ├── .env               ← você vai criar este aqui
  └── ...
```

---

## 5. Configurar variáveis de ambiente (.env)

No File Manager, crie o arquivo `.env` dentro de `/home/seuusuario/apps/escola-sistema/`:

```env
# Banco de dados MariaDB
# Formato: mysql://USUARIO:SENHA@localhost:3306/BANCO
DATABASE_URL="mysql://escola_user:sua_senha@localhost:3306/cpanelusuario_escola_sistema"

# NextAuth
NEXTAUTH_URL="https://escola.seudominio.com.br"
NEXTAUTH_SECRET="gere-aqui-com-openssl-rand-base64-32"

# E-mail (conta criada no passo 2)
EMAIL_SERVER_HOST="mail.seudominio.com.br"
EMAIL_SERVER_PORT="587"
EMAIL_SERVER_USER="sistema@seudominio.com.br"
EMAIL_SERVER_PASSWORD="sua-senha-email"
EMAIL_FROM="Sistema Escolar <sistema@seudominio.com.br>"

# Mercado Pago (obtenha em https://www.mercadopago.com.br/developers)
MP_ACCESS_TOKEN="APP_USR-xxxx-xxxx-xxxx-xxxx"
MP_PUBLIC_KEY="APP_USR-xxxx-xxxx"

# URL pública
NEXT_PUBLIC_BASE_URL="https://escola.seudominio.com.br"
NEXT_PUBLIC_MP_PUBLIC_KEY="APP_USR-xxxx-xxxx"

# Pasta de uploads (dentro do app, servida pelo Next.js)
UPLOAD_DIR="/home/seuusuario/apps/escola-sistema/public/uploads/fardamentos"

NODE_ENV="production"
```

> ⚠️ No cPanel, o nome do banco de dados no MySQL é sempre prefixado com seu usuário cPanel. Se seu usuário é `joaosilva` e o banco é `escola_sistema`, o nome real é `joaosilva_escola_sistema`.

---

## 6. Configurar Node.js App no cPanel

No cPanel → **Setup Node.js App** (seção "Software"):

| Campo | Valor |
|-------|-------|
| Node.js version | **20.x** (ou a mais recente disponível) |
| Application mode | **Production** |
| Application root | `/home/seuusuario/apps/escola-sistema` |
| Application URL | `escola.seudominio.com.br` |
| Application startup file | `server.js` |

1. Clique **Create**
2. Depois de criar, clique em **Run NPM Install** — isso instala as dependências
3. Clique em **Open Terminal** (ou use SSH) e rode:

```bash
cd ~/apps/escola-sistema

# Gerar cliente Prisma
./node_modules/.bin/prisma generate

# Criar as tabelas no banco
./node_modules/.bin/prisma db push

# Popular dados iniciais (admin + fardamentos de exemplo)
./node_modules/.bin/tsx prisma/seed.ts

# Build de produção
npm run build
```

4. De volta no cPanel → Node.js App → clique **Restart**

---

## 7. Pasta de uploads

Crie a pasta de uploads via File Manager:
```
/home/seuusuario/apps/escola-sistema/public/uploads/fardamentos/
```

Permissão: `755` (o cPanel geralmente já configura corretamente).

---

## 8. SSL (HTTPS)

No cPanel → **SSL/TLS** → **Let's Encrypt™**:

1. Selecione o domínio/subdomínio `escola.seudominio.com.br`
2. Clique **Issue** — o certificado é instalado automaticamente
3. Ative "Force HTTPS Redirect" se disponível

---

## 9. Mercado Pago — Webhook

1. Acesse: https://www.mercadopago.com.br/developers/panel
2. Vá em **Webhooks** → **Adicionar webhook**
3. URL: `https://escola.seudominio.com.br/api/pagamentos/webhook`
4. Eventos: marque **Pagamentos** (`payment`)
5. Salve e anote o **Secret** (para validação futura)

---

## 10. Acesso inicial

- **Equipe da escola (admin):**
  `https://escola.seudominio.com.br/auth/login`
  - E-mail: `admin@escola.com.br`
  - Senha: `admin123`
  - ⚠️ **Troque a senha imediatamente pelo banco de dados ou pelo próprio sistema**

- **Responsáveis (pais):**
  `https://escola.seudominio.com.br/auth/responsavel`
  - Acesso via link enviado por e-mail (magic link) — sem senha

---

## 11. Atualizar o sistema no futuro

1. Faça upload dos novos arquivos via FTP/File Manager (sobrescreva)
2. No cPanel → Node.js App → **Open Terminal**:
```bash
cd ~/apps/escola-sistema
./node_modules/.bin/prisma db push   # se houve mudança no schema
npm run build
```
3. Node.js App → **Restart**

---

## Dicas e Resolução de Problemas

**App não inicia:**
- Verifique se o `server.js` está na raiz do projeto
- Confira se o `.env` está correto e na raiz
- Veja os logs em Node.js App → **View logs**

**Erro de banco de dados:**
- O nome do banco no `DATABASE_URL` deve ter o prefixo do usuário cPanel
- Confirme que o usuário MySQL tem todas as permissões

**E-mail não chegando:**
- Teste primeiro pela webmail do cPanel
- Verifique se a porta `587` está liberada (algumas hospedagens bloqueiam a 25)
- Alternativa: use Gmail SMTP com "Senha de App"

**Uploads de imagem não aparecem:**
- Confira o caminho `UPLOAD_DIR` no `.env`
- A pasta precisa existir e ter permissão `755`
