- Réorganisation des tests par catégorie (unit, integration, connectivity, external) - Création de scripts d'exécution automatisés pour les tests - Création de guides techniques complets (ARCHITECTURE.md, API.md) - Transfert des informations depuis specs/ vers docs/ - Nettoyage et archivage des fichiers obsolètes - Documentation complète des tests avec exemples - Scripts de maintenance et nettoyage automatique - Structure professionnelle prête pour l'évolution
5.7 KiB
5.7 KiB
Résumé : Découverte des Nœuds et Ajout de Nœuds Externes
🔍 Comment les relais découvrent-ils initialement les autres nœuds ?
Mécanisme actuel (Découverte statique)
Les relais sdk_relay
utilisent actuellement une découverte statique basée sur les noms de conteneurs Docker :
// Dans sync.rs - discover_relays()
let relay_hosts = vec![
"sdk_relay_1",
"sdk_relay_2",
"sdk_relay_3",
];
Processus de découverte :
- ✅ Liste prédéfinie : Chaque relais a une liste codée en dur des autres relais
- ✅ Auto-exclusion : Il ignore son propre
relay_id
- ✅ Connexion automatique : Il tente de se connecter à chaque relais de la liste
- ✅ Partage de liste : Une fois connectés, ils partagent leur liste via des messages
RelaySync
Configuration par relay_id
Chaque relais a un identifiant unique :
# .conf.docker.relay1
relay_id=relay-1
# .conf.docker.relay2
relay_id=relay-2
# .conf.docker.relay3
relay_id=relay-3
🌐 Comment ajouter un nœud externe ?
✅ Solution implémentée : Configuration externe
Nous avons créé un système de configuration externe qui permet d'ajouter des nœuds sans modifier le code :
1. Fichier de configuration external_nodes.conf
[relays]
external-relay-1 = "external-relay-1.example.com:8090"
external-relay-2 = "192.168.1.100:8090"
[discovery]
auto_discover = true
bootstrap_nodes = []
[security]
allowed_domains = [
"*.4nk.net",
"*.example.com",
"localhost",
"127.0.0.1"
]
2. Script d'administration add_external_node.sh
Commandes disponibles :
# Ajouter un nœud externe
./add_external_node.sh add external-relay-1 external-relay-1.example.com:8090
# Supprimer un nœud externe
./add_external_node.sh remove external-relay-1
# Lister tous les nœuds externes
./add_external_node.sh list
# Tester la connectivité
./add_external_node.sh test external-relay-1
# Valider une adresse
./add_external_node.sh validate 192.168.1.100:8090
3. Exemple d'utilisation
# Ajouter un nœud externe
./add_external_node.sh add external-relay-1 external-relay-1.example.com:8090
# Vérifier la liste
./add_external_node.sh list
# Output:
# ℹ️ Nœuds externes configurés:
# 🔸 external-relay-1 -> external-relay-1.example.com:8090
# Redémarrer les relais pour appliquer
docker-compose restart sdk_relay_1 sdk_relay_2 sdk_relay_3
🔧 Modifications nécessaires dans le code
Pour supporter les nœuds externes, il faut modifier sync.rs
:
impl SyncManager {
pub fn load_external_config(&self) -> Result<ExternalConfig> {
let config_content = fs::read_to_string("external_nodes.conf")?;
let config: ExternalConfig = toml::from_str(&config_content)?;
Ok(config)
}
pub async fn discover_relays(&self) -> Result<()> {
// Découverte locale (existante)
let local_hosts = vec!["sdk_relay_1", "sdk_relay_2", "sdk_relay_3"];
for host in local_hosts {
// ... logique existante
}
// Découverte externe (nouvelle)
if let Ok(config) = self.load_external_config() {
for (relay_id, address) in &config.relays {
let relay_info = RelayInfo {
relay_id: relay_id.clone(),
address: address.clone(),
// ... autres champs
};
self.add_relay(relay_info)?;
}
}
Ok(())
}
}
🛡️ Sécurité et validation
Validation des nœuds externes
Le script inclut des validations :
- ✅ Format d'adresse :
hostname:port
ouip:port
- ✅ Port valide : Entre 1 et 65535
- ✅ Connectivité : Test de connexion TCP
- ✅ WebSocket : Test de réponse WebSocket
- ✅ Domaines autorisés : Contrôle des domaines autorisés
Gestion des erreurs
# Test de connectivité échoué
❌ Impossible de se connecter à external-relay-1.example.com:8090
⚠️ Connectivité échouée - le nœud sera testé au prochain redémarrage
# Test de connectivité réussi
✅ Port 8090 accessible sur localhost
✅ WebSocket répond
📊 Avantages de cette approche
✅ Flexibilité
- Ajout de nœuds sans recompilation
- Configuration par fichier
- Gestion dynamique
✅ Sécurité
- Contrôle des domaines autorisés
- Validation des adresses
- Tests de connectivité
✅ Simplicité
- Script d'administration simple
- Configuration TOML lisible
- Commandes intuitives
✅ Évolutivité
- Support pour la découverte automatique
- Architecture extensible
- Compatible avec les futures améliorations
🚀 Prochaines étapes
1. Implémentation dans le code
- Modifier
sync.rs
pour chargerexternal_nodes.conf
- Ajouter la validation des nœuds externes
- Tester avec des nœuds externes réels
2. Améliorations futures
- Découverte via DNS (enregistrements SRV)
- API REST pour l'enregistrement
- Découverte automatique via bootstrap nodes
- Chiffrement des communications
3. Tests et validation
- Tests avec des nœuds externes
- Validation de la synchronisation
- Tests de sécurité
📝 Conclusion
- Découverte initiale : Les relais utilisent une liste prédéfinie de noms de conteneurs Docker
- Ajout de nœuds externes : Nous avons créé un système de configuration externe avec un script d'administration
Solution recommandée : Utiliser le script add_external_node.sh
pour gérer les nœuds externes de manière flexible et sécurisée, sans modifier le code source.
Le système est maintenant prêt pour l'ajout de nœuds externes ! 🎉