alpinux-www/README.md
Cédrix 32b7cd1a0e Détacher www.alpinux.org du monorepo, avec son déploiement
La page d'accueil vivait sous home/ dans alpinux.site.2026, sans webhook : elle était
déposée à la main sur le serveur. Le dépôt avait fini par diverger — la version en ligne
portait quatre mois de modifications jamais revenues dans git.

Ce dépôt suit la règle des autres domaines : un domaine, un dépôt. Le site est dans
site/, la chaîne de déploiement dans deploiement/ — clone sur le serveur, service
d'écoute du webhook, relais Apache, et l'ACL qui donne le droit d'écrire dans le
DocumentRoot. installer.sh pose l'ensemble en une fois, et se relance sans rien casser.

Le rsync est sans --delete, volontairement : le DocumentRoot contient aussi le .htaccess
qui relaie /public-calendars vers Nextcloud et les pages d'erreur d'ISPConfig.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ae3qPEPRrNkEY5LwcTTKc1
2026-09-20 09:47:18 +02:00

85 lines
3.4 KiB
Markdown

# www.alpinux.org
La page d'accueil de l'association — du HTML statique, une seule page, servie sur
`https://alpinux.org` et `https://www.alpinux.org`.
Elle affiche deux choses qu'elle ne contient pas : l'**agenda**, lu dans le calendrier
public Nextcloud, et les **dernières pages du wiki**, lues dans
[`derniers-articles.json`](https://wiki.alpinux.org/derniers-articles.json) que le wiki
publie à chaque build. Si l'une ou l'autre source est injoignable, la section
correspondante se masque et le reste de la page tient debout.
---
## Je veux…
| Ce que vous voulez faire | Ce que vous faites |
|---|---|
| Modifier la page | Éditer `site/index.html`, pousser sur `main` — la mise en ligne suit |
| Voir le rendu avant de pousser | `python3 -m http.server -d site` puis http://localhost:8000 |
| Comprendre pourquoi ça n'est pas en ligne | `tail -20 /var/log/www-deploy.log` sur le serveur |
| Republier sans nouveau commit | `sudo -u abonnelc /opt/www-alpinux/deploy-www.sh` |
| Réinstaller la chaîne de déploiement | `sudo bash deploiement/installer.sh` |
En local, l'agenda reste vide : `/public-calendars/…` est relayé vers Nextcloud par le
serveur, pas par `http.server`. Les articles du wiki, eux, s'affichent normalement.
---
## Structure
```
alpinux-www/
├── site/ ce qui part en ligne, tel quel
│ ├── index.html
│ ├── robots.txt
│ └── sitemap.xml
└── deploiement/ la chaîne, versionnée avec le site
├── installer.sh pose tout sur le serveur (root, une fois)
├── deploy-www.sh git pull + rsync vers le DocumentRoot
├── webhook.py service d'écoute, 127.0.0.1:9877
├── www-webhook.service unité systemd
└── vhost-deploy.conf le relais Apache, pour trace
```
---
## Ce qui se passe après un push
```
git push (sur main)
│
Gitea (origin/main)
│ webhook ──▶ https://alpinux.org/deploy ──▶ service d'écoute (signature vérifiée)
▼
deploy-www.sh : git pull → index.html complet ? → rsync vers le DocumentRoot
▼
https://alpinux.org
```
Compter moins d'une minute. Le garde-fou est modeste mais réel : un `index.html` tronqué
— transfert coupé, conflit mal résolu — ne part pas en ligne.
---
## Les deux pièges à connaître
**Supprimer un fichier ici ne le retire pas du serveur.** Le `rsync` de déploiement est
volontairement sans `--delete` : le DocumentRoot contient aussi des fichiers qui ne sont
pas dans ce dépôt — le `.htaccess` qui relaie `/public-calendars` vers Nextcloud, les
pages d'erreur et les statistiques d'ISPConfig. Un `--delete` les emporterait. Retirer un
fichier en ligne se fait donc à la main, sur le serveur.
**Le serveur n'écrit dans le DocumentRoot que par une ACL.** `web11/web` appartient à
l'utilisateur `web11` ; `installer.sh` pose un `setfacl` pour l'utilisateur du service.
Si ISPConfig réinitialise les droits du site un jour, le déploiement échouera avec une
erreur de permission — relancer `installer.sh` suffit à la remettre.
---
## Historique
Ce dépôt est né le 2026-09-20, par détachement du monorepo `alpinux.site.2026` où la page
vivait sous `home/`. Elle y était **déployée à la main**, et le dépôt avait fini par
diverger : la version en ligne portait quatre mois de modifications faites directement sur
le serveur et jamais revenues dans git. C'est ce qui a motivé le webhook.