# SIGESTE-IE (Laravel) — como pôr no ar

Este ZIP é o sistema completo: ecrã do mapa + API em Laravel.
Entregue esta pasta a quem gere o servidor (empresa de alojamento ou técnico).

## O que o servidor TEM de ter

Não serve um alojamento partilhado só com MySQL (cPanel barato, por exemplo).

É preciso:

1. **PHP 8.3 ou superior**, com as extensões `pdo_pgsql`, `pgsql`, `mbstring`, `openssl`, `tokenizer`, `xml`, `ctype`, `json`, `fileinfo`.
2. **PostgreSQL** com a extensão **PostGIS**.
3. **GeoServer** (para as camadas WMS do mapa). Sem GeoServer o mapa ainda mostra os lotes pela API, mas as camadas WMS não aparecem.
4. A pasta pública do site deve apontar para `public/` (não para a raiz do projecto).

## Passos (para o técnico)

1. Descompactar o ZIP no servidor (ex.: `/var/www/sigeste-ie`).
2. Copiar `.env.example` para `.env`.
3. Preencher no `.env`:
   - `APP_URL` com o endereço real (https://…)
   - `DB_HOST`, `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD`
4. Gerar a chave da aplicação:

   ```
   php artisan key:generate
   ```

5. Criar a base (se ainda não existir) e aplicar os SQL, **por esta ordem**:

   ```
   psql -h 127.0.0.1 -U sitegeu_user -d sitegeu -f instalacao/01_schema.sql
   psql -h 127.0.0.1 -U sitegeu_user -d sitegeu -f instalacao/02_geoserver_ro.sql
   psql -h 127.0.0.1 -U sitegeu_user -d sitegeu -f instalacao/03_dados_reais.sql
   ```

   Os 724 lotes do Kilamba vêm do desenho `instalacao/kilamba.dwg`. No servidor, converter e importar:

   ```
   ogr2ogr -f PostgreSQL PG:"host=127.0.0.1 dbname=sitegeu user=sitegeu_user password=..." ^
     instalacao/kilamba.dwg -nln import.kilamba_dxf -overwrite -a_srs EPSG:32733
   psql -h 127.0.0.1 -U sitegeu_user -d sitegeu -f instalacao/04_kilamba_para_lotes.sql
   ```

   Se a base antiga já tiver o projecto Kilamba, **não** volte a importar o DWG.

6. Criar as contas iniciais:

   ```
   php artisan sigeste:seed
   ```

7. Permissões de escrita: `storage/` e `bootstrap/cache/`.
8. **Não** correr `php artisan migrate` — as tabelas do SIGESTE estão no schema `territorial`, não nas migrações Laravel.
9. Document root do Nginx/Apache = pasta `public/`.
10. Publicar no GeoServer a vista `territorial.v_lotes_mapa` no workspace `sigeste`, camada `lotes`.

Exemplo Nginx:

```
server {
    listen 80;
    server_name sigeste-ie.exemplo.com;
    root /var/www/sigeste-ie/public;
    index index.php;
    location / { try_files $uri $uri/ /index.php?$query_string; }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }
}
```

## Contas iniciais (mudar logo após o primeiro login)

| Utilizador   | Senha      | Perfil          |
|--------------|------------|-----------------|
| admin        | admin123   | administrador   |
| francisco    | angola123  | administrador   |
| tecnico_kn   | kiwba2026  | técnico         |

Estas senhas já foram usadas em desenvolvimento. **Troque-as** no ecrã de utilizadores.

## Verificar se está a funcionar

No browser:

- `https://seu-dominio.com/` — abre o SIGESTE-IE
- `https://seu-dominio.com/api/saude` — deve devolver `{"ok":true}`

## O que NÃO vem neste ZIP

- Palavras-passe da base de dados ou do servidor
- GeoServer já configurado (instala-se à parte)
- Ligação SSH ao VPS antigo

## Ajuda rápida

Se o ecrã branco aparecer: o document root não está em `public/`, ou falta `APP_KEY` no `.env`.

Se o login falhar: a base não tem o schema `territorial`, ou o `sigeste:seed` ainda não correu.

Se o mapa não mostrar lotes: confirmar `/api/projectos` e `/api/projectos/7/lotes.geojson`, e o GeoServer em `/geoserver/wms`.
