Docs/ Infrastructure/ Multi-serveur

Multi-serveur

Gérez et déployez sur plusieurs serveurs depuis un seul tableau de bord sh0 en utilisant des tunnels SSH sécurisés.

Vue d'ensemble

sh0 prend en charge un modèle BYOS (Bring Your Own Server) où vous pouvez connecter plusieurs serveurs distants (nœuds) à votre instance sh0 principale. Le serveur principal agit comme le plan de contrôle, gérant les déploiements et le routage sur tous les nœuds connectés.

Cette architecture vous permet de :

  • Distribuer les charges de travail sur plusieurs serveurs pour de meilleures performances
  • Placer les applications plus près des utilisateurs dans différentes régions géographiques
  • Isoler les charges de travail (par ex., bases de données sur du matériel dédié)
  • Évoluer au-delà des ressources d'un seul serveur
Multi-server architecture diagram showing primary node and remote nodes
Note
Les nœuds distants n'ont besoin que de Docker installé et d'un accès SSH. sh0 gère tout le reste -- vous n'avez pas besoin d'installer le binaire sh0 sur les nœuds distants.

Ajout de nœuds distants

Pour ajouter un serveur distant comme nœud :

  1. Accédez à Paramètres → Nœuds dans le tableau de bord.
  2. Cliquez sur Ajouter un nœud.
  3. Saisissez les détails du nœud : nom d'hôte ou IP, port SSH et utilisateur SSH.
  4. Fournissez la clé privée SSH ou sélectionnez une clé existante de votre gestionnaire de clés.
  5. Cliquez sur Connecter. sh0 vérifiera la connexion et enregistrera le nœud.
Add node form with hostname, SSH port, and authentication fields

Via l'API :

Terminal
curl -X POST https://your-server:9000/api/nodes \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "eu-node-1",
    "hostname": "10.0.1.50",
    "ssh_port": 22,
    "ssh_user": "deploy",
    "ssh_key_id": "key_abc123"
  }'
Warning
L'utilisateur SSH doit avoir la permission d'exécuter des commandes Docker sur le nœud distant. Ajoutez l'utilisateur au groupe docker ou configurez sudo sans mot de passe pour Docker.

Configuration du tunnel SSH

sh0 communique avec les nœuds distants via des tunnels SSH. Le tunnel transmet les requêtes de l'API Docker du serveur principal vers le socket Docker du nœud distant, gardant tout le trafic chiffré.

Le tunnel est établi automatiquement lorsque vous ajoutez un nœud. sh0 utilise le TOFU SSH (Trust On First Use) pour la vérification de la clé hôte -- l'empreinte du serveur vous sera montrée lors de la première connexion et vous devrez la confirmer.

SSH Tunnel Architecture
Primary Server (sh0)
  |
  |-- SSH Tunnel (encrypted) --> Remote Node 1
  |                                 |-- Docker Socket
  |                                 |-- Container A
  |                                 |-- Container B
  |
  |-- SSH Tunnel (encrypted) --> Remote Node 2
                                    |-- Docker Socket
                                    |-- Container C
SSH tunnel status showing connected nodes and latency
Tip
sh0 reconnecte automatiquement les tunnels s'ils tombent. La reconnexion se fait en quelques secondes, et les conteneurs en cours d'exécution sur le nœud distant ne sont pas affectés -- seules les opérations de gestion sont brièvement indisponibles.

Surveillance de la santé des nœuds

sh0 surveille en continu la santé de tous les nœuds connectés. La surveillance inclut :

  • Connectivité SSH : Vérifie que le tunnel est actif et réactif.
  • Statut Docker : Vérifie que le démon Docker fonctionne sur le nœud distant.
  • Utilisation des ressources : Suit l'utilisation du CPU, de la mémoire et du disque sur chaque nœud.
  • Santé des conteneurs : Surveille tous les conteneurs en cours d'exécution sur le nœud.
Node health dashboard showing CPU, memory, disk, and container status for each node

Lorsqu'un nœud devient défaillant, sh0 envoie des alertes via vos canaux de notification configurés (e-mail, Slack, Discord ou webhooks). Vous pouvez configurer les seuils d'alerte par nœud dans les paramètres du nœud.

Déploiement sur des nœuds spécifiques

Lors de la création ou de la configuration d'une application, vous pouvez spécifier sur quel nœud elle doit s'exécuter. Cela se configure dans les paramètres de déploiement de l'application.

Node selection dropdown in the app deployment settings

Options :

  • Principal (par défaut) : Déployer sur le serveur sh0 principal.
  • Nœud spécifique : Fixer l'application à un nœud distant nommé.
  • N'importe quel nœud : Laissez sh0 choisir le nœud avec le plus de ressources disponibles.
Terminal
curl -X PUT https://your-server:9000/api/apps/my-app \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"node_id": "node_eu1"}'
Note
Lors du déploiement vers un nœud distant, sh0 transfère l'image Docker construite du serveur principal vers le nœud distant via le tunnel SSH. Cela se fait automatiquement -- aucun registre de conteneurs n'est requis.

Routage intelligent par nœud

Le reverse proxy Caddy du serveur principal gère le routage vers les conteneurs sur tous les nœuds. Lorsqu'une requête arrive pour un domaine, Caddy la dirige vers le bon nœud et conteneur, quel que soit l'emplacement d'exécution du conteneur.

Pour les applications avec des réplicas répartis sur plusieurs nœuds, Caddy équilibre la charge entre tous les réplicas sains sur tous les nœuds. La latence entre le proxy principal et les nœuds distants doit être prise en compte lors de la planification de votre architecture.

Tip
Pour la latence la plus basse, placez votre reverse proxy (serveur sh0 principal) dans la même région que la majorité de vos utilisateurs, et utilisez des nœuds distants pour le traitement en arrière-plan ou les déploiements régionaux.

Gestion de plusieurs serveurs

Le panneau Nœuds dans le tableau de bord fournit une vue centralisée de tous les serveurs de votre flotte :

Nodes management panel showing all connected servers with their status and resource usage

Depuis ce panneau, vous pouvez :

  • Voir les métriques du nœud : CPU, mémoire, disque et utilisation réseau pour chaque nœud.
  • Lister les conteneurs : Voir tous les conteneurs en cours d'exécution sur un nœud spécifique.
  • Drainer un nœud : Déplacer gracieusement tous les conteneurs d'un nœud avant une maintenance.
  • Supprimer un nœud : Déconnecter un nœud distant (les conteneurs doivent être migrés ou arrêtés d'abord).
  • Accès terminal : Ouvrir un terminal SSH vers n'importe quel nœud directement depuis le tableau de bord.
Danger
Supprimer un nœud qui a encore des conteneurs en cours d'exécution rendra ces conteneurs inaccessibles. Drainez toujours un nœud avant de le supprimer pour vous assurer que toutes les applications sont migrées vers un autre nœud.