# Deploy — Agenda Médica em hospedagem cPanel

O app é Next.js (Node.js) + Postgres. **O banco já existe e está pronto**
(177.70.4.10 / amedica_dados) — o deploy é só da aplicação.

## Pré-requisito (confira antes de tudo)

A hospedagem precisa ter o recurso **"Setup Node.js App"** no cPanel
(procure esse ícone na seção Software). Sem ele, Next.js não roda em
hospedagem compartilhada — nesse caso as alternativas são um VPS ou a Vercel.

- Versão de Node necessária: **20.x ou superior**.

## Passo 1 — Gerar o pacote (na sua máquina)

1. Pare o servidor de desenvolvimento se estiver rodando.
2. No terminal, na pasta do projeto (`C:\Users\luiz\dev\agenda-medica`):

```powershell
powershell -ExecutionPolicy Bypass -File scripts\package-deploy.ps1
```

3. Será criado o arquivo **`agenda-medica-deploy.zip`** na raiz do projeto.

## Passo 2 — Subir os arquivos

1. cPanel → **Gerenciador de Arquivos**.
2. Na home (fora de `public_html`), crie a pasta **`agenda-medica`**.
3. Envie o `agenda-medica-deploy.zip` para dentro dela e use **Extract**.
4. Pode apagar o .zip depois de extrair.

## Passo 3 — Criar a aplicação Node

1. cPanel → **Setup Node.js App** → **Create Application**.
2. Preencha:
   - **Node.js version**: 20.x (ou a mais nova disponível)
   - **Application mode**: `Production`
   - **Application root**: `agenda-medica`
   - **Application URL**: o domínio ou subdomínio desejado (ex.: `agenda.amedica.space`)
   - **Application startup file**: `app.js`
3. Clique em **Create**.

## Passo 4 — Variáveis de ambiente

Ainda na tela da aplicação, em **Environment Variables**, adicione uma a uma
(os valores reais são os mesmos do seu `.env` local — use o
`.env.example` dentro do pacote como lista de conferência):

| Nome                | Valor                                                        |
| ------------------- | ------------------------------------------------------------ |
| `DATABASE_URL`      | `postgresql://usuario:senha@177.70.4.10:5432/amedica_dados?schema=public` |
| `JWT_SECRET`        | um segredo longo e aleatório (diferente do de dev)           |
| `SMTP_HOST`         | servidor SMTP                                                 |
| `SMTP_PORT`         | `465`                                                         |
| `SMTP_SECURE`       | `true`                                                        |
| `SMTP_RECOVER_USER` | `recuperar@amedica.space`                                     |
| `SMTP_RECOVER_PASS` | senha da conta                                                |
| `SMTP_CREATE_USER`  | `criar@amedica.space`                                         |
| `SMTP_CREATE_PASS`  | senha da conta                                                |
| `APP_URL`           | `https://agenda.amedica.space` (a URL final da aplicação)     |

> Dica: se o Postgres estiver no mesmo servidor da hospedagem, troque
> `177.70.4.10` por `localhost` no `DATABASE_URL` (conexão mais rápida).

## Passo 5 — Iniciar e testar

1. Clique em **Restart** na tela da aplicação.
2. Abra a Application URL no navegador → deve aparecer a tela de login.
3. Entre com um usuário admin e confira calendário, agendamentos e relatórios.

## Atualizações futuras

1. Rode de novo o `scripts\package-deploy.ps1` na sua máquina.
2. No Gerenciador de Arquivos, apague o conteúdo antigo de `agenda-medica`
   (as variáveis de ambiente ficam salvas no cPanel, não se perdem).
3. Envie e extraia o novo zip.
4. **Restart** na tela do Setup Node.js App.

## Problemas comuns

| Sintoma | Causa provável / solução |
| --- | --- |
| Erro 503 ao abrir | App não subiu — veja o log `stderr.log` dentro da pasta da aplicação. |
| Erro do Prisma "query engine not found" | O pacote foi gerado sem os engines Linux — confirme que o `prisma generate` rodou dentro do script antes do build. |
| Erro de conexão com o banco | O IP do servidor de hospedagem precisa de liberação no firewall/pg_hba do Postgres. Peça ao suporte da hospedagem o IP de saída e libere-o no servidor do banco. |
| E-mails não saem | Confira as variáveis `SMTP_*` e se a hospedagem não bloqueia a porta 465 para SMTP externo. |
| Página abre sem estilos | A pasta `.next/static` não foi extraída — reextraia o zip completo. |
