# Publicar o Nexus na rede local (WAMP · servidor 172.16.0.148)

Guia passo a passo para deixar o Nexus acessível pelos outros computadores/celulares
da rede local. Feito para leigos: cada passo tem os comandos prontos para **copiar e
colar** e uma confirmação **"✅ Deu certo se…"**.

> **O que é o quê:** o Nexus é um site PHP servido pelo **Apache** (o servidor web do
> WAMP) e guarda os dados no **MariaDB** (o banco de dados, na porta **3307**). Para os
> outros aparelhos enxergarem o site, precisamos: (1) ligar os componentes do PHP/Apache
> que o Nexus usa, (2) abrir o banco para a rede, (3) abrir o **Firewall do Windows** e
> (4) criar um **endereço** (host) para acessar.

---

## Antes de começar — descubra as versões (30 segundos)

As pastas do WAMP têm o número da versão no nome. Abra o **Prompt de Comando** (Menu
Iniciar → digite `cmd` → Enter) e rode:

```cmd
dir C:\wamp64\bin\apache
dir C:\wamp64\bin\php
dir C:\wamp64\bin\mariadb
```

Anote os nomes exatos das pastas (ex.: `apache2.4.62`, `php8.3.28`, `mariadb11.4.9`).
**Nos comandos abaixo, troque `apache2.4.XX` / `mariadb11.4.XX` pela versão que apareceu.**

✅ Deu certo se você viu uma pasta `apache2.4.*`, uma `php8.3.*` e uma `mariadb11.4.*`.

---

## Passo 1 — Ligar as extensões do PHP e os módulos do Apache

O Nexus usa: **curl** (falar com InControl/Omada/SolarMan/CELESC), **openssl** (HTTPS e
notificações), **gd** + **exif** (fotos faciais), **mbstring** + **intl** (textos em
português), **pdo_mysql** + **mysqli** (banco), **fileinfo** (upload de documentos) e
**opcache** (velocidade). No Apache: **rewrite** (as URLs amigáveis) e **headers**
(cabeçalhos de segurança).

### Jeito fácil (pelo ícone do WAMP) — recomendado

1. Clique com o **botão esquerdo** no ícone do WAMP (relógio, ao lado do relógio do Windows).
2. **PHP → Extensões PHP** e deixe **marcados**: `curl`, `gd`, `exif`, `intl`, `mbstring`,
   `mysqli`, `pdo_mysql`, `openssl`, `fileinfo`, `opcache`.
3. **Apache → Módulos Apache** e deixe **marcados**: `rewrite_module` e `headers_module`.
4. O WAMP reinicia sozinho e o ícone volta a ficar **verde**.

### Jeito manual (se preferir editar os arquivos)

Edite o `php.ini` que o Apache usa **de verdade** — o caminho exato aparece no
`phpinfo()` em **"Loaded Configuration File"** (no seu servidor é
`C:\wamp64\bin\apache\apache2.4.XX\bin\php.ini`) — e garanta estas linhas **sem** o `;` na frente:

```ini
extension=curl
extension=gd
extension=mbstring
extension=exif          ; IMPORTANTE: precisa vir DEPOIS de mbstring
extension=intl
extension=mysqli
extension=pdo_mysql
extension=openssl
extension=fileinfo
zend_extension=opcache
```

Edite o `httpd.conf` —
`C:\wamp64\bin\apache\apache2.4.XX\conf\httpd.conf` — e tire o `#` destas duas linhas:

```apache
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
```

Depois reinicie o Apache (ícone WAMP → **Restart All Services**).

✅ **Deu certo se:** ícone do WAMP **verde** e, abrindo `http://localhost/?phpinfo=1` (ou
criando um arquivo com `<?php phpinfo();`), você vê `curl`, `gd`, `openssl`, `pdo_mysql`
e `mod_rewrite` na lista.

> **Só se for usar câmeras de vídeo (go2rtc):** ligue também os módulos de **proxy** do
> Apache — `proxy_module`, `proxy_http_module`, `proxy_wstunnel_module` (este último é o
> que faz o vídeo ao vivo passar). O go2rtc roda em `127.0.0.1:1984` e o Apache repassa
> `/video/`. O passo a passo completo (ProxyPass no vhost + `GO2RTC_BASE_URL=/video`) está
> em **`deploy/INTEGRACAO-VIDEO-GO2RTC.md`**. Sem câmeras de vídeo, pode pular.

---

## Passo 1b — Ajustes do `php.ini` (upload, fuso e produção)

No **mesmo** `php.ini` do Passo 1, ajuste estes valores (o WAMP vem com alguns baixos demais):

```ini
; Fuso horário — sem isto os horários (auditoria, agendas, nascer/pôr do sol) saem 3h errados
date.timezone = America/Sao_Paulo

; Upload de documentos/manuais (o módulo Patrimônio aceita até 25 MB) — o padrão 2M/8M corta o arquivo
upload_max_filesize = 32M
post_max_size = 32M

; Folga de memória para fotos, PDFs e painéis
memory_limit = 256M

; PRODUÇÃO: não mostrar erro na tela do usuário (fica no log). Deixe On só enquanto testa.
display_errors = Off
log_errors = On
```

Reinicie o Apache (ícone WAMP → **Restart All Services**).

✅ **Deu certo se:** no `phpinfo()`, `date.timezone` = `America/Sao_Paulo`,
`upload_max_filesize` = `32M` e `post_max_size` = `32M`.

---

## Passo 2 — Liberar o MariaDB para acesso externo

> Só é necessário se você quer conectar ao banco **de outro computador** (ex.: DBeaver no
> seu notebook). O Nexus em si fala com o banco localmente (`127.0.0.1:3307`) e não
> precisa disto para funcionar.

### 2a. Fazer o MariaDB escutar a rede

Edite `C:\wamp64\bin\mariadb\mariadb11.4.XX\my.ini` e, na seção `[mysqld]`, garanta:

```ini
[mysqld]
port=3307
bind-address=0.0.0.0
```

`bind-address=0.0.0.0` = aceita conexões de qualquer interface (se a linha estiver como
`127.0.0.1`, troque; se não existir, adicione).

### 2b. Dar permissão ao usuário para entrar pela rede

Abra o console do banco: ícone WAMP → **MySQL → MySQL console** (ou pelo Prompt de Comando):

```cmd
"C:\wamp64\bin\mariadb\mariadb11.4.XX\bin\mariadb.exe" -u root -h 127.0.0.1 -P 3307 -p
```

Cole (troque `SUA_SENHA` pela senha do usuário `guilherme`). Isto libera o acesso **só a
partir da rede local 172.16.0.x** — mais seguro que abrir para todo mundo:

```sql
CREATE USER IF NOT EXISTS 'guilherme'@'172.16.0.%' IDENTIFIED BY 'SUA_SENHA';
GRANT ALL PRIVILEGES ON controle_veiculos.* TO 'guilherme'@'172.16.0.%';
FLUSH PRIVILEGES;
```

Reinicie o MariaDB (ícone WAMP → **Restart All Services**).

✅ **Deu certo se:** de outro PC da rede, um cliente de banco conecta em
`172.16.0.148 : 3307` com o usuário `guilherme`. (No próximo passo abrimos o Firewall.)

> **Quer liberar para qualquer origem** (não só a LAN)? Troque `172.16.0.%` por `%`. Menos
> seguro — só faça se realmente precisar.

---

## Passo 3 — Abrir o Firewall do Windows (Apache + MariaDB)

Abra o **Prompt de Comando como Administrador** (Menu Iniciar → digite `cmd` → clique com
o botão direito → **Executar como administrador**) e cole:

```cmd
REM  --- Site (Apache): HTTP 80 e HTTPS 443, abertos para a rede ---
netsh advfirewall firewall add rule name="Nexus Apache HTTP 80"  dir=in action=allow protocol=TCP localport=80
netsh advfirewall firewall add rule name="Nexus Apache HTTPS 443" dir=in action=allow protocol=TCP localport=443

REM  --- Banco (MariaDB) 3307: aberto SÓ para a rede local 172.16.0.x ---
netsh advfirewall firewall add rule name="Nexus MariaDB 3307 LAN" dir=in action=allow protocol=TCP localport=3307 remoteip=172.16.0.0/24
```

Reforço (opcional) — liberar os **programas** também (ajuste a versão do Apache):

```cmd
netsh advfirewall firewall add rule name="Nexus httpd"  dir=in action=allow program="C:\wamp64\bin\apache\apache2.4.XX\bin\httpd.exe"  enable=yes
netsh advfirewall firewall add rule name="Nexus mysqld" dir=in action=allow program="C:\wamp64\bin\mariadb\mariadb11.4.XX\bin\mysqld.exe" enable=yes
```

✅ **Deu certo se:** de outro PC, no navegador, `http://172.16.0.148` responde (mesmo que
com erro do site — o importante é a conexão chegar, não dar "tempo esgotado").

> **Para remover** uma regra depois: `netsh advfirewall firewall delete rule name="Nexus Apache HTTP 80"`.

---

## Passo 4 — Criar o host para acesso na rede local

### 4a. Onde ficam os arquivos do Nexus

Coloque o projeto em `C:\wamp64\www\Nexus` (então o site fica em
`C:\wamp64\www\Nexus\public`, onde está o `index.php` — o **público** é a pasta que o
Apache serve; o resto do código fica protegido acima dela).

### 4b. Criar o Virtual Host

Edite `C:\wamp64\bin\apache\apache2.4.XX\conf\extra\httpd-vhosts.conf` e adicione no fim:

```apache
<VirtualHost *:80>
    ServerName nexus.local
    ServerAlias 172.16.0.148
    DocumentRoot "C:/wamp64/www/Nexus/public"

    <Directory "C:/wamp64/www/Nexus/public">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require ip 127.0.0.1 ::1 172.16.0
    </Directory>
</VirtualHost>
```

Explicando as linhas que importam:

- `DocumentRoot ...\public` — aponta para a pasta **public** (o coração do roteador está lá).
- `AllowOverride All` — deixa o `.htaccess` do Nexus funcionar (URLs amigáveis, segurança).
- `Require ip ... 172.16.0` — libera **só** a rede local `172.16.0.x` (mais seguro que abrir para todos).

Confirme que o `httpd.conf` carrega os vhosts (no WAMP já vem ligado) — procure e garanta
que esta linha **não** esteja comentada:

```apache
Include conf/extra/httpd-vhosts.conf
```

Reinicie o Apache: ícone WAMP → **Restart All Services** (ou, no Prompt como Admin:
`net stop wampapache64 && net start wampapache64`).

### 4c. (Opcional) Usar o nome `nexus.local` em vez do IP

Para digitar `http://nexus.local` em vez do IP, **em cada computador que vai acessar**,
edite `C:\Windows\System32\drivers\etc\hosts` (abra o Bloco de Notas **como
Administrador**) e adicione a linha:

```
172.16.0.148   nexus.local
```

Em **celular** não dá para editar o `hosts` facilmente — nele use direto
`http://172.16.0.148`. (O Nexus monta os links e QR a partir do endereço que você usou para
acessar, então tudo continua batendo.)

✅ **Deu certo se:** de outro computador da rede, `http://172.16.0.148` (ou
`http://nexus.local`) abre a tela de login do Nexus.

---

## Verificação final (checklist rápido)

1. Ícone do WAMP **verde**.
2. No servidor: `http://localhost` abre o Nexus.
3. De outro PC: `http://172.16.0.148` abre o Nexus.
4. No celular (mesmo Wi-Fi): `http://172.16.0.148` abre o Nexus.
5. (Se configurou o banco externo) um cliente de banco conecta em `172.16.0.148:3307`.

---

## Deu problema?

- **"Tempo esgotado" / não abre de outro PC** → quase sempre é **Firewall** (Passo 3) ou os
  dois PCs em redes diferentes. Teste no próprio servidor primeiro (`http://localhost`); se
  lá abre e de fora não, é rede/firewall.
- **Abre mas dá "Forbidden / You don't have permission"** → o bloco `<Directory>` do vhost
  (Passo 4b): confira o caminho do `DocumentRoot` e o `Require ip`. Se quiser liberar geral
  para testar, troque por `Require all granted` (depois volte para o `Require ip`).
- **"Erro 500" ou tela branca** → falta uma extensão do PHP (Passo 1) ou o `.env` do banco.
  Veja o log em `C:\wamp64\logs\apache_error.log` e o `logs/api.log` do Nexus.
- **Site abre sem CSS / links quebrados (erro 404 em tudo)** → `mod_rewrite` desligado ou
  `AllowOverride All` faltando (Passo 1 e Passo 4b).
- **Banco não conecta de fora** → confira, na ordem: `bind-address=0.0.0.0` no `my.ini`
  (2a), o `GRANT ... '172.16.0.%'` (2b) e a regra de firewall da 3307 (Passo 3). Reinicie o
  MariaDB depois de mexer no `my.ini`.
- **`net stop wampapache64` diz que o serviço não existe** → o nome pode variar. Rode
  `sc query | findstr wamp` para ver os nomes reais (ex.: `wampapache64`, `wampmariadb64`).

---

## Observações de segurança (rede local ≠ internet)

- Este guia libera o Nexus **na sua LAN** (`172.16.0.x`), não na internet. Não redirecione
  as portas 80/443/3307 no roteador sem um cuidado extra (HTTPS + senhas fortes + VPN).
- O **banco** foi liberado só para `172.16.0.%` de propósito. Evite `%` (qualquer origem).
- Para **PWA/notificações do navegador** (instalar o app no celular, Web Push) o navegador
  exige **HTTPS**. Em rede local dá para usar um certificado próprio; se for usar esses
  recursos, vale um passo extra de HTTPS depois (posso montar).
