06-site-and-apache.md (2204B)
1 # Site público e Apache 2 3 [← Índice](README.md) 4 5 ## Conteúdo estático 6 7 - **`site/public/`:** HTML, CSS, JS servidos como DocumentRoot após `genlanding.py`. 8 - A landing faz `fetch("data/members.json")` **relativo à URL** — o ficheiro efectivo é **`DocumentRoot/data/members.json`** (ver `site/public/assets/app.js`). 9 10 ## Script: `site/genlanding.py` 11 12 - Configura VirtualHost Apache, `mod_userdir`, `mod_rewrite`, copia `site/public` → DocumentRoot. 13 - Modo produção: domínio predefinido `runv.club`, DocumentRoot predefinido `/var/www/runv.club/html`. 14 - Modo `--dev`: `runv.local`, `/var/www/runv-dev/html`. 15 - Opcional: `--certbot` (incompatível com `--dev`). 16 - Após cópia, por omissão chama `build_directory.py` para gravar `data/members.json` no DocumentRoot (`--no-refresh-members` para omitir). 17 - **`--sync-public-only`:** só copia `site/public/` → DocumentRoot, `chown www-data` e regenera `members.json`; **não** altera Apache (uso típico após `create_runv_user.py` e disponível para correr à mão). 18 - **RSS (`/news/feed.rss`):** o `genlanding` completo (sem `--sync-public-only`) grava `/etc/apache2/conf-available/runv-landing-rss-mime.conf` com **`RemoveType`**, **`ForceType text/xml`** e **`Header set Content-Type`** (sobrepor `mod_mime` / `application/rss+xml`), activa **`a2enmod headers`** e **`a2enconf runv-landing-rss-mime`**. O snippet é **global** ao Apache (**:80 e :443**) sem editar o VirtualHost SSL do Certbot. Após mudar o DocumentRoot, volte a correr o `genlanding` completo para actualizar o snippet. 19 - Versão actual do script: constante `VERSION` no ficheiro (ex.: `0.07`). 20 21 ## TLS e DNS 22 23 - **Recomendação:** DNS a apontar para o servidor antes de Certbot (documentado historicamente). 24 25 ## Constelação (bolhas) 26 27 - Depende de `members.json` no DocumentRoot. 28 - Após **`create_runv_user.py`:** se `--landing-document-root` existir como directório, o script corre **`genlanding.py --sync-public-only`** (cópia de `site/public/` + `members.json`) e imprime **`landing (public + bolhas)`** ou **AVISO** se faltar path ou falhar (**evidência:** `create_runv_user.py`). 29 30 Próximo: [07-public-members-directory.md](07-public-members-directory.md).