Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
index.sh (5727B)
1 #! page 2 title: Faire un site one page avec un pad 3 author: Arthur Pons 4 description: Voyons ce que cela coûte de générer un très simple site depuis un pad 5 publication: 2025-07-15 6 7 section: main 8 9 Article pas relu 10 11 ## Le besoin 12 13 Imaginons un festival artistico-militanto-écolo du nord de l'Alsace. Il a pour 14 habitude de communiquer sur facebook et instagram (bouuuh). Il a tout de même 15 un linktree avec le programme et quelques infos (mieuux). A la fin du festival 16 une personne fait la remarque que ce serait tout de même chouette d'avoir un 17 vrai site avec les infos de bases. Sauf que c'est un peu ennuyant à faire, 18 difficile à éditer etc. 19 20 De manière générale les personnes sont à l'aise avec l'édition d'un pad. Je le 21 reconnais c'est un bel outil dont il n'existe pas d'alternative identique dans 22 le monde termino-unixien. En terme d'appli web y'a vraiment pire d'etherpad. 23 24 Et si l'on faisait tenir tout le site sur une page, générée depuis le markdown 25 d'un pad édité par tout le monde ? 26 27 Pour faire des tests j'ai hébergé le site ici : http://ire.bebou.netlib.re 28 Et le pad ici : http://pad.unistra.fr/p/ire 29 Ca peut casser n'importe quand. SVP spammer pas les modifs. 30 31 ## La proposition 32 33 ### Récupérer le contenu et en faire de l'HTML 34 35 On peut récupérer le contenu d'un pad en le réquêtant avec `/export/txt` ajouté 36 à la fin : 37 38 $ curl -Ls https://pad.unistra.fr/p/ire/export/txt 39 ## Blablabla 40 41 machin 42 43 On peut mettre ça dans du `lowdown` pour générer de l'html : 44 45 $ curl -Ls https://pad.unistra.fr/p/ire/export/txt | lowdown 46 <h2 id="blablabla">Blablabla</h2> 47 48 <p>machin</p> 49 50 Si on met ça dans une petite boucle while on peut vérifier s'il s'est passé 51 quelque chose toutes les N secondes : 52 53 while :;do 54 curl -Ls https://pad.unistra.fr/p/ire/export/txt | lowdown > index.html 55 sleep N 56 done 57 58 ### Ne pas spammer le pauvre pad de l'unistra 59 60 Sauf que c'est bof de spammer pour rien le pad donc imaginons autre chose. En se 61 basant sur le système de [qcm](/qcm/) on peut ajouter un lien dans le pad qui, 62 lorsque l'on clique dessus, déclenchera la mise à jour du site via la détection 63 du chemin dans les logs du serveur web. Il faudra mettre en place le nécessaire 64 pour filtrer les logs et le lien dans le pad : 65 66 [ -p "notif" ] || mkfifo "notif" 67 tail -Fn0 "/var/log/nginx/access.log" | 68 grep --line-buffered -E "/mise-a-jour" > "notif" & 69 notifpid=$! 70 71 cat "notif" | while read maj; do 72 curl -Ls https://pad.unistra.fr/p/ire/export/txt | 73 grep -v 'http://ire.bebou.netlib.re/mise-a-jour' | 74 lowdown > index.html 75 done 76 77 Pour éviter de refaire des calculs s'il n'y a pas eu de modif on peut 78 enregistrer le markdown et tester s'il est identique à l'ancien avec un `diff` : 79 80 cat "notif" | while read maj; do 81 curl -Ls https://pad.unistra.fr/p/ire/export/txt | 82 grep -v 'http://ire.bebou.netlib.re/mise-a-jour' > index-new.md 83 if ! diff index.md index-new.md 2> /dev/null;then 84 lowdown > index.html 85 fi 86 done 87 88 ### Le versionnage automatique 89 90 Finalement pour éviter de perdre quoi que ce soit on pourra gitter le tout : 91 92 cat "notif" | while read maj; do 93 if ! diff index.md index-new.md 2> /dev/null;then 94 curl -Ls https://pad.unistra.fr/p/ire/export/txt | 95 grep -v 'http://ire.bebou.netlib.re/mise-a-jour' | 96 lowdown > index.html 97 fi 98 git add index.html 99 git commit -m "Modification" 100 git push 101 done 102 103 Évidemment on pourra mettre une quantité arbitraire de code dans le while pour 104 avoir un squelette html décent, un `nav` dynamique ou autre. 105 106 ### La version minimale finale 107 108 Au final la version "minimale" du concept pour un serveur `nginx` pourrait être 109 : 110 111 [ -p "notif" ] || mkfifo "notif" 112 tail -Fn0 "/var/log/nginx/access.log" | 113 grep --line-buffered -E "/mise-a-jour" > "notif" & 114 notifpid=$! 115 116 cat "notif" | while read maj; do 117 if ! diff index.md index-new.md 2> /dev/null;then 118 curl -Ls https://pad.unistra.fr/p/ire/export/txt | 119 grep -v 'http://ire.bebou.netlib.re/mise-a-jour' | 120 lowdown > index.html 121 fi 122 git add index.html 123 git commit -m "Modification" 124 git push 125 done 126 127 kill $notifpid 128 129 ## Les limites 130 131 A priori ça fonctionne pas mal pour une page mais ça devient compliqué pour 132 plus. C'est possible d'avoir un séparateur dans le pad qui délimite plusieurs 133 pages différentes puis de les séparer côté serveur mais ça risque de devenir 134 assez rapidement fastidieux à éditer. 135 136 On peut intégrer des images déjà en ligne avec `![]()` mais comment fait-on pour 137 uploader des images, des pdf etc ? 138 139 Il n'est pas possible d'éditer le css et l'html depuis le pad, que le contenu. 140 Ça peut éventuellement être un avantage selon le contexte. Avec plus de code 141 côté serveur c'est possible mais possiblement trop compliqué pour ce que l'on 142 voulait faire. 143 144 Si le pad est public il faut bien le cacher sinon n'importe qui pourra faire des 145 modifications. Au pire des cas git devrait pouvoir nous permettre de revenir à 146 un état antérieur. 147 148 Il n'est, je crois, pas possible d'utiliser ce système via un éditeur de texte 149 classique + git. Dans tous les cas à la prochaine modif du pad le contenu du 150 site sera écrasé. On a donc pas une accessibilité chouette à la fois pour les 151 personnes voulant y accéder via un navigateur web *et* des cli 😔. 152 153 Le script ne redirige pas les erreurs potentielles du script à un endroit où les 154 personnes peuvent les lire et les communiquer à l'admin. Ça devrait pouvoir se 155 modifier assez facilement.