# Cloudflare no NoLapis

Guia para colocar o domínio do NoLapis atrás do Cloudflare (CDN, SSL na borda, WAF e cache) mantendo o deploy atual em cPanel/FTP.

---

## 1. No painel Cloudflare

1. **Add site** → informe o domínio (ex.: `app.seudominio.com.br`).
2. Escolha o plano (Free costuma bastar para começar).
3. **DNS**: aponte o registro do app para o servidor de origem (cPanel):
   - Tipo **A** → IP do servidor (ou **CNAME** se o host já for CNAME).
   - Deixe o ícone da nuvem **laranja** (proxied) para passar pelo Cloudflare.
4. Troque os **nameservers** no registrador do domínio para os que o Cloudflare indicar.
5. **SSL/TLS** → modo recomendado: **Full (strict)**  
   - Gere um **Origin Certificate** no Cloudflare (válido 15 anos) e instale no cPanel (SSL/TLS → Manage SSL sites), **ou** use o AutoSSL do cPanel se o certificado for válido para o hostname de origem.
6. **SSL/TLS** → **Edge Certificates** → ative **Always Use HTTPS**.
7. **Caching** → para ERP com login, use regras conservadoras:
   - Não cachear rotas autenticadas (`/admin`, `/livewire`, etc.).
   - Página de Rules → **Cache Rules**: bypass para cookies de sessão Laravel ou `Cache-Control: private` (o Laravel já envia em respostas dinâmicas).

---

## 2. Variáveis no `.env` (produção)

No servidor (`public_html/erp/` ou `public_html/nolapis-dev/`), ajuste:

```env
BEHIND_CLOUDFLARE=true
CLOUDFLARE_FORCE_HTTPS=true

APP_URL=https://seu-dominio.com.br
SESSION_SECURE_COOKIE=true

NEW_RELIC_ENABLED=true
NEW_RELIC_APP_NAME="Nolapis ERP Prod"
```

Limpe e regenere o cache de config após alterar (as variáveis ficam em `config/*.php`, não use `env()` direto no código):

```bash
php artisan config:clear
php artisan config:cache
```

---

## 3. O que o código faz

| Item | Arquivo |
|------|---------|
| Confia nos IPs do Cloudflare para `X-Forwarded-*` (IP real, HTTPS, host) | `config/cloudflare.php`, `app/Http/Middleware/TrustProxies.php` |
| Força URLs `https://` quando `BEHIND_CLOUDFLARE=true` | `app/Providers/AppServiceProvider.php` |
| Cookie de sessão seguro por padrão com Cloudflare | `config/session.php` + `SESSION_SECURE_COOKIE` |

Sem `BEHIND_CLOUDFLARE=true`, o comportamento local/desenvolvimento não muda.

---

## 4. Deploy (GitHub Actions)

O deploy por FTP (**`.github/workflows/main.yml`** e **`dev.yml`**) continua igual. O Cloudflare fica **na frente** do domínio; não é necessário mudar o workflow.

---

## 5. Verificação

1. Acesse `https://seu-dominio` e confira o cadeado.
2. No Laravel, confira logs/auditoria: o IP do cliente deve ser o IP real (não um IP da Cloudflare).
3. Teste login, Livewire e upload (NF/XML) — se algo quebrar por cache, crie **Cache Rule** com **Bypass** para o path afetado.

---

## 6. Atualizar IPs do Cloudflare

A lista em `config/cloudflare.php` pode mudar com o tempo. Compare com:

- https://www.cloudflare.com/ips-v4/
- https://www.cloudflare.com/ips-v6/

Atualize o array `trusted_proxies` e faça deploy.

---

## 7. (Opcional) Origin só via Cloudflare

Para reduzir acesso direto ao IP do servidor, restrinja no firewall do host ou via `.htaccess` apenas aos ranges do Cloudflare. Isso é configuração de servidor; o app já confia nos headers somente quando a requisição vem desses IPs.
