# Guia de implantação em cPanel

Passo a passo para colocar esta versão online em hospedagem cPanel (Apache/LiteSpeed + MySQL/MariaDB + PHP 8.1+).

## 1. PHP

No **MultiPHP Manager**, selecione o domínio e defina **PHP 8.1, 8.2 ou 8.3**.
Em **MultiPHP INI Editor** / extensões, confirme habilitadas: `pdo_mysql`, `mbstring`, `openssl`, `curl`, `dom`, `json`.
(O crawler prefere `curl`; se não houver, usa streams com `allow_url_fopen`.)

## 2. Banco de dados

1. **MySQL Databases** → crie um banco e um usuário (virão com prefixo, ex.: `usuario_chatbot`) e conceda **todos os privilégios**.
2. No **phpMyAdmin**, selecione o banco e importe `database/schema.sql`.
   - Use **MySQL**, não SQLite (o SQLite é só para desenvolvimento; a busca FULLTEXT exige MySQL).

## 3. Arquivos

Envie o projeto para o `public_html` do domínio (ou de um subdomínio, ex.: `chatbot.seudominio.com`).
Os `.htaccess` já inclusos protegem `config/`, `classes/`, `logs/`, `database/` de acesso web direto e roteiam `api/` e `admin/`.
Garanta que a pasta `logs/` seja **gravável** (permissão 755).

## 4. Configuração de produção (segredos)

Copie `config/local.example.php` para `config/local.php` e preencha. Esse arquivo sobrescreve os defaults e **não deve ser versionado** (já está no `.gitignore`).

```php
return [
    'database' => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'name' => 'usuario_chatbot',
        'user' => 'usuario_chatbot',
        'password' => 'SENHA_DO_BANCO',
    ],
    'admin' => [
        'user' => 'admin',
        'password_hash' => 'COLE_O_HASH_AQUI',
    ],
];
```

Gere o hash da senha do admin (Terminal do cPanel ou um script PHP temporário):

```bash
php -r "echo password_hash('suaSenhaForte', PASSWORD_DEFAULT), PHP_EOL;"
```

## 5. HTTPS (obrigatório)

Ative **AutoSSL/Let's Encrypt** no domínio. O widget roda em sites de clientes que são HTTPS; uma API em HTTP seria bloqueada por *mixed content*. O cookie de sessão do painel também só recebe a flag `secure` sob HTTPS.

## 6. Primeiro conteúdo (crawler)

Cadastre o cliente pelo painel (`https://SEU-DOMINIO/admin/`) e clique em **Atualizar conteúdo**, ou rode pela linha de comando:

```bash
php crawler/update.php --cliente=1 --limit=25
```

## 7. Atualização automática (cron)

Em **Cron Jobs**, agende (ex.: diário):

```
/usr/local/bin/ea-php83 /home/USUARIO/public_html/crawler/update.php --cliente=1 --limit=25
```

Ajuste o caminho do PHP (`ea-php81/82/83`) e do `public_html`. As credenciais vêm do `config/local.php`, então **não precisa** exportar variáveis no cron.

## 8. Incorporar o widget no site do cliente

```html
<script
    src="https://SEU-DOMINIO/widget/widget.js"
    data-token="TOKEN_DO_CLIENTE"
    data-title="Assistente"></script>
```

O endpoint da API é inferido do `src` do script. Só `data-token` é obrigatório.

## Verificação rápida

- `https://SEU-DOMINIO/admin/` abre a tela de login.
- `curl -X POST https://SEU-DOMINIO/api/perguntar -H "Content-Type: application/json" -d '{"token":"...","pergunta":"..."}'` responde JSON.
- O widget aparece no site do cliente e responde.

## Endurecimento opcional (pós-deploy)

- Restringir a API por domínio do cliente (validar `Origin`/`Referer` contra `clientes.dominio`) e apertar o CORS por cliente.
- Ajustar `rate_limit`, `min_relevance` e `logging.level` via `config/local.php`.
