No description
  • JavaScript 51.6%
  • CSS 23.9%
  • HTML 23.8%
  • PowerShell 0.7%
Find a file
Renard 2700ff5c8e
All checks were successful
Pipeline Librenard / Reniflage — tests unitaires (push) Successful in 8s
Pipeline Librenard / Vigilance — audit npm (push) Successful in 6s
Pipeline Librenard / Tissage — build du site et patrouille (push) Successful in 37s
🎨 style(hero): harmonisation des espacements sur les pages statiques
2026-07-14 12:02:00 +02:00
.forgejo 🐛 fix(ci): fusionner build et patrouille pour éviter le 413 nginx 2026-07-10 22:27:25 +02:00
.github/workflows ⚙️ ci(multi-ci): ajout des pipelines GitHub Actions et GitLab CI pour Framagit 2026-07-13 05:04:32 +00:00
css 🎨 style(hero): harmonisation des espacements sur les pages statiques 2026-07-14 12:02:00 +02:00
error feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
images feat(outils): ajouter BentoPDF à la page des outils libres 2026-07-11 21:19:06 +02:00
js feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
scripts Merge pull request #1 from Ronnarrdd/jules-5380863586635536461-72bd06a4 2026-07-13 07:44:49 +02:00
vendor ⚙️ ci(multi-ci): ajout des pipelines GitHub Actions et GitLab CI pour Framagit 2026-07-13 05:04:32 +00:00
.env.example feat(build): recherche Pagefind, miroir images WebP et zero CDN runtime 2026-07-05 14:26:53 +02:00
.gitattributes 💄 fix(wiki): empeche le fond des callouts de passer sous une image flottante 2026-07-01 18:13:40 +02:00
.gitignore 🐛 fix(ci): versionner js/wiki ignoré par le pattern wiki/ dans .gitignore 2026-07-05 16:21:28 +02:00
.gitlab-ci.yml ⚙️ ci(multi-ci): ajout des pipelines GitHub Actions et GitLab CI pour Framagit 2026-07-13 05:04:32 +00:00
a-propos.html feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
AGENTS.md chore(agents) : Mets à jour agent.md 2026-07-01 08:33:53 +02:00
blog.html feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
contact.html 🎨 style(hero): harmonisation des espacements sur les pages statiques 2026-07-14 12:02:00 +02:00
index.html feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
outils.html feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
package-lock.json ⚙️ ci(multi-ci): ajout des pipelines GitHub Actions et GitLab CI pour Framagit 2026-07-13 05:04:32 +00:00
package.json feat(build): recherche Pagefind, miroir images WebP et zero CDN runtime 2026-07-05 14:26:53 +02:00
projets.html feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
README.md ⚙️ ci(multi-ci): ajout des pipelines GitHub Actions et GitLab CI pour Framagit 2026-07-13 05:04:32 +00:00
robots.txt initial commit 2026-06-30 07:12:44 +02:00
site.webmanifest initial commit 2026-06-30 07:12:44 +02:00
sitemap.xml feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00
wiki.html feat(wiki) : création d'une vue blog dédiée pour l'étagère articles 2026-07-13 07:30:35 +02:00

La mascotte Librenard

Librenard

Pour un internet plus libre et curieux.

Le code source de librenard.fr : petits guides, projets auto-hébergés et trucs que je bricole. Sérieux dans le fond, pas dans la forme.

trans rights Licence CC BY-NC 4.0 Node.js Sans framework Hébergé avec YunoHost

Le site · Le wiki · Les outils · Contact · Code source


Qui est derrière le renard ?

Nolann, technicien informatique. Je documente ce que j'apprends sur le terrain : dépannage, supervision, réseau, Linux, auto-hébergement. Le site est hébergé chez moi grâce à YunoHost, sans cookie, sans traqueur, sans pub.

Sur librenard.fr

Section Ce qu'on y trouve
Projets Documentation collaborative (BookStack), auto-hébergement YunoHost, et le fil des derniers articles du wiki
Wiki Tutoriels et notes techniques, prérendus en pages statiques pour le SEO et le partage
Outils Petits utilitaires et services auto-hébergés que je recommande ou que j'utilise
Contact Me joindre, parcours et centres d'intérêt

Les livres du wiki

Le wiki couvre surtout :

  • Linux — bases, commandes, Docker, partitionnement, GRUB…
  • Windows — système de fichiers, DiskPart, partition EFI, dépannage GLPI
  • Réseau — adresses IP, DNS, DHCP, reverse proxy, fibre, DMZ…
  • Supervision — Centreon, GLPI, Uptime Kuma, Beszel, Zabbix
  • Matériel & stockage — BIOS/UEFI, RAID, GPT/MBR
  • Bidouilles — scripts maison, intégrations un peu farfelues

Chaque livre a sa page statique (wiki/<livre>.html) et chaque article sa propre URL (wiki/<livre>/<article>.html), indexables et partageables sur les réseaux sociaux.

C'est quoi, ce terrier ?

Un site statique, du HTML, du CSS, du JavaScript. Pas de framework, pas de CDN au runtime, pas de cookie, pas de tracking. Juste un renard qui documente ce qu'il apprend : auto-hébergement avec YunoHost, logiciels libres, et un wiki BookStack qui grandit petit à petit.

Le seul outil un peu malin du terrier, c'est le script de build : il interroge l'API BookStack, prérend le wiki en pages statiques, rapatrie les images, indexe la recherche et génère le sitemap. Une fois construit, le site vit tout seul.

Faire tourner la machine

Il vous faut Node.js 18 ou plus (le fetch natif est requis).

npm install        # dépendances + polices et libs self-hostées (vendor/)
npm run build      # construit tout : pages, wiki prérendu, sitemap, recherche

Pas d'accès à l'API BookStack sous la patte ? Le build sait travailler hors ligne :

npm run build -- --no-wiki

Toutes les commandes

Commande Ce qu'elle fait
npm run build Génère les pages, le prérendu du wiki, le sitemap, robots.txt et le manifest
npm run build -- --no-wiki Build sans le prérendu wiki (hors ligne, sans API BookStack)
npm test Tests unitaires des helpers de build
npm run check:links Vérifie les liens internes
npm run check:links:external Vérifie aussi les liens externes
npm run verify Tests + build + vérification des liens, le tout en un

Le prérendu du wiki (ou : comment plaire aux moteurs de recherche)

Au build, scripts/lib/wiki-prerender.mjs interroge l'API BookStack et fabrique une vraie page statique pour chaque contenu :

  • wiki/<livre>.html : le sommaire d'un livre
  • wiki/<livre>/<article>.html : l'article complet, avec table des matières, navigation précédent/suivant et JSON-LD

Ces pages sont les URL canoniques et partageables du contenu : chacune porte le titre, la description et la couverture du livre en balises OpenGraph/Twitter. Elles sont listées dans le sitemap avec la vraie date de mise à jour BookStack.

La navigation depuis le site (flux d'accueil, cartes de livres, liens #/book/... sur wiki.html) passe par le mini-SPA : le contenu est relu en direct depuis l'API BookStack à chaque visite, sans attendre un rebuild. Pour une preview correcte sur un réseau social, partagez l'URL statique (wiki/bases-de-linux.html, etc.), pas la route hash.

Deux règles du terrier :

  1. Ne rien éditer à la main dans wiki/. Le dossier est rasé et régénéré à chaque build.
  2. Le token API se lit depuis la variable d'environnement BOOKSTACK_TOKEN (voir .env.example), à défaut depuis js/wiki/api.js.

Les étagères publiées se configurent dans scripts/lib/site-template.mjs (site.wikiShelves) et doivent correspondre aux attributs data-shelf de wiki.html et projets.html.

Le build génère aussi :

  • pagefind/ : index de recherche offline (Pagefind) sur les pages wiki statiques
  • images/wiki/ : miroir local des images BookStack, converties en WebP avec lazy loading
  • vendor/ et css/fonts.css : polices, highlight.js et OpenDyslexic self-hostés, zéro CDN au runtime

La patrouille (CI)

Chaque push déclenche les pipelines d'intégration continue sur nos trois plateformes (Forgejo, GitHub, Framagit/GitLab) :

  • Forgejo Actions (.forgejo/workflows/ci.yml)
  • GitHub Actions (.github/workflows/ci.yml)
  • GitLab CI/CD (.gitlab-ci.yml)

Les étapes de ces pipelines comprennent :

  • Reniflage : les tests unitaires flairent les régressions
  • Vigilance : npm audit surveille les dépendances
  • Tissage et patrouille : build complet du site, puis vérification de la recherche Pagefind, du sitemap et des liens internes

Sur main, le build est complet (avec prérendu wiki). Sur les branches et pull requests, il tourne en --no-wiki pour ne pas marteler l'API BookStack.

Des vérifications hebdomadaires des liens externes sont également configurées sur chaque plateforme (via cron/planification).

Plan du terrier

├── index.html, projets.html, ...   Pages du site (générées, contenu éditable dedans)
├── css/                            Styles, découpés par usage
├── js/                             Script global + JS du wiki (js/wiki/)
├── scripts/                        Build, vérification des liens, et leurs tests
│   └── lib/                        Prérendu wiki, images, Pagefind, templates
├── wiki/                           Pages wiki statiques (générées, ne pas toucher)
├── vendor/, pagefind/              Assets self-hostés et index de recherche (générés)
└── .forgejo/                       La patrouille (CI)

Philosophie du terrier

  • Zéro tracking — pas de cookie, pas d'analytics, pas de CDN tiers au runtime
  • Vanilla — HTML, CSS et JavaScript ; pas de React, pas de bundler en prod
  • Self-host — polices, highlight.js, OpenDyslexic et images wiki rapatriées localement
  • Accessible — thème clair/sombre, police OpenDyslexic en option, recherche Pagefind offline
  • Libre — contenu sous CC BY-NC 4.0 : partagez, adaptez, citez la source, pas d'usage commercial

Licence

Le contenu est sous licence CC BY-NC 4.0. Le code du site suit la même logique : servez-vous, citez la source, pas d'usage commercial.

Les illustrations du renard ont été créées avec l'aide de ChatGPT. Les stickers de chats du wiki viennent de Flaticon (Stickers).

Fait avec du HTML à la main et une quantité déraisonnable de renards.