# 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.