# Checklist de Deploy — instalação AMIMAK (cPanel)

Dados desta instalação:

| Item | Valor |
|---|---|
| Utilizador cPanel | `amimak` |
| Subdomínio | `app.amimak.co.mz` |
| Pasta do projeto Laravel (completo) | `/home/amimak/public_html/app.amimak.co.mz` |
| Document root do subdomínio (ajustado) | `/home/amimak/public_html/app.amimak.co.mz/public` |
| Base de dados | `amimak_fsm` |
| Utilizador BD | `amimak_fsm` |
| Email de envio | `app@amimak.co.mz` |
| PHP CLI/versão | 8.3 (`ea-php83`) |

## Layout escolhido

Ao contrário do plano inicial (projeto fora do `public_html`), esta
instalação usa o **document root ajustado** para a subpasta `public/`
dentro da própria pasta do subdomínio. Isto mantém o projeto todo numa
única pasta, mas protege `.env`, `app/`, `database/`, etc. de acesso
directo pela web — só o que está em `public/` fica exposto.

```
/home/amimak/public_html/app.amimak.co.mz/    ← projeto Laravel completo
├── app/
├── bootstrap/
├── config/
├── database/
├── routes/
├── vendor/
├── .env
└── public/                                    ← ESTE é o document root real
```

**Passo obrigatório no cPanel**: em "Domains", editar `app.amimak.co.mz`
e mudar o Document Root para
`public_html/app.amimak.co.mz/public`. Sem isto, todo o código-fonte fica
acessível publicamente — não avançar sem confirmar este passo.

## Passos, por ordem

1. **Instalar o Composer localmente** (se ainda não estiver):

   ```bash
   mkdir -p $HOME/bin
   cd ~
   php -d allow_url_fopen=1 <(curl -sS https://getcomposer.org/installer) --install-dir=$HOME/bin --filename=composer
   echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
   echo 'alias php="/opt/cpanel/ea-php83/root/usr/bin/php"' >> ~/.bashrc
   source ~/.bashrc
   composer --version   # confirmar
   php -v                # confirmar 8.3.x
   ```

2. **Criar o projeto Laravel directamente na pasta do subdomínio**:

   ```bash
   cd ~/public_html/app.amimak.co.mz
   composer create-project laravel/laravel .
   ```

   Se a pasta já tiver ficheiros (do zip extraído anteriormente), mover
   temporariamente para fora, instalar limpo, e voltar a copiar por cima.

3. **Copiar por cima os ficheiros customizados** (app/, database/,
   routes/, config/company.php, docs/, tests/, deploy/) para dentro desta
   mesma pasta, substituindo os equivalentes que o `create-project` criou
   (ex: `database/seeders/DatabaseSeeder.php`, `routes/console.php`).

4. **Colocar o `.env`** (o já preenchido com as credenciais desta
   instalação) na raiz de `public_html/app.amimak.co.mz/.env`.

5. **Ajustar o Document Root no cPanel** (ver acima) para
   `public_html/app.amimak.co.mz/public`.

6. Instalar dependências e configurar:

   ```bash
   cd ~/public_html/app.amimak.co.mz
   composer install --no-dev --optimize-autoloader
   composer require spatie/laravel-permission laravel/sanctum pragmarx/google2fa
   php artisan key:generate
   php artisan migrate --seed
   php artisan config:cache
   php artisan route:cache
   php artisan storage:link
   ```

7. **Permissões**:

   ```bash
   chmod -R 775 storage bootstrap/cache
   ```

8. **Cron Job** (cPanel → "Cron Jobs"), a correr a cada minuto:

   ```
   * * * * * cd /home/amimak/public_html/app.amimak.co.mz && /opt/cpanel/ea-php83/root/usr/bin/php artisan schedule:run >> /dev/null 2>&1
   ```

9. **SSL**: confirmar em cPanel → "SSL/TLS Status" que o AutoSSL cobre
   `app.amimak.co.mz`.

10. **Testar**:
    - `https://app.amimak.co.mz` → página inicial do Laravel
    - `https://app.amimak.co.mz/up` → health check, deve devolver 200 OK
    - `https://app.amimak.co.mz/.env` → **TEM de dar 403/404**. Se
      conseguires ver o conteúdo do `.env` no browser, o Document Root
      não ficou ajustado correctamente — corrigir antes de continuar.

## Erros comuns nesta configuração

| Sintoma | Causa provável |
|---|---|
| 500 ao abrir o site | Permissões de `storage/`/`bootstrap/cache`, ou `APP_KEY` vazio |
| Consigo ver `.env` no browser | Document Root não foi mudado para `/public` — corrigir já |
| "could not find driver" | Extensão PDO MySQL não activa no PHP 8.3 — verificar em "MultiPHP INI Editor" |
| CSS/JS não carregam | `.htaccess` em falta dentro de `public/`, ou cache de rotas desactualizada (`php artisan route:clear`) |
| Emails não saem | Testar `MAIL_PORT=465` + `MAIL_ENCRYPTION=ssl` como alternativa ao 587 |
| Cron não corre | Confirmar caminho absoluto exacto e que usa o PHP 8.3 (`ea-php83`), não o binário `php` por omissão do cron (que pode ser antigo) |
