No description
  • Rust 89.7%
  • CSS 7.9%
  • Jinja 2%
  • HTML 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
fabian 587b4f3b0e
All checks were successful
CI / test (push) Successful in 9s
CI / deploy (push) Successful in 2m38s
CD : déploiement sur la Raspberry Pi par Ansible
- binaire statique aarch64-unknown-linux-musl lié par rust-lld
- playbook : compte de service, versions dans /opt/genealogio/releases,
  service systemd durci, commande « sudo genealogio invite … »,
  site nginx du domaine nu (délégation Matrix conservée, ancienne
  configuration sauvegardée et restaurée si nginx -t échoue)
- CI sur toutes les branches du dépôt, déploiement sur main seulement
- le serveur démarre sans GEDCOM et le charge dès qu'il apparaît

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 20:04:25 +02:00
.cargo CD : déploiement sur la Raspberry Pi par Ansible 2026-10-06 20:04:25 +02:00
.forgejo/workflows CD : déploiement sur la Raspberry Pi par Ansible 2026-10-06 20:04:25 +02:00
crates CD : déploiement sur la Raspberry Pi par Ansible 2026-10-06 20:04:25 +02:00
data Premier jet : site généalogique familial en Rust 2026-10-06 19:39:13 +02:00
deploy/ansible CD : déploiement sur la Raspberry Pi par Ansible 2026-10-06 20:04:25 +02:00
.gitignore Premier jet : site généalogique familial en Rust 2026-10-06 19:39:13 +02:00
Cargo.lock Premier jet : site généalogique familial en Rust 2026-10-06 19:39:13 +02:00
Cargo.toml Premier jet : site généalogique familial en Rust 2026-10-06 19:39:13 +02:00
README.md CD : déploiement sur la Raspberry Pi par Ansible 2026-10-06 20:04:25 +02:00
rustfmt.toml Premier jet : site généalogique familial en Rust 2026-10-06 19:39:13 +02:00

Genealogio

Site familial en lecture seule construit à partir d'un fichier GEDCOM. Le serveur est en Rust (axum), le client en Rust compilé en WebAssembly (Leptos). L'accès se fait uniquement par lien d'invitation.

Le graphe sablier est centré sur une personne : ses ascendants au-dessus, ses descendants en dessous, sa fratrie et ses conjoints sur sa ligne. Un clic sur une carte la place au centre. La disposition est calculée dans core::layout, ce qui permet de la tester en natif.

crates/core    modèle, parseur GEDCOM, règles de confidentialité, formats français (natif + wasm)
crates/server  API, invitations, service des fichiers du client
crates/web     interface (Leptos, compilée avec trunk)
data/          exemple.ged (fictif) ; vos vrais fichiers y sont ignorés par git

Développement

cargo test -p genealogio-core                         # tests du cœur
cargo run -p genealogio-server -- check data/famille.ged   # bilan d'un GEDCOM réel, sans rien publier

cd crates/web && trunk watch                          # recompile le client dans crates/web/dist
GENEALOGIO_GEDCOM=data/exemple.ged GENEALOGIO_ROOT=I14 GENEALOGIO_COOKIE_SECURE=0 \
  cargo run -p genealogio-server                      # http://localhost:3000
cargo run -p genealogio-server -- invite "Moi"        # affiche le lien à ouvrir

Confidentialité

  • Une personne sans décès ni inhumation est masquée si elle a pu naître il y a moins de 100 ans. Quand elle n'a pas de date, l'estimation se fait à partir de ses parents, de ses enfants, de son conjoint et de son mariage. Si rien ne permet de conclure, elle est masquée.
  • RESN privacy ou RESN confidential masque toujours la fiche.
  • Pour une fiche masquée, seuls le nom, l'année et le lieu de naissance quittent le serveur. Les types de core::api ne prévoient aucun autre champ, et la recherche n'indexe que ce qui est publié.
  • Le site envoie noindex aux moteurs de recherche et Referrer-Policy: no-referrer. Le cookie de session est HttpOnly, SameSite=Lax et Secure.

Mise à jour

Le serveur relit le GEDCOM et invites.txt dans les 30 secondes qui suivent leur modification. Pour révoquer un accès, supprimez sa ligne dans invites.txt.

Déploiement

Chaque commit arrivé sur main (après le rebase d'une pull request) est testé, puis déployé sur la Raspberry Pi par .forgejo/workflows/ci.yml. Le job compile le serveur en binaire statique aarch64 et le site en wasm, puis lance deploy/ansible/site.yml. Le site est servi sur https://lapôtre.eu, derrière le nginx de la RPi (port local 3100).

Sur la RPi :

Chemin Contenu
/var/lib/genealogio/famille.ged le GEDCOM, relu automatiquement dans les 30 s après une modification
/var/lib/genealogio/invites.txt les invitations
/etc/genealogio/env la configuration du service (générée par Ansible, voir group_vars/all.yml)
/opt/genealogio/current la version en service ; les 3 dernières sont gardées dans releases/
scp famille.ged pi-local:/var/lib/genealogio/famille.ged   # mettre à jour l'arbre
ssh pi-local sudo genealogio invite "Tante Marie"          # créer un lien d'invitation
ssh pi-local sudo genealogio check                         # bilan du fichier en service

Pour déployer à la main depuis le poste : compiler (cargo build --release -p genealogio-server --target aarch64-unknown-linux-musl et trunk build --release dans crates/web), puis lancer ansible-playbook site.yml dans deploy/ansible.