# Guia de Deploy

Pensado para hospedagem compartilhada com cPanel + Apache + SQL Server (mesmo cenário dos outros projetos), mas os passos valem para qualquer servidor Linux com PHP.

## 1. Entendendo a estrutura antes de subir

```
ordem-servico/          ← isso é o que você envia por FTP/SFTP
├── .env                ← você cria aqui (fora de public_html!)
├── private/             ← fica FORA do webroot
└── public_html/         ← só isso é apontado pelo domínio
```

**O ponto mais importante do deploy:** o domínio (ou subdomínio) deve apontar para dentro de `public_html/`, nunca para a raiz do projeto. É isso que garante que `.env`, `private/` e o `.sql` fiquem inacessíveis via navegador — nem precisa de `.htaccess` pra isso, é a própria estrutura de pastas que protege.

No cPanel, isso normalmente é feito em **Domínios** → editar o "Document Root" do domínio/subdomínio para apontar para `.../ordem-servico/public_html` em vez de `.../ordem-servico`.

Se seu plano de hospedagem só permite usar a `public_html` raiz da conta (sem subpastas customizáveis), aí sim: envie o conteúdo de `public_html/` (deste projeto) direto para a `public_html/` da hospedagem, e envie `private/`, `.env`, `criar_superadmin.php` e o `.sql` para uma pasta **um nível acima** dela (ex: `/home/seuusuario/ordem-servico-private/`). Nesse caso, ajuste os caminhos `__DIR__ . '/../../../private/...'` nos arquivos de `api/` para apontar pro lugar certo.

## 2. Banco de dados
1. Criar o banco no SQL Server (via painel de hospedagem ou SSMS)
2. Rodar `script_criacao_banco.sql` inteiro nele
3. Criar um usuário de banco dedicado (evite usar `sa` em produção) com permissão apenas neste banco

## 3. Configuração (.env)
1. Copiar `.env.example` para `.env` (mesma pasta, raiz do projeto)
2. Preencher `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASS`
3. Gerar e preencher `JWT_SECRET`: `php -r "echo bin2hex(random_bytes(32));"`
4. Conferir que a extensão `sqlsrv`/`pdo_sqlsrv` está ativa no PHP do servidor (no cPanel: MultiPHP INI Editor ou pedir ao suporte da hospedagem)
5. Dar permissão de escrita para `public_html/uploads/os/` (geralmente `755` já basta; em alguns hosts pode ser necessário `775`)

## 4. Primeiro acesso
```
php criar_superadmin.php "Seu Nome" "voce@dominio.com" "uma-senha-forte"
```
Precisa de acesso SSH (comum em planos de hospedagem intermediários/avançados no cPanel). Se seu plano não tiver SSH, rode o script localmente apontando o `.env` para o banco de produção, ou peça ao suporte da hospedagem para executar via terminal deles.

## 5. E-mail
A função `mail()` usada em `NotificacaoService.php` depende do servidor de e-mail já configurado no host (comum em cPanel). Para maior confiabilidade (evitar cair em spam), recomenda-se trocar por SMTP autenticado via PHPMailer — mesmo padrão usado nos outros projetos.

## 6. SMS/WhatsApp
Pendente de decisão do provedor. Quando escolhido, implementar a classe do driver em `private/includes/NotificacaoService.php` (veja o comentário `SmsDriverTwilio` de exemplo no arquivo) e trocar a linha em `driverSms()`.

## 7. URLs amigáveis
O `.htaccess` dentro de `public_html/` já reescreve:
- `/acompanhar/TOKEN` → página pública do cliente
- `/painel` → painel da empresa
- `/superadmin` → painel do super admin

Exige `mod_rewrite` ativo (padrão na maioria dos hosts cPanel) e `AllowOverride All` no vhost (para o `.htaccess` funcionar).

## 8. Checklist de segurança antes de ir ao ar
- [ ] Domínio aponta para `public_html/`, **não** para a raiz do projeto
- [ ] `.env` preenchido com credenciais reais e `JWT_SECRET` trocado (não deixar em branco)
- [ ] Senha do banco forte, usuário sem privilégio de `sa`
- [ ] HTTPS ativo no domínio (senão o link do cliente e o login trafegam sem criptografia)
- [ ] Testar diretamente pela URL que `private/` e o `.env` retornam 404 (ex: `seudominio.com/../private/config/database.php` não deve funcionar — se o domínio aponta certo para `public_html/`, isso já é garantido por padrão)
- [ ] Testar upload de foto e confirmar que o arquivo salvo não pode ser executado como PHP
