# Infraestrutura e hospedagem — Portal da Associada Eletros

> Documento de referência para decisões de infraestrutura e deploy.  
> Complementa o `BRIEFING.md` — seção 11.  
> Última atualização: julho/2026.

---

## 1. Arquitetura de ambientes *(decisão registrada)*

| Ambiente | Onde roda | Responsável | Branch Git |
|----------|-----------|-------------|------------|
| **Local** | **Docker** (dev) | Neotix | feature branches |
| **Homologação** | **AWS Neotix** (PHP — sem Docker) | Neotix | `develop` / `homolog` |
| **Produção** | **Hostgator** (PHP — sem Docker) | Infra do cliente | `main` |

```
Desenvolvimento local
  → deploy em homolog (AWS Neotix) — testes e validação
  → aprovação
  → deploy em produção (Hostgator)
```

A homologação **não** fica na Hostgator. **Docker** apenas no dev local; homolog (AWS) e produção (Hostgator) usam deploy PHP tradicional.

**Stack:** Laravel 11 + Filament (admin) + **Livewire 3** (portal). Ver `BRIEFING.md` §9.1 e §9.4.

---

## 2. Cenário atual do cliente (produção)

| Item | Situação |
|------|----------|
| **Provedor** | Hostgator |
| **Pacote** | **G** (Shared Hosting) |
| **Servidor** | `br210` |
| **Painel** | cPanel 118.0 (build 70) |
| **Site principal** | WordPress no domínio principal (ex.: `eletros.org.br`) |
| **Novo projeto** | Portal Laravel 11 + Filament 3 + **Livewire 3** |

### Pergunta frequente: precisa de outro produto/plano?

**Não necessariamente.** Na Hostgator Shared Hosting, um único plano com cPanel costuma permitir:

- **Domínio principal** → site WordPress (`public_html/`)
- **Subdomínio** → portal Laravel em produção (ex.: `portal.eletros.org.br`)

Ou seja: **o mesmo produto hospeda WordPress e o portal em produção**, desde que o plano suporte os requisitos técnicos abaixo. A homologação roda separadamente na AWS da Neotix. **Não é necessário um segundo plano Hostgator.**

---

## 3. Informações do servidor — br210

Levantamento via cPanel → *Informações do servidor* (julho/2026).

### 3.1 Especificações

| Item | Detalhe |
|------|---------|
| Pacote de hospedagem | **G** (Shared Hosting) |
| Nome do servidor | `br210` |
| cPanel | 118.0 (build 70) |
| Apache | 2.4.68 |
| MySQL | **5.7.44-48** |
| SO / Kernel | Linux — `5.14.0-687.15.1.el9_8.x86_64` |
| Arquitetura | x86_64 |
| IP compartilhado | `192.185.211.3` |
| IP local | `10.53.243.125` |
| Caminho da conta | **`/home1/eletr328/`** |
| E-mail (sendmail) | `/usr/sbin/sendmail` |
| Perl | 5.16.3 (`/usr/bin/perl`) |
| PHP (padrão do sistema) | **8.3** (`ea-php83`) |
| PHP (versões disponíveis) | 8.1, 8.2, 8.3, 8.4, 8.5, inherit |
| PHP (domínio principal atual) | **8.1** (`ea-php81`) — selecionado no cPanel |
| Composer | **2.6.5** (confirmado via Terminal) |

### 3.2 Saúde do servidor (no momento do levantamento)

| Métrica | Valor | Status |
|---------|-------|--------|
| Server Load | 0.07 | ✅ OK |
| CPUs | 12 | ✅ OK |
| Memória usada | 46.23% | ✅ OK |
| Swap | 0.00% | ✅ OK |
| Disco `/` | 23% | ✅ OK |
| Disco `/home1` | 77% | ⚠️ Atenção |
| Disco `/home2` | **85%** | ⚠️ **Alerta** |
| Disco `/var/lib/mysql` | 10% | ✅ OK |

> **Disco:** a conta da Eletros fica em **`/home1`** (`/home1/eletr328/`). O `/home2` do servidor está em 85%, mas **não afeta esta conta**. Monitorar espaço em *Disk Usage* antes do deploy.

### 3.3 Compatibilidade com Laravel 11

| Requisito | Necessário | Servidor | Status |
|-----------|------------|----------|--------|
| PHP | ≥ 8.2 | **8.1 a 8.5 disponíveis** | ✅ Compatível — configurar subdomínio do portal |
| MySQL | 5.7+ | 5.7.44-48 | ✅ Compatível |
| Apache | 2.4+ | 2.4.68 | ✅ Compatível |
| Extensões PHP | BCMath, PDO, Mbstring, etc. | ✅ Todas presentes | Ver §3.5 |
| Composer / SSH | Recomendado | ✅ **Composer 2.6.5** + Terminal | Confirmado via cPanel Terminal |
| Cron | `schedule:run` | cPanel disponível | ⏳ Configurar no deploy |
| SSL | HTTPS | cPanel Let's Encrypt | ⏳ Configurar no subdomínio |
| Espaço em disco | Suficiente para app + uploads | ✅ **~5 GB usados / ~1 TB cota** | Ver §3.6 |

**MySQL 5.7:** atende o requisito mínimo do Laravel 11, mas está em fim de vida (EOL). Funciona para o projeto; sem necessidade de upgrade imediato, porém a Hostgator pode migrar para MariaDB/MySQL 8 em algum momento.

### 3.4 PHP — versões e configuração

Levantamento via cPanel → *Versão de PHP* / *MultiPHP Manager* (julho/2026).

| Configuração | Valor |
|--------------|-------|
| Padrão do sistema | **PHP 8.3** (`ea-php83`) |
| Versões disponíveis por domínio | 8.1, 8.2, 8.3, 8.4, 8.5, inherit |
| Domínio principal (WordPress) | **PHP 8.1** (`ea-php81`) — atualmente selecionado |

**Ação no deploy:** ao criar o subdomínio `portal.eletros.org.br`, definir **PHP 8.3** (`ea-php83`) para esse domínio. É a versão padrão do servidor e atende o Laravel 11 com folga.

| Domínio | PHP recomendado | Motivo |
|---------|-----------------|--------|
| `eletros.org.br` (WordPress) | **8.1** (manter) | Não alterar — evita quebrar o site existente |
| `portal.eletros.org.br` (Laravel) | **8.3** (`ea-php83`) | Requisito Laravel 11 (≥ 8.2); padrão do servidor |

> Domínios com valor `inherit` usam o PHP padrão do sistema (8.3). O subdomínio do portal pode usar `inherit` ou `ea-php83` explicitamente — resultado equivalente.

**PHP 8.4 / 8.5:** disponíveis no servidor, mas **8.3 é a escolha recomendada** por ser o padrão do sistema e ter maturidade com Laravel 11.

### 3.5 Extensões PHP — validação

Levantamento via `php -m` / `phpinfo()` na conta `eletr328` (julho/2026).

**Requisitos Laravel 11:**

| Extensão | Status |
|----------|--------|
| bcmath | ✅ |
| ctype | ✅ |
| curl | ✅ |
| dom | ✅ |
| fileinfo | ✅ |
| filter | ✅ |
| hash | ✅ |
| json | ✅ |
| mbstring | ✅ |
| openssl | ✅ |
| pcre | ✅ |
| PDO | ✅ |
| pdo_mysql | ✅ |
| session | ✅ |
| tokenizer | ✅ |
| xml | ✅ |

**Extras úteis para o projeto (já disponíveis):**

| Extensão | Uso |
|----------|-----|
| redis | Cache/filas (opcional) |
| zip | Compactação de arquivos |
| gd / imagick | Manipulação de imagens |
| intl | Internacionalização |
| Zend OPcache | Performance PHP |
| sodium | Criptografia |

> **Nota:** a lista acima reflete o PHP da conta no momento do teste (provavelmente **8.1** do domínio principal). Ao configurar o subdomínio do portal com **PHP 8.3**, repetir a verificação — as extensões costumam ser as mesmas, mas convém confirmar.

### 3.6 Uso de disco da conta

Levantamento via cPanel → *Uso do disco* (julho/2026).

| Item | Valor |
|------|-------|
| **Total usado** | **5.097,90 MB** (~5,1 GB) |
| **Cota da conta** | 999.999 MB (~1 TB) |
| **Espaço livre** | Amplo — sem risco para o portal |

**Maiores consumidores:**

| Diretório / item | Tamanho | Observação |
|------------------|---------|------------|
| `public_html/` | 2.556,94 MB (~2,5 GB) | WordPress + arquivos do site |
| MySQL | 1.066,33 MB (~1 GB) | Bancos existentes |
| `softaculous_backups/` | 817,98 MB (~818 MB) | Backups do Softaculous — candidato a limpeza futura |
| `tmp/` | 206,48 MB | Temporários |
| Contas de e-mail | 121,60 MB | |
| Arquivos ocultos | 177,53 MB | |
| `backups/` | 36,50 MB | |

**Estimativa para o portal Laravel:**

| Item | Espaço estimado |
|------|-----------------|
| Código + `vendor/` | ~100–150 MB |
| `storage/` (uploads) | Variável — cresce com documentos e indicadores |
| Banco MySQL do portal | Inicialmente pequeno; censo e cadastros aumentam com o tempo |

**Conclusão:** há espaço **mais que suficiente** para o portal. A cota de ~1 TB comporta crescimento de uploads por muitos anos. Opcionalmente, a Eletros pode revisar `softaculous_backups/` (818 MB) para liberar espaço, mas **não é bloqueante**.

---

## 4. Arquitetura de produção (Hostgator)

Subdomínio no mesmo cPanel do plano existente:

```
eletros.org.br              → WordPress (public_html/)
portal.eletros.org.br       → Laravel produção (portal/public/)
```

| Prós | Contras |
|------|---------|
| Sem custo adicional de plano | Compartilha recursos (CPU/RAM) com WordPress |
| Um único cPanel para gerenciar | PHP version pode ser por pasta, mas limitações do shared |
| SSL via Let's Encrypt no cPanel | Deploy de Laravel exige mais configuração que WordPress |
| Banco MySQL dedicado ao portal | SSH pode ser limitado em planos básicos |

**WordPress e Laravel não conflitam** desde que cada um tenha sua pasta e seu banco de dados. O WordPress continua em `public_html/`; o Laravel fica em pasta fora do document root do WP, com o subdomínio apontando para `portal/public/`.

---

## 5. Homologação — AWS Neotix

Ambiente PHP tradicional na AWS (sem Docker), gerenciado pela Neotix:

| Aspecto | Homolog AWS |
|---------|-------------|
| PHP | 8.3 |
| Servidor web | Nginx ou Apache |
| Banco de dados | MySQL |
| Debug | `APP_DEBUG=true` |
| Deploy | Git + Composer + migrations |

> **Pendente:** Definir URL de acesso à homolog (subdomínio Neotix ou IP).

### Variáveis `.env` — homolog

| Variável | Valor |
|----------|-------|
| `APP_ENV` | `staging` |
| `APP_DEBUG` | `true` |
| `APP_URL` | URL do servidor AWS Neotix |
| `DB_*` | Credenciais do banco na AWS |

---

## 6. Checklist de compatibilidade — produção (Hostgator)

Verificar no cPanel do plano atual **antes** do primeiro deploy em produção:

| Requisito | Laravel 11 | Status no br210 | Como verificar |
|-----------|------------|-----------------|----------------|
| **PHP** | ≥ 8.2 | ✅ **8.1–8.5 disponíveis** — usar **8.3** no subdomínio do portal | *MultiPHP Manager* → `portal.eletros.org.br` → PHP 8.3 |
| **Extensões** | BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PCRE, PDO, Tokenizer, XML | ✅ **Todas presentes** | Ver §3.5 — revalidar com PHP 8.3 no subdomínio |
| **MySQL** | 5.7+ | ✅ **5.7.44-48** | Já confirmado no servidor |
| **Apache** | 2.4+ | ✅ **2.4.68** | Já confirmado no servidor |
| **Composer** | 2.x | ✅ **2.6.5** | Confirmado via Terminal |
| **Terminal / SSH** | Recomendado | ✅ Terminal disponível | cPanel → Terminal |
| **Cron** | `schedule:run` | ⏳ Pendente | *Cron Jobs* |
| **SSL** | HTTPS | ⏳ Pendente | *SSL/TLS* → Let's Encrypt no subdomínio |
| **Espaço em disco** | Suficiente | ✅ **~5,1 GB / ~1 TB cota** | Ver §3.6 |
| **Banco MySQL** | 1 DB para o portal | ⏳ Pendente | *MySQL Databases* — criar DB do portal |

### Se não houver SSH

Alternativas de deploy:

1. Rodar `composer install --no-dev` **localmente** e enviar a pasta `vendor/` via FTP/SFTP
2. Pipeline CI (GitHub Actions) que gera artefato e faz deploy via FTP
3. Usar *Terminal* do cPanel (quando disponível) para rodar Composer no servidor

---

## 7. Estrutura de pastas — produção Hostgator

```
/home1/eletr328/
├── public_html/                    ← WordPress (site principal)
│   └── ...
│
└── portal/                         ← Laravel produção
    ├── public/                     ← document root (única pasta web)
    │   └── index.php
    ├── storage/
    │   └── app/
    │       └── private/            ← uploads do portal (NÃO acessível por URL)
    │           ├── governanca/
    │           ├── indicadores/
    │           └── financeiro/
    ├── .env                        ← fora do public
    └── ...
```

### Configuração do subdomínio

No cPanel → **Subdomains** (ou **Domains** → subdomain):

| Subdomínio | Document Root |
|------------|---------------|
| `portal.eletros.org.br` | `/home1/eletr328/portal/public` |

> **Importante:** o document root aponta **somente** para `public/`. Arquivos em `storage/app/private/` ficam fora do alcance do Apache.

### 7.1 Armazenamento de arquivos (produção)

Decisão alinhada ao `BRIEFING.md` §9.6:

| Item | Configuração |
|------|--------------|
| Disco | `local` / `private` → `portal/storage/app/private/` |
| Acesso web direto | **Não** — Apache não serve essa pasta |
| Download | Laravel: rota autenticada + Policy + `Storage::download()` |
| `php artisan storage:link` | **Não necessário** para uploads do portal |
| Backup | Incluir `portal/storage/app/private/` (Softaculous não cobre por padrão) |
| Espaço | Cota ~1 TB — suficiente; uploads crescem em `storage/app/private/` |

**Limites PHP a configurar no subdomínio (PHP 8.3):** `upload_max_filesize` e `post_max_size` — relevante para planilhas de indicadores.

---

## 8. Resumo de ambientes

| Ambiente | Infra | URL | Branch | Banco |
|----------|-------|-----|--------|-------|
| **Local** | Dev machine | `localhost` | feature branches | SQLite / MySQL local |
| **Homolog** | **AWS Neotix** | A definir | `develop` / `homolog` | MySQL na AWS |
| **Produção** | **Hostgator** | `portal.eletros.org.br` | `main` | MySQL no cPanel |

### Variáveis `.env` — produção (Hostgator)

| Variável | Valor |
|----------|-------|
| `APP_ENV` | `production` |
| `APP_DEBUG` | `false` |
| `APP_URL` | `https://portal.eletros.org.br` |
| `DB_*` | Credenciais do DB no cPanel |

---

## 9. Fluxo de deploy

```
Desenvolvimento (Docker local)
  → testes
  → deploy em homolog (AWS — PHP) — validação com cliente
  → aprovação
  → deploy em produção (Hostgator — PHP)
```

> **Homolog e produção:** sem Docker. Deploy PHP tradicional (Composer + migrations + cache).

### Comandos pós-deploy — homolog (AWS)

```bash
cd /caminho/do/projeto

composer install --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

chmod -R 775 storage bootstrap/cache
```

> **Nota:** `php artisan storage:link` **não é necessário** — uploads ficam em `storage/app/private/` (sem URL pública). Ver §7.1.

### Comandos pós-deploy — produção (Hostgator, Terminal cPanel)

```bash
cd ~/portal

composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

chmod -R 775 storage bootstrap/cache
```

### Cron — produção (obrigatório na Hostgator)

```cron
* * * * * cd /home1/eletr328/portal && php artisan schedule:run >> /dev/null 2>&1
```

---

## 10. PHP no mesmo cPanel — WordPress vs Laravel

O cPanel permite **versão de PHP por domínio** (*MultiPHP Manager*). Versões confirmadas no servidor br210:

| Domínio / Pasta | PHP atual | PHP no deploy |
|-----------------|-----------|---------------|
| `eletros.org.br` (WordPress) | **8.1** (`ea-php81`) | Manter **8.1** |
| `portal.eletros.org.br` (Laravel) | A configurar | Definir **8.3** (`ea-php83`) |

Isso evita quebrar o WordPress ao subir o PHP para atender o Laravel. O padrão do sistema já é 8.3 — domínios com `inherit` herdam essa versão.

---

## 11. Pontos de atenção — Laravel em shared hosting (produção)

Itens válidos no deploy e operação do portal. Itens já verificados no levantamento aparecem como **resolvido**.

| Risco / ponto | Status | Mitigação |
|---------------|--------|-----------|
| PHP do portal abaixo de 8.2 | ⏳ No deploy | Definir **PHP 8.3** no subdomínio `portal.eletros.org.br` via *MultiPHP Manager*; manter WordPress em **8.1** |
| Extensões PHP no subdomínio | ⏳ No deploy | Revalidar `php -m` com PHP 8.3 após criar o subdomínio (em 8.1 já estão todas OK — ver §3.5) |
| Document root expõe `.env` | ⏳ No deploy | Subdomínio **sempre** apontando para `portal/public/`, nunca para a raiz do projeto |
| `storage/` e `bootstrap/cache/` sem escrita | ⏳ No deploy | `chmod -R 775 storage bootstrap/cache` após o primeiro deploy |
| Cron do Laravel ausente | ⏳ No deploy | `* * * * * cd /home1/eletr328/portal && php artisan schedule:run` |
| Arquivos sensíveis em URL pública | Permanente | Manter uploads em `storage/app/private/`; download só via Policy (ver §7.1) |
| Docker em homolog/produção | N/A | **Não usar** — apenas dev local |
| Limite de memória PHP | ⏳ Verificar | Ajustar `memory_limit` ≥ 256M na pasta do portal (*MultiPHP INI Editor*) |
| Upload de arquivos grandes (indicadores) | ⏳ Verificar | Conferir `upload_max_filesize` e `post_max_size` no `phpinfo()` do subdomínio |
| Filas (queues) | Permanente | Usar driver `database` ou `sync` — extensão `redis` existe, mas Redis como serviço não está garantido no shared |
| MySQL 5.7 (EOL) | Aceito | Funciona com Laravel 11; sem ação imediata — monitorar migrações futuras da Hostgator |
| Performance compartilhada com WordPress | Permanente | Monitorar carga; servidor br210 saudável no levantamento (load 0.07, RAM 46%) |
| Espaço em disco da conta | ✅ Resolvido | ~5,1 GB usados de ~1 TB de cota (ver §3.6) |
| Composer / Terminal indisponível | ✅ Resolvido | Composer **2.6.5** e Terminal confirmados |
| Disco `/home2` do servidor em 85% | ✅ Não aplica | Conta em `/home1/eletr328/` com cota própria |

---

## 12. O que confirmar

### Com a Neotix (homolog AWS)

- [ ] URL/domínio de acesso à homolog
- [ ] Instância e banco já provisionados ou a provisionar
- [ ] Fluxo de deploy (manual SSH, CI/CD, etc.)

### Com o cliente / TI da Eletros (produção Hostgator)

- [x] Plano Hostgator: **Pacote G**, servidor **br210**, Shared Hosting
- [x] MySQL: **5.7.44-48** — compatível com Laravel 11
- [x] Apache: **2.4.68** — compatível
- [x] PHP: **8.1–8.5 disponíveis** — padrão do sistema **8.3**; WordPress em **8.1**
- [x] Extensões PHP: **todas as necessárias para Laravel 11 presentes** (ver §3.5)
- [ ] Aplicar **PHP 8.3** no subdomínio `portal.eletros.org.br` (no deploy)
- [ ] Revalidar extensões com PHP 8.3 no subdomínio do portal
- [x] Terminal no cPanel disponível
- [x] Composer: **2.6.5** — compatível com Laravel 11
- [ ] Subdomínios permitidos no plano G
- [ ] Banco MySQL para o portal criado
- [x] Conta em **`/home1/eletr328/`** — fora do `/home2` com alerta
- [x] Espaço em disco: **~5,1 GB usados** de **~1 TB** de cota — ✅ suficiente
- [ ] DNS do domínio — Hostgator ou Registro.br?
- [ ] E-mail transacional — sendmail da Hostgator ou SMTP externo?

---

## 13. Decisões registradas

| Item | Status |
|------|--------|
| **Homologação** | AWS Neotix — PHP (**sem Docker**) |
| **Produção** | Hostgator — Pacote **G**, servidor **br210** (**sem Docker**) |
| **Frontend portal** | **Livewire 3** + Blade |
| **Dev local** | **Docker** (Sail / compose) |
| Site principal (cliente) | WordPress no domínio principal |
| Arquitetura produção | Subdomínio no mesmo cPanel |
| MySQL produção | 5.7.44-48 — compatível |
| PHP produção | **8.3** (`ea-php83`) no subdomínio do portal; WordPress mantém **8.1** |
| Disco | **~5,1 GB / ~1 TB** — espaço amplo |
| Composer | **2.6.5** — disponível no Terminal |
| Terminal cPanel | ✅ Disponível |
| Armazenamento | Disco `private` local — `storage/app/private/` |

---

## 14. Referências

- [Hostgator — PHP Version](https://www.hostgator.com/help/article/what-version-of-php-are-you-using)
- [Laravel 11 — Deployment](https://laravel.com/docs/11.x/deployment)
- [Laravel 11 — Server Requirements](https://laravel.com/docs/11.x/deployment#server-requirements)
- Documento principal do projeto: `BRIEFING.md`

---

*Levantamento do servidor br210 concluído em julho/2026. Pendente: criar subdomínio, banco MySQL do portal e aplicar PHP 8.3.*
