# Installation

[![image.png](https://docs.rakouns.bzh/uploads/images/gallery/2025-10/scaled-1680-/FS5image-png.png)](https://docs.rakouns.bzh/uploads/images/gallery/2025-10/scaled-1680-/FS5image-png.png)

### Fichier docker-compose

Dans cette procédure, nous allons utiliser **Docker**. Une documentation préalable à ce sujet est disponible [ici](https://docs.rakouns.bzh/books/docker).  
Commençons par créer un fichier `docker-compose.yaml`, adapté à nos besoins :

```bash
services:
  # Service hbbs : serveur de rendez-vous (ID Server)
  hbbs:
    container_name: hbbs  # Nom explicite du conteneur
    image: rustdesk/rustdesk-server:latest  # Image officielle du serveur RustDesk
    command: hbbs  # Lance le composant "hbbs" (Heartbeat Broker Server)
    volumes:
      - ./data:/root  # Monte le dossier local "data" dans /root du conteneur pour conserver les clés et paramètres
    network_mode: "host"  # Utilise directement le réseau de l'hôte (nécessaire pour les ports UDP/TCP fixes)
    depends_on:
      - hbbr  # Démarre uniquement si le serveur relais (hbbr) est déjà en cours d’exécution
    restart: unless-stopped  # Redémarrage automatique sauf si le conteneur est arrêté manuellement

  # Service hbbr : serveur de relais (Relay Server)
  hbbr:
    container_name: hbbr  # Nom du conteneur
    image: rustdesk/rustdesk-server:latest  # Utilise la même image que hbbs
    command: hbbr  # Lance le composant "hbbr" (Relay Server)
    volumes:
      - ./data:/root  # Partage le même dossier que hbbs (utile pour les certificats et clés)
    network_mode: "host"  # Nécessaire pour exposer les ports réseau sans restriction
    restart: unless-stopped  # Redémarrage automatique si le conteneur s’arrête de manière imprévue

```

Dans ce fichier, nous n'avons spécifié **aucun port explicitement**, car nous utilisons le mode réseau `host`. En revanche, il est important de connaître les ports utilisés par RustDesk, notamment si un **pare-feu** est en place ou si le serveur doit être **accessible depuis l’extérieur**.

### Ports utilisés par RustDesk

<div class="_tableContainer_16hzy_1" id="bkmrk-port-protocole-descr"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2829" data-start="2190" style="width: 108.333%; height: 208.578px;"><thead data-end="2269" data-start="2190"><tr data-end="2269" data-start="2190" style="height: 29.7969px;"><th data-col-size="sm" data-end="2201" data-start="2190" style="width: 15.9714%; height: 29.7969px;">Port</th><th data-col-size="sm" data-end="2213" data-start="2201" style="width: 15.9714%; height: 29.7969px;">Protocole</th><th class="align-center" data-col-size="md" data-end="2269" data-start="2213" style="width: 67.938%; height: 29.7969px;">Description</th></tr></thead><tbody data-end="2829" data-start="2350"><tr data-end="2429" data-start="2350" style="height: 29.7969px;"><td data-col-size="sm" data-end="2361" data-start="2350" style="width: 15.9714%; height: 29.7969px;">21115</td><td data-col-size="sm" data-end="2373" data-start="2361" style="width: 15.9714%; height: 29.7969px;">TCP</td><td data-col-size="md" data-end="2429" data-start="2373" style="width: 67.938%; height: 29.7969px;">Test du type de NAT</td></tr><tr data-end="2509" data-start="2430" style="height: 29.7969px;"><td data-col-size="sm" data-end="2441" data-start="2430" style="width: 15.9714%; height: 29.7969px;">21116</td><td data-col-size="sm" data-end="2453" data-start="2441" style="width: 15.9714%; height: 29.7969px;">UDP</td><td data-col-size="md" data-end="2509" data-start="2453" style="width: 67.938%; height: 29.7969px;">Enregistrement de l'ID et service Heartbeat</td></tr><tr data-end="2589" data-start="2510" style="height: 29.7969px;"><td data-col-size="sm" data-end="2521" data-start="2510" style="width: 15.9714%; height: 29.7969px;">21116</td><td data-col-size="sm" data-end="2533" data-start="2521" style="width: 15.9714%; height: 29.7969px;">TCP</td><td data-col-size="md" data-end="2589" data-start="2533" style="width: 67.938%; height: 29.7969px;">Connexions entrantes</td></tr><tr data-end="2669" data-start="2590" style="height: 29.7969px;"><td data-col-size="sm" data-end="2601" data-start="2590" style="width: 15.9714%; height: 29.7969px;">21117</td><td data-col-size="sm" data-end="2613" data-start="2601" style="width: 15.9714%; height: 29.7969px;">TCP</td><td data-col-size="md" data-end="2669" data-start="2613" style="width: 67.938%; height: 29.7969px;">Service de relais</td></tr><tr data-end="2749" data-start="2670" style="height: 29.7969px;"><td data-col-size="sm" data-end="2681" data-start="2670" style="width: 15.9714%; height: 29.7969px;">21118</td><td data-col-size="sm" data-end="2693" data-start="2681" style="width: 15.9714%; height: 29.7969px;">TCP</td><td data-col-size="md" data-end="2749" data-start="2693" style="width: 67.938%; height: 29.7969px;">Client Web (non obligatoire)</td></tr><tr data-end="2829" data-start="2750" style="height: 29.7969px;"><td data-col-size="sm" data-end="2761" data-start="2750" style="width: 15.9714%; height: 29.7969px;">21119</td><td data-col-size="sm" data-end="2773" data-start="2761" style="width: 15.9714%; height: 29.7969px;">TCP</td><td data-col-size="md" data-end="2829" data-start="2773" style="width: 67.938%; height: 29.7969px;">Client Web (non obligatoire)</td></tr></tbody></table>

</div></div>## Démarrage

Une fois le fichier `docker-compose.yaml` créé, nous pouvons **lancer RustDesk** avec la commande suivante :

```bash
docker compose up -d
```

### Récupération de la clé publique

Il reste une dernière étape essentielle : récupérer la **clé publique** générée par le serveur. Celle-ci est nécessaire pour que les clients puissent établir une connexion chiffrée avec le serveur :

```
docker cp <container-id>:/id_ed25519.pub <destination>
```

<p class="callout info">Remarque : le chemin ou le nom du conteneur peut varier si vous avez modifié les paramètres de base du fichier docker-compose.</p>