Arc 5 Quête 22

La Tour de Guet

Seed nodes, configuration, systemd et monitoring

Le sentier grimpe à travers une forêt de chênes centenaires. À mesure que tu montes, les arbres s'espacent et le vent forcit. Au sommet de la colline se dresse une tour de pierre grise, massive et solitaire. Pas de drapeau, pas d'enseigne. Juste une lanterne qui brûle à son sommet, visible à des lieues à la ronde.

Un homme aux cheveux blancs t'accueille à la porte. Ses yeux sont fatigués mais vifs - les yeux de quelqu'un qui ne dort jamais vraiment.

« Je suis le Guetteur. Ma tour veille sur le réseau jour et nuit. Quand un voyageur publie ses chroniques, c'est moi qui les garde accessibles pour ceux qui les cherchent. Sans les tours de guet, les chroniques libres seraient comme des messages dans des bouteilles - lâchés dans l'océan, espérant que quelqu'un les trouve. »

Il te mène à l'intérieur, où des dizaines de cristaux lumineux flottent en cercle, chacun pulsant doucement.

« Chaque cristal est un projet que je surveille. Aujourd'hui, tu vas apprendre à construire ta propre tour. »

Architecture d'un seed node

Dans le réseau Radicle, tous les participants ne sont pas égaux en termes de disponibilité. Quand tu éteins ton ordinateur portable, tes projets ne sont plus accessibles aux autres. C'est là qu'interviennent les seed nodes.

Le rôle d'un seed dans le réseau P2P

Un seed node (nœud graine) est un ordinateur qui reste connecté en permanence au réseau Radicle. Son rôle :

  • Disponibilité : il garde une copie des projets qu'il suit, même quand les auteurs sont hors ligne
  • Découverte : il aide les nouveaux pairs à trouver des projets et d'autres pairs
  • Relais : il transmet les mises à jour entre pairs qui ne sont pas directement connectés
# Sans seed node :
Alice (en ligne) <--> Bob (en ligne)     OK !
Alice (hors ligne) <--> Bob (en ligne)   Bob ne peut pas accéder au projet d'Alice

# Avec seed node :
Alice (hors ligne)
    |
    v (Alice a publié avant de se déconnecter)
  Seed Node (toujours en ligne) <--> Bob (en ligne)   Bob accède au projet !

Peer vs Seed - quelle différence ?

Caractéristique Peer (pair ordinaire) Seed (nœud graine)
Connectivité Intermittente (laptop, desktop) Permanente (serveur 24/7)
Adresse IP Souvent dynamique, derrière un NAT Fixe, accessible publiquement
Rôle Travaille sur ses projets Réplique et sert les projets des autres
Ressources Utilise ce qu'il a Dédié, stockage et bande passante suffisants

Un seed node est optionnel mais fortement recommandé pour tout projet sérieux. C'est comme un phare pour les navigateurs - le réseau fonctionne sans, mais c'est beaucoup plus fiable avec.

Prérequis pour un seed node

Pour monter un seed node, tu as besoin d'une machine connectée en permanence. Voici les options :

Le serveur

  • VPS (Virtual Private Server) : la solution la plus courante. Des fournisseurs comme Hetzner, OVH, Scaleway ou DigitalOcean proposent des VPS à partir de 3-5 euros par mois
  • Raspberry Pi : un petit ordinateur chez toi, connecté à ta box. Économique mais nécessite un IP fixe ou du DNS dynamique
  • Serveur dédié : pour les projets ambitieux avec beaucoup de trafic

Configuration minimale

  • OS : Linux (Debian, Ubuntu, Fedora) - recommandé
  • RAM : 512 Mo minimum, 1 Go recommandé
  • Disque : 10 Go minimum (dépend du nombre de projets suivis)
  • Réseau : IP publique, port 8776 accessible

Astuce : Pour cet exercice, tu n'as pas besoin d'un vrai serveur. On va tout faire en local sur ta machine pour comprendre les mécanismes.

Installer radicle-node

Le nœud Radicle est inclus dans l'installation de rad que tu as faite dans la quête précédente. Le composant qui fait tourner le nœud s'appelle radicle-node.

# Si rad est déjà installé, le nœud est disponible
rad node --help

# Sinon, installe Radicle (cf. Quête 21)
curl -sSf https://radicle.xyz/install | sh

Vérifier les composants

# Vérifie que tous les composants sont présents
rad --version
rad node --version

# Les binaires se trouvent dans :
ls ~/.radicle/bin/
# radicle-node  rad  ...

Configuration du nœud

Le fichier de configuration de ton nœud Radicle se trouve dans ~/.radicle/config.json. C'est là que tu définis le comportement de ta tour de guet.

Le fichier de configuration

# Afficher la configuration actuelle
rad config

# Le fichier se trouve ici :
cat ~/.radicle/config.json

Voici les paramètres importants :

{
  "node": {
    "alias": "ma-tour-de-guet",
    "listen": ["0.0.0.0:8776"],
    "peers": {
      "type": "dynamic"
    },
    "connect": [],
    "externalAddresses": ["mon-serveur.example.com:8776"],
    "policy": "allow",
    "scope": "all"
  }
}

Détail des paramètres

Paramètre Description
alias Un nom lisible pour ton nœud (visible par les pairs)
listen Adresse et port d'écoute. 0.0.0.0:8776 écoute sur toutes les interfaces
externalAddresses L'adresse publique de ton nœud (IP ou domaine)
policy allow (accepte les connexions) ou block (refuse par défaut)
scope all (réplique tout) ou followed (seulement les projets suivis)

Policies : track et block

Les policies contrôlent quels projets ton nœud accepte de répliquer :

# Suivre un projet spécifique (le répliquer sur ton nœud)
rad track rad:z2e7RaGkMUjH3dMhiKd5dm2E3pCXA

# Ne plus suivre un projet
rad untrack rad:z2e7RaGkMUjH3dMhiKd5dm2E3pCXA

Note : Il n'existe pas de commande rad block. Le blocage de projets se configure via la policy dans le fichier ~/.radicle/config.json. Utilise "policy": "block" pour refuser par défaut, puis autorise explicitement les projets que tu veux suivre avec rad track.

Conseil : Pour un seed node personnel, utilise scope: "followed" et ne suis que les projets qui t'intéressent. Un seed public peut utiliser scope: "all", mais attention à l'espace disque.

Ouvrir le pare-feu

Pour que d'autres pairs puissent se connecter à ton nœud, le port 8776 (TCP) doit être accessible depuis l'extérieur.

Avec UFW (Ubuntu / Debian)

# Ouvrir le port 8776
sudo ufw allow 8776/tcp

# Vérifier les règles
sudo ufw status

Avec firewalld (Fedora / RHEL)

# Ouvrir le port 8776
sudo firewall-cmd --add-port=8776/tcp --permanent
sudo firewall-cmd --reload

# Vérifier
sudo firewall-cmd --list-ports

Avec iptables (avancé)

# Ouvrir le port 8776
sudo iptables -A INPUT -p tcp --dport 8776 -j ACCEPT

Le port 8776 est le port par défaut du protocole Radicle. C'est l'équivalent du port 22 pour SSH ou du port 443 pour HTTPS. Si ton nœud est derrière un routeur (Raspberry Pi chez toi), pense aussi à configurer la redirection de port sur ta box.

Démarrer et surveiller le nœud

Démarrer le nœud

# Démarrer le nœud Radicle
rad node start

# Le nœud démarre et se connecte au réseau
# Tu verras des messages de connexion aux pairs

Vérifier le statut

# État du nœud
rad node status

# Affiche :
# Node is running
# Listening on 0.0.0.0:8776
# Connected peers: 3
# Tracked repos: 5

Arrêter le nœud

# Arrêter proprement
rad node stop

Suivre des projets

Un seed node n'est utile que s'il réplique des projets. Voici comment gérer les projets suivis :

# Suivre un projet par son identifiant
rad track rad:z2e7RaGkMUjH3dMhiKd5dm2E3pCXA

# Lister les projets suivis / connus du noeud
rad inspect

# Arrêter de suivre un projet
rad untrack rad:z2e7RaGkMUjH3dMhiKd5dm2E3pCXA

Quand tu suis un projet, ton nœud :

  1. Télécharge toutes les données du projet (code, patches, issues)
  2. Se synchronise automatiquement quand des mises à jour arrivent
  3. Sert ces données aux autres pairs qui les demandent

Monitoring et diagnostic

Les logs du nœud

# Voir les logs en temps réel
rad node logs

# Filtrer les logs par niveau
rad node logs --level info
rad node logs --level debug

Astuce : Les logs sont aussi disponibles directement dans le fichier ~/.radicle/node.log. Tu peux les consulter avec tail -f ~/.radicle/node.log sans passer par rad.

Diagnostic courant

# Vérifier la connectivité
rad node status

# Voir les pairs connectés
rad node peers

# Tester la connexion à un pair spécifique
rad node connect <node-id>@<adresse>:8776

Problèmes fréquents

Symptôme Cause probable Solution
0 pairs connectés Pare-feu bloqué ou port fermé Vérifier UFW/firewalld, redirection de port
Le nœud ne démarre pas Pas d'identité créée Exécuter rad auth d'abord
Synchronisation lente Peu de pairs sur le réseau Ajouter des seeds connus dans connect
Espace disque plein Trop de projets suivis Utiliser rad untrack sur les projets inutiles

Service systemd - un seed persistant

Pour qu'un seed node tourne en permanence (même après un redémarrage du serveur), il faut le configurer comme un service systemd.

Créer le fichier de service

# Créer le fichier de service systemd
sudo nano /etc/systemd/system/radicle-node.service

Contenu du fichier :

[Unit]
Description=Radicle Node
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=radicle
ExecStart=/home/radicle/.radicle/bin/radicle-node
Restart=on-failure
RestartSec=5
Environment=RADICLE_HOME=/home/radicle/.radicle

[Install]
WantedBy=multi-user.target

Activer et démarrer le service

# Recharger la configuration systemd
sudo systemctl daemon-reload

# Activer le service au démarrage
sudo systemctl enable radicle-node

# Démarrer le service
sudo systemctl start radicle-node

# Vérifier le statut
sudo systemctl status radicle-node

Gérer le service

# Voir les logs du service
sudo journalctl -u radicle-node -f

# Redémarrer le service
sudo systemctl restart radicle-node

# Arrêter le service
sudo systemctl stop radicle-node

Bonne pratique : Crée un utilisateur dédié radicle pour le service, plutôt que de le faire tourner sous root. C'est un principe de sécurité de base : chaque service a son propre utilisateur avec des permissions minimales.

# Créer un utilisateur dédié
sudo useradd -m -s /bin/bash radicle

# Se connecter en tant que radicle pour initialiser
sudo -u radicle bash
curl -sSf https://radicle.xyz/install | sh
rad auth
exit

Exercice pratique - Lancer un nœud local

Dans cet exercice, tu vas configurer et lancer un nœud Radicle sur ta propre machine. Pas besoin de VPS - on simule le fonctionnement d'un seed en local.

Étape 1 - Vérifier les prérequis

# Vérifie que rad est installé et que tu as une identité
rad --version
rad self

# Si tu n'as pas d'identité, crée-en une
rad auth

Étape 2 - Examiner la configuration

# Affiche ta configuration actuelle
rad config

# Note les paramètres : listen, policy, scope

Étape 3 - Démarrer le nœud

# Lance le nœud
rad node start

# Vérifie qu'il tourne
rad node status

Étape 4 - Suivre un projet

# Si tu as créé un projet dans la quête 21, note son RID
# Sinon, crée-en un rapidement :
mkdir test-seed && cd test-seed
git init -b main
echo "test" > fichier.txt
git add fichier.txt
git commit -m "test"
rad init

# Note le RID affiché

# Dans un autre terminal, suis ce projet
rad track rad:<le-rid-de-ton-projet>

Étape 5 - Observer les logs

# Observe ce que fait le nœud
rad node logs

# Tu devrais voir des messages de connexion et de réplication

Étape 6 - Arrêter proprement

# Arrête le nœud
rad node stop

# Vérifie qu'il est arrêté
rad node status

Pour aller plus loin : Si tu as accès à un VPS, tu peux reproduire cet exercice sur un vrai serveur et créer le service systemd. Ton seed sera alors accessible 24h/24 par tous les pairs du réseau Radicle.

Récapitulatif des commandes

Commande Description
rad node start Démarrer le nœud Radicle
rad node stop Arrêter le nœud
rad node status Afficher l'état du nœud (pairs, projets)
rad node logs Voir les logs du nœud en temps réel
rad node peers Lister les pairs connectés
rad node connect Se connecter manuellement à un pair
rad track Suivre (répliquer) un projet
rad untrack Arrêter de suivre un projet
rad config Afficher la configuration du nœud
systemctl start radicle-node Démarrer le service systemd
systemctl status radicle-node Vérifier le statut du service
journalctl -u radicle-node Lire les logs du service

Le Guetteur s'approche de la fenêtre de sa tour. De là-haut, le réseau de chemins qui relie les villages libres est clairement visible - des lignes sinueuses tracées par des générations de voyageurs.

« Ta tour est prête. Peut-être qu'elle ne veillera que sur tes propres projets pour l'instant. Mais un jour, d'autres voyageurs la trouveront, et ils seront reconnaissants qu'elle soit là. »

Il te tend une carte ancienne, couverte de symboles représentant d'autres tours, d'autres nœuds, d'autres pairs disséminés à travers le royaume.

« Tu as les outils et tu as ta tour. Il te reste une dernière chose à apprendre : comment tisser des liens avec les autres voyageurs. Car une tour seule dans la brume ne sert à rien - c'est le réseau qui fait la force. »