diff --git a/README.md b/README.md index 855da1a..bf8071b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # 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`. +Le site public de l'association — du HTML statique, servi sur `https://alpinux.org` et +`https://www.alpinux.org` : la page d'accueil, la page des mises à jour du wiki, et la +page d'erreur 404. 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 @@ -16,12 +17,13 @@ nouveautés**, lui, vit dans le dépôt : `site/nouveautes.json`. | Ce que vous voulez faire | Ce que vous faites | |---|---| -| Modifier la page | Éditer `site/index.html`, pousser sur `main` — la mise en ligne suit | +| Modifier l'accueil | Éditer `site/index.html`, pousser sur `main` — la mise en ligne suit | | Annoncer une nouveauté | Ajouter une entrée en tête de `site/nouveautes.json` (voir plus bas) | | 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` | +| Reprendre une modification de `deploiement/` | Relancer `installer.sh` : le serveur exécute sa copie dans `/opt/www-alpinux`, pas celle du dépôt | 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. @@ -33,8 +35,11 @@ serveur, pas par `http.server`. Les articles du wiki, eux, s'affichent normaleme ``` alpinux-www/ ├── site/ ce qui part en ligne, tel quel -│ ├── index.html -│ ├── nouveautes.json le journal des nouveautés, lu par la page +│ ├── index.html l'accueil, son style et ses scripts en ligne +│ ├── modifications.html toutes les pages du wiki, datées +│ ├── 404.html la page d'erreur +│ ├── commun.css la charte des deux pages secondaires +│ ├── nouveautes.json le journal des nouveautés, lu par l'accueil │ ├── robots.txt │ └── sitemap.xml └── deploiement/ la chaîne, versionnée avec le site @@ -68,6 +73,48 @@ si le fichier disparaît ou devient illisible, la section se masque comme les de --- +## Les mises à jour du wiki + +`site/modifications.html` liste **toutes** les pages de wiki.alpinux.org, de la plus +récemment retouchée à la plus ancienne, avec un filtre par titre ou rubrique. Elle lit +`https://wiki.alpinux.org/toutes-les-pages.json`, que le build du wiki publie à chaque +fois — comme il publie déjà `derniers-articles.json` pour l'accueil. + +Si ce fichier manque, la page se rabat sur `derniers-articles.json` et le dit : on +obtient les vingt dernières pages au lieu de toutes, plutôt qu'une page vide. Les deux +sources injoignables, elle affiche un message et renvoie vers le wiki. + +Le contenu se change donc **dans le dépôt du wiki**, pas ici : ajouter une page à la +navigation du wiki suffit à la faire apparaître. + +--- + +## La page 404 + +`site/404.html` reprend la charte du site, annonce clairement l'erreur et propose +l'accueil, le wiki, les mises à jour et les listes de diffusion. Elle porte +`noindex, follow` : une page d'erreur n'a rien à faire dans un moteur de recherche, +mais ses liens restent bons à suivre. + +**Elle ne sert à rien sans la directive Apache qui va avec.** Le `.htaccess` du +DocumentRoot — qui vit sur le serveur, pas dans ce dépôt public — doit porter : + +```apache +ErrorDocument 404 /404.html +``` + +et **ne pas** renvoyer les adresses inconnues vers l'accueil. Une règle du type +`RewriteRule . /index.html [L]` produit un « soft 404 » : le visiteur voit l'accueil, +le moteur de recherche enregistre une page valide, et personne ne sait que l'adresse +était fausse. + +```bash +# ce qu'on doit lire une fois la directive en place +curl -o /dev/null -w '%{http_code}\n' https://alpinux.org/adresse-qui-nexiste-pas # 404 +``` + +--- + ## Ce qui se passe après un push ``` diff --git a/deploiement/deploy-www.sh b/deploiement/deploy-www.sh index 1e33ba1..e61ac29 100755 --- a/deploiement/deploy-www.sh +++ b/deploiement/deploy-www.sh @@ -13,12 +13,15 @@ echo "[$(date '+%Y-%m-%d %H:%M:%S')] Deploy started" >> "$LOG" cd "$REPO_DIR" git pull origin main >> "$LOG" 2>&1 -# Garde-fou : un index.html tronqué ne part pas en ligne. C'est l'équivalent, pour un -# site sans build, du « mkdocs build --strict » du wiki. -if ! grep -q "" "$SOURCE/index.html"; then - echo "[$(date '+%Y-%m-%d %H:%M:%S')] ABANDON : index.html incomplet" >> "$LOG" - exit 1 -fi +# Garde-fou : une page tronquée ne part pas en ligne. C'est l'équivalent, pour un +# site sans build, du « mkdocs build --strict » du wiki. Toutes les pages y passent, +# pas seulement l'accueil : la 404 servie à moitié serait aussi laide qu'une erreur. +for page in "$SOURCE"/*.html; do + if ! grep -q "" "$page"; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] ABANDON : $(basename "$page") incomplet" >> "$LOG" + exit 1 + fi +done # Pas de --delete, volontairement : le DocumentRoot contient aussi des fichiers qui ne # sont pas dans ce dépôt — le .htaccess qui relaie /public-calendars vers Nextcloud, les diff --git a/site/404.html b/site/404.html new file mode 100644 index 0000000..ca48e19 --- /dev/null +++ b/site/404.html @@ -0,0 +1,135 @@ + + + + + + + Page introuvable — Alpinux + + + + + + + + + + +
+ + Logo Alpinux — LUG de Savoie + + + Alpinux + + le LUG de Savoie + + +
+ + + +
+ +

Cette page n'existe pas… ou plus

+

+ L'adresse demandée ne correspond à rien sur ce site. Un lien qui a vieilli, une + coquille dans l'adresse, ou une page que nous avons déplacée — dans tous les cas, + l'accueil vous remettra sur les rails. +

+ +

+ Retour à l'accueil +

+ +
+

Ou bien, directement :

+ +
+
+ + + + + diff --git a/site/commun.css b/site/commun.css new file mode 100644 index 0000000..10d7b36 --- /dev/null +++ b/site/commun.css @@ -0,0 +1,128 @@ +/* Charte partagée par les pages secondaires — 404, mises à jour du wiki. + L'accueil garde son style en ligne : une page, une requête, rien à attendre. */ + +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +body { + font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; + background: #f3f6fb; + color: #1a1a2e; + min-height: 100vh; + display: flex; + flex-direction: column; +} + +/* ── En-tête ──────────────────────────────────────────────────────── */ +header { + background: #1a6bbf; + color: #fff; + padding: 2.2rem 1.5rem 1.8rem; + text-align: center; +} + +.logo-wrap { + display: flex; + align-items: center; + justify-content: center; + gap: 1.1rem; + flex-wrap: wrap; + text-decoration: none; +} + +.logo-img { width: 66px; height: 66px; border-radius: 10px; } + +.logo-text { text-align: left; } + +.brand { + display: block; + font-size: 2.1rem; + line-height: 1; + color: #fff; + letter-spacing: -.02em; +} + +.brand .light { font-weight: 300; } +.brand .bold { font-weight: 800; } + +.tagline { + display: block; + font-size: .82rem; + font-weight: 300; + letter-spacing: .18em; + color: rgba(255,255,255,.8); + margin-top: .25rem; + text-transform: lowercase; +} + +/* ── Navigation ───────────────────────────────────────────────────── */ +nav { + background: #0f4e8f; + display: flex; + justify-content: center; + gap: .2rem; + flex-wrap: wrap; + padding: .4rem 1rem; +} + +nav a { + color: rgba(255,255,255,.85); + text-decoration: none; + font-size: .88rem; + padding: .45rem .9rem; + border-radius: 4px; + transition: background .15s; +} + +nav a:hover { background: rgba(255,255,255,.15); color: #fff; } +nav a[aria-current="page"] { background: rgba(255,255,255,.18); color: #fff; } + +/* ── Corps ────────────────────────────────────────────────────────── */ +main { + max-width: 860px; + width: 100%; + margin: 0 auto; + padding: 3rem 1.5rem; + flex: 1; +} + +h1 { + font-size: 1.6rem; + color: #0f4e8f; + line-height: 1.25; + margin-bottom: .8rem; +} + +.chapeau { + font-size: 1rem; + line-height: 1.7; + color: #4a5a6a; + max-width: 62ch; +} + +.chapeau a { color: #1a6bbf; } + +.bouton { + display: inline-block; + background: #1a6bbf; + color: #fff; + text-decoration: none; + font-weight: 600; + font-size: .95rem; + padding: .7rem 1.4rem; + border-radius: 8px; + transition: background .15s, transform .15s; +} + +.bouton:hover { background: #0f4e8f; transform: translateY(-2px); } + +/* ── Pied de page ─────────────────────────────────────────────────── */ +footer { + background: #0f4e8f; + color: rgba(255,255,255,.75); + text-align: center; + padding: 1.6rem 1.5rem; + font-size: .85rem; +} + +footer a { color: rgba(255,255,255,.9); text-decoration: none; } +footer a:hover { text-decoration: underline; } diff --git a/site/index.html b/site/index.html index 5ead851..741a7c2 100644 --- a/site/index.html +++ b/site/index.html @@ -702,6 +702,7 @@ Portail membres Install Party Gitea + Mises à jour du wiki Listes de diffusion Adhérer @@ -755,6 +756,8 @@

Parcourir tout le wiki → +  ·  + Toutes les mises à jour →

diff --git a/site/modifications.html b/site/modifications.html new file mode 100644 index 0000000..7b7dd54 --- /dev/null +++ b/site/modifications.html @@ -0,0 +1,352 @@ + + + + + + + + Les mises à jour du wiki — Alpinux + + + + + + + + + + + + + + + + + + + + +
+ + Logo Alpinux — LUG de Savoie + + + Alpinux + + le LUG de Savoie + + +
+ + + +
+

Les mises à jour du wiki

+

+ Toutes les pages de wiki.alpinux.org, de la + plus récemment retouchée à la plus ancienne. Les dates viennent de l'historique du + dépôt : c'est le jour où le texte a changé, pas celui où le fichier a été recopié. + Déplacer une page ne la fait donc pas remonter ici. +

+ +
+ + + +
+ +
Chargement de la liste…
+
    + +
    + + + + + + + diff --git a/site/sitemap.xml b/site/sitemap.xml index 667684f..8dabbf5 100644 --- a/site/sitemap.xml +++ b/site/sitemap.xml @@ -2,8 +2,14 @@ https://alpinux.org/ - 2026-05-03 + 2026-09-23 monthly 1.0 + + https://alpinux.org/modifications.html + 2026-09-23 + weekly + 0.6 +