Labs Painel de Sites

README

Documentacao operacional do Labs
# Labs (Painel de Sites)

Painel para gerenciar sites em `/var/www/<slug>` com Slim 4 + Twig.

## Objetivo
- Criar sites novos por template
- Editar metadados e template no painel
- Reprovisionar e remover sites
- Publicar cada site em `http://88.198.104.148/<slug>/`

## Arquitetura atual
- Painel: `/var/www/labs`
- Templates: `/var/www/labs/templates/*`
- Sites provisionados: `/var/www/<slug>`
- Banco do painel (JSON):
  - `storage/data/sites.json`
  - `storage/data/provisioned.json`

## Publicação Apache (modo dinâmico atual)
O ambiente atual usa um único vhost (`labs.conf`) para:
- raiz `/` apontando para o site institucional (`/var/www/natalcode/public`)
- painel em `/labs/`
- sites provisionados em `/<slug>/...` via regra dinâmica

Vhost ativo:
- `/etc/apache2/sites-available/labs.conf`

Configuração recomendada:

```apache
<VirtualHost *:80>
    ServerName 88.198.104.148

    DocumentRoot /var/www/natalcode/public
    <Directory /var/www/natalcode/public>
        AllowOverride All
        Require all granted
    </Directory>

    Alias /labs /var/www/labs/public
    <Directory /var/www/labs/public>
        AllowOverride All
        Require all granted
    </Directory>

    # Fallback para subrotas de sites provisionados:
    # /site1/login, /site1/about, /site2/blog, etc.
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/labs(?:/|$)
    RewriteCond %{REQUEST_URI} !^/assets(?:/|$)
    RewriteCond %{REQUEST_URI} !^/favicon\.ico$
    RewriteCond %{REQUEST_URI} !^/robots\.txt$
    RewriteCond %{REQUEST_URI} ^/([A-Za-z0-9_-]+)/(.*)$
    RewriteCond /var/www/%1/public -d
    RewriteCond /var/www/%1/public/%2 !-f
    RewriteCond /var/www/%1/public/%2 !-d
    RewriteRule ^ /%1/index.php [QSA,L,PT]

    # Mapeamento dinâmico /<slug> -> /var/www/<slug>/public
    AliasMatch ^/(?!labs(?:/|$)|assets(?:/|$)|favicon\.ico$|robots\.txt$)([A-Za-z0-9_-]+)(/.*)?$ /var/www/$1/public$2
    <Directory /var/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/labs_error.log
    CustomLog ${APACHE_LOG_DIR}/labs_access.log combined
</VirtualHost>
```

Aplicar:

```bash
sudo apache2ctl -t
sudo systemctl reload apache2
```

## site-paths.conf (estado atual)
`site-paths.conf` é legado e deve ficar desabilitado neste modo dinâmico.

Verificar:
```bash
ls -l /etc/apache2/conf-enabled/site-paths.conf
```

Desabilitar (se existir):
```bash
sudo a2disconf site-paths
sudo apache2ctl -t
sudo systemctl reload apache2
```

Observação:
- manter `site-paths.conf` habilitado junto com `labs.conf` dinâmico pode gerar comportamento inconsistente por sobreposição de regras/aliases.

## Fluxo operacional
1. Usuário cria/edita/remove em `/admin`.
2. `ProvisionService` aplica template em `/var/www/<slug>`.
3. O site entra em `sites.json` e `provisioned.json`.
4. Apache publica automaticamente pela regra dinâmica.

## Configuração `.env` relevante
```env
ADMIN_PROVISION=true
ADMIN_PROVISION_HOST=88.198.104.148
ADMIN_PROVISION_BASE=/var/www

ADMIN_APACHE_DYNAMIC=true
ADMIN_APACHE_DYNAMIC_VHOST=/etc/apache2/sites-available/labs.conf
ADMIN_APACHE_DYNAMIC_MARKER=LABS_DYNAMIC_SITES

ADMIN_TEMPLATES_DIR=/var/www/labs/templates
ADMIN_TEMPLATE_DEFAULT=tech-v4-blue
```

## Templates disponíveis
- `tech-v4-blue`
- `tech-v4-green`
- `tech-v4-yellow`
- `tech-v4-red`
- `tech-v4-dark`

Cada template possui `template.json` e `README.md` próprio.

## Comandos úteis
Validar Apache:
```bash
sudo apache2ctl -t
```

Recarregar Apache:
```bash
sudo systemctl reload apache2
```

Teste rápido:
```bash
curl -I http://88.198.104.148/
curl -I http://88.198.104.148/labs/
curl -I http://88.198.104.148/site1/
curl -I http://88.198.104.148/site1/login
```

## Arquivos-chave do Labs
- `src/Controllers/AdminController.php`
- `src/Services/ProvisionService.php`
- `src/Services/SiteService.php`
- `src/Config/app.php`
- `bin/provision-site`
- `bin/deprovision-site`

## Historico de Mudancas
- Labs (infra e painel): `CHANGELOG.md`
- Templates de landing page: `templates/tech-v4-*/TEMPLATE_CHANGELOG.md`