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 |
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 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 :
- Télécharge toutes les données du projet (code, patches, issues)
- Se synchronise automatiquement quand des mises à jour arrivent
- 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. »