diff --git a/README-DE.md b/README-DE.md
deleted file mode 100644
index 6cc2252..0000000
--- a/README-DE.md
+++ /dev/null
@@ -1,345 +0,0 @@
-
- Erstellen •
- Docker •
- S6-Overlay •
- Schlüsselpaar •
- Debian-Pakete •
- Umgebungsvariablen
- [English] | [Nederlands] | [繁體中文] | [简体中文]
-
-
-# RustDesk Server-Programm
-
-[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
-
-[**Herunterladen**](https://github.com/rustdesk/rustdesk-server/releases)
-
-[**Handbuch**](https://rustdesk.com/docs/de/self-host/)
-
-[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
-
-Hosten Sie Ihren eigenen RustDesk-Server selbst, er ist kostenlos und quelloffen.
-
-## Manuelles Erstellen
-
-```bash
-cargo build --release
-```
-
-In target/release werden drei ausführbare Dateien erzeugt.
-
-- hbbs - RustDesk ID/Rendezvous-Server
-- hbbr - RustDesk Relay-Server
-- rustdesk-utils - RustDesk CLI-Utilities
-
-[Hier](https://github.com/rustdesk/rustdesk-server/releases) finden Sie aktualisierte Binärdateien.
-
-Wenn Sie Ihren eigenen Server entwickeln wollen, könnte [rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) ein besserer und einfacherer Start für Sie sein als dieses Repository.
-
-## Docker-Image
-
-Docker-Images werden automatisch generiert und bei jedem Github-Release veröffentlicht. Wir haben 2 Arten von Images.
-
-### Klassisches Image
-
-Diese Images sind mit `Ubuntu 20.04` gebaut, mit dem Zusatz der wichtigen Binärdateien (`hbbr` und `hbbs`). Sie sind auf [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server/) mit diesen Tags verfügbar:
-
-| Architektur | Image:Tag |
-| --- | --- |
-| amd64 | `rustdesk/rustdesk-server:latest` |
-| arm64v8 | `rustdesk/rustdesk-server:latest-arm64v8` |
-
-Sie können diese Images direkt mit `docker run` mit diesen Befehlen starten:
-
-```bash
-docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-Oder ohne `--net=host`, aber die P2P-Direktverbindung kann dann nicht funktionieren.
-
-Bei Systemen, die SELinux verwenden, muss `/root` durch `/root:z` ersetzt werden, damit die Container korrekt laufen. Alternativ kann die SELinux-Containertrennung durch Hinzufügen der Option `--security-opt label=disable` vollständig deaktiviert werden.
-
-```bash
-docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-Der Parameter `relay-server-ip` ist die IP-Adresse (oder der DNS-Name) des Servers, auf dem diese Container laufen. Der **optionale** Parameter `port` muss verwendet werden, wenn Sie einen anderen Port als **21117** für `hbbr` verwenden.
-
-Sie können auch Docker Compose verwenden, wobei diese Konfiguration als Vorlage dient:
-
-```yaml
-version: '3'
-
-networks:
- rustdesk-net:
- external: false
-
-services:
- hbbs:
- container_name: hbbs
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21118:21118
- image: rustdesk/rustdesk-server:latest
- command: hbbs -r rustdesk.example.com:21117
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- depends_on:
- - hbbr
- restart: unless-stopped
-
- hbbr:
- container_name: hbbr
- ports:
- - 21117:21117
- - 21119:21119
- image: rustdesk/rustdesk-server:latest
- command: hbbr
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- restart: unless-stopped
-```
-
-Bearbeiten Sie Zeile 16 so, dass sie auf Ihren Relay-Server verweist (den, der am Port 21117 lauscht). Sie können auch die Zeilen für die Volumes (Zeile 18 und 33) bearbeiten, wenn Sie dies wünschen.
-
-(Die Anerkennung für Docker Compose geht an @lukebarone und @QuiGonLeong.)
-
-## S6-Overlay-basierte Images
-
-Diese Images sind mit `busybox:stable` gebaut, mit dem Zusatz Binärdateien (sowohl hbbr als auch hbbs) und [S6-overlay](https://github.com/just-containers/s6-overlay). Sie sind auf [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server-s6/) mit diesen Tags verfügbar:
-
-| Architektur | Version | Image:Tag |
-| --- | --- | --- |
-| multiarch | neueste | `rustdesk/rustdesk-server-s6:latest` |
-| amd64 | neueste | `rustdesk/rustdesk-server-s6:latest-amd64` |
-| i386 | neueste | `rustdesk/rustdesk-server-s6:latest-i386` |
-| arm64v8 | neueste | `rustdesk/rustdesk-server-s6:latest-arm64v8` |
-| armv7 | neueste | `rustdesk/rustdesk-server-s6:latest-armv7` |
-| multiarch | 2 | `rustdesk/rustdesk-server-s6:2` |
-| amd64 | 2 | `rustdesk/rustdesk-server-s6:2-amd64` |
-| i386 | 2 | `rustdesk/rustdesk-server-s6:2-i386` |
-| arm64v8 | 2 | `rustdesk/rustdesk-server-s6:2-arm64v8` |
-| armv7 | 2 | `rustdesk/rustdesk-server-s6:2-armv7` |
-| multiarch | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0` |
-| amd64 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-amd64` |
-| i386 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-i386` |
-| arm64v8 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-arm64v8` |
-| armv7 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-armv7` |
-
-Es wird dringend empfohlen, das Image `multiarch` entweder mit dem Tag `major version` oder `latest` zu verwenden.
-
-Das S6-Overlay fungiert als Supervisor und hält beide Prozesse am Laufen, sodass bei diesem Image keine zwei separaten Container benötigt werden.
-
-Sie können diese Images direkt mit `docker run` mit diesem Befehl starten:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-oder ohne `--net=host`, aber die P2P-Direktverbindung kann dann nicht funktionieren.
-
-```bash
-docker run --name rustdesk-server \
- -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
- -p 21117:21117 -p 21118:21118 -p 21119:21119 \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-Oder Sie können eine Docker Compose-Datei verwenden:
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- volumes:
- - ./data:/data
- restart: unless-stopped
-```
-
-Für dieses Container-Image können Sie diese Umgebungsvariablen verwenden, **zusätzlich** zu den im Abschnitt **Umgebungsvariablen** angegebenen Variablen:
-
-| Variable | optional | Beschreibung |
-| --- | --- | --- |
-| RELAY | nein | IP-Adresse/DNS-Name des Rechners, auf dem dieser Container läuft |
-| ENCRYPTED_ONLY | ja | Wenn auf **1** gesetzt, wird eine unverschlüsselte Verbindung nicht akzeptiert |
-| KEY_PUB | ja | Öffentlicher Teil des Schlüsselpaares |
-| KEY_PRIV | ja | Privater Teil des Schlüsselpaares |
-
-### Verwaltung von Geheimnissen in S6-Overlay-basierten Images
-
-Sie können das Schlüsselpaar natürlich in einem Docker-Volume aufbewahren, aber empfehlenswert ist, die Schlüssel nicht in das Dateisystem zu schreiben.
-
-Beim Start des Containers wird das Vorhandensein des Schlüsselpaares geprüft (`/data/id_ed25519.pub` und `/data/id_ed25519`). Wenn einer dieser Schlüssel nicht existiert, wird er aus den Umgebungsvariablen oder den Docker-Geheimnissen neu erstellt.
-Dann wird die Gültigkeit des Schlüsselpaares überprüft: Wenn öffentlicher und privater Schlüssel nicht übereinstimmen, wird der Container angehalten.
-Wenn Sie keine Schlüssel angeben, erzeugt `hbbs` einen für Sie und legt ihn am Standardspeicherort ab.
-
-#### Umgebungsvariablen zum Speichern des Schlüsselpaars verwenden
-
-Sie können Docker-Umgebungsvariablen verwenden, um die Schlüssel zu speichern. Folgen Sie einfach diesen Beispielen:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
- -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
- -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
- - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
- volumes:
- - ./db:/db
- restart: unless-stopped
-```
-
-#### Docker-Geheimnisse zum Speichern des Schlüsselpaars verwenden
-
-Sie können alternativ auch Docker-Geheimnisse verwenden, um die Schlüssel zu speichern.
-Dies ist nützlich, wenn Sie **Docker Compose** oder **Docker Swarm** verwenden.
-Folgen Sie einfach diesem Beispiel:
-
-```bash
-cat secrets/id_ed25519.pub | docker secret create key_pub -
-cat secrets/id_ed25519 | docker secret create key_priv -
-docker service create --name rustdesk-server \
- --secret key_priv --secret key_pub \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- --mount "type=bind,source=$PWD/db,destination=/db" \
- rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- volumes:
- - ./db:/db
- restart: unless-stopped
- secrets:
- - key_pub
- - key_priv
-
-secrets:
- key_pub:
- file: secrets/id_ed25519.pub
- key_priv:
- file: secrets/id_ed25519
-```
-
-## Ein Schlüsselpaar erstellen
-
-Für die Verschlüsselung wird ein Schlüsselpaar benötigt, das Sie bereitstellen können, aber Sie benötigen eine Möglichkeit, es zu erstellen.
-
-Mit diesem Befehl können Sie ein Schlüsselpaar erzeugen:
-
-```bash
-/usr/bin/rustdesk-utils genkeypair
-```
-
-Wenn Sie das Paket `rustdesk-utils` nicht auf Ihrem System installiert haben (oder dies nicht wollen), können Sie den gleichen Befehl mit Docker aufrufen:
-
-```bash
-docker run --rm --entrypoint /usr/bin/rustdesk-utils rustdesk/rustdesk-server-s6:latest genkeypair
-```
-
-Die Ausgabe sieht dann etwa so aus:
-
-```text
-Public Key: 8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
-Secret Key: egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
-```
-
-## Debian-Pakete
-
-Für jede Binärdatei stehen separate Debian-Pakete zur Verfügung, die Sie in [Releases](https://github.com/rustdesk/rustdesk-server/releases) finden können.
-Diese Pakete sind für die folgenden Distributionen gedacht:
-
-- Ubuntu 22.04 LTS
-- Ubuntu 20.04 LTS
-- Ubuntu 18.04 LTS
-- Debian 11 Bullseye
-- Debian 10 Buster
-
-## Umgebungsvariablen
-
-hbbs und hbbr können mit diesen Umgebungsvariablen konfiguriert werden.
-Sie können die Variablen wie üblich angeben oder eine `.env`-Datei verwenden.
-
-| Variable | Binärdatei | Beschreibung |
-| --- | --- | --- |
-| ALWAYS_USE_RELAY | hbbs | Wenn auf **Y** gesetzt, wird eine direkte Verbindung nicht zugelassen. |
-| DB_URL | hbbs | Pfad für die Datenbankdatei |
-| DOWNGRADE_START_CHECK | hbbr | Verzögerung (in Sekunden) vor der Downgrade-Prüfung |
-| DOWNGRADE_THRESHOLD | hbbr | Schwellenwert der Downgrade-Prüfung (Bit/ms)) |
-| KEY | hbbs/hbbr | Wenn gesetzt, wird die Verwendung eines bestimmten Schlüssels erzwungen. Wenn auf **_** gesetzt, wird die Verwendung eines beliebigen Schlüssels erzwungen. |
-| LIMIT_SPEED | hbbr | Höchstgeschwindigkeit (in Mb/s) |
-| PORT | hbbs/hbbr | Lauschender Port (21116 für hbbs - 21117 für hbbr) |
-| RELAY_SERVERS | hbbs | IP-Adresse/DNS-Name der Rechner, auf denen hbbr läuft (durch Komma getrennt) |
-| RUST_LOG | all | Debug-Level einstellen (error\|warn\|info\|debug\|trace) |
-| SINGLE_BANDWIDTH | hbbr | Maximale Bandbreite für eine einzelne Verbindung (in Mb/s) |
-| TOTAL_BANDWIDTH | hbbr | Maximale Gesamtbandbreite (in Mb/s) |
diff --git a/README-NL.md b/README-NL.md
deleted file mode 100644
index c37064e..0000000
--- a/README-NL.md
+++ /dev/null
@@ -1,345 +0,0 @@
-
- Opbouwen •
- Docker •
- S6-Overlay •
- Key paar •
- Debian pakketten •
- ENV variabelen
- [English] | [Deutsch] | [繁體中文] | [简体中文]
-
-
-# RustDesk Server Programa
-
-[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
-
-[**Download**](https://github.com/rustdesk/rustdesk-server/releases)
-
-[**Handleiding**](https://rustdesk.com/docs/nl/self-host/)
-
-[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
-
-Zelf uw eigen RustDesk server hosten, het is gratis en open source.
-
-## Hoe handmatig opbouwen
-
-```bash
-cargo build --release
-```
-
-In target/release worden drie uitvoerbare bestanden gegenereerd.
-
-- hbbs - RustDesk ID/Rendezvous server
-- hbbr - RustDesk relay server
-- rustdesk-utils - RustDesk CLI hulpprogramma's
-
-U kunt bijgewerkte binaries vinden op [releases](https://github.com/rustdesk/rustdesk-server/releases) pagina.
-
-Als u uw eigen server wilt ontwikkelen, is [rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) misschien een betere en eenvoudigere start voor u dan deze repo.
-
-## Docker bestanden (images)
-
-Docker bestanden (images) worden automatisch gegenereerd en gepubliceerd bij elke github release. We hebben 2 soorten bestanden (images).
-
-### Klassiek bestand (image)
-
-Deze bestanden (images) zijn gebouwd voor `ubuntu-20.04` met als enige toevoeging de belangrijkste binaries (`hbbr` en `hbbs`). Ze zijn beschikbaar op [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server/) met deze tags:
-
-| architectuur | image:tag |
-| --- | --- |
-| amd64 | `rustdesk/rustdesk-server:latest` |
-| arm64v8 | `rustdesk/rustdesk-server:latest-arm64v8` |
-
-U kunt deze bestanden (images) direct starten via `docker run` met deze commando's:
-
-```bash
-docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-of zonder `--net=host`, maar een directe P2P verbinding zal niet werken.
-
-Voor systemen die SELinux gebruiken is het vervangen van `/root` door `/root:z` nodig om de containers correct te laten draaien. Als alternatief kan SELinux containerscheiding volledig worden uitgeschakeld door de optie `--security-opt label=disable` toe te voegen.
-
-```bash
-docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-De `relay-server-ip` parameter is het IP adres (of dns naam) van de server waarop deze containers draaien. De **optionele** `port` parameter moet gebruikt worden als je een andere poort dan **21117** gebruikt voor `hbbr`.
-
-U kunt ook docker-compose gebruiken, met deze configuratie als sjabloon:
-
-```yaml
-version: '3'
-
-networks:
- rustdesk-net:
- external: false
-
-services:
- hbbs:
- container_name: hbbs
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21118:21118
- image: rustdesk/rustdesk-server:latest
- command: hbbs -r rustdesk.example.com:21117
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- depends_on:
- - hbbr
- restart: unless-stopped
-
- hbbr:
- container_name: hbbr
- ports:
- - 21117:21117
- - 21119:21119
- image: rustdesk/rustdesk-server:latest
- command: hbbr
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- restart: unless-stopped
-```
-
-Bewerk regel 16 om te verwijzen naar uw relais-server (degene die luistert op poort 21117). U kunt ook de inhoudsregels (L18 en L33) bewerken indien nodig.
-
-(docker-compose erkenning gaat naar @lukebarone en @QuiGonLeong)
-
-## S6-overlay gebaseerde bestanden
-
-Deze bestanden (images) zijn gebouwd tegen `busybox:stable` met toevoeging van de binaries (zowel hbbr als hbbs) en [S6-overlay](https://github.com/just-containers/s6-overlay). Ze zijn beschikbaar op [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server-s6/) met deze tags:
-
-| architectuur | versie | image:tag |
-| --- | --- | --- |
-| multiarch | latest | `rustdesk/rustdesk-server-s6:latest` |
-| amd64 | latest | `rustdesk/rustdesk-server-s6:latest-amd64` |
-| i386 | latest | `rustdesk/rustdesk-server-s6:latest-i386` |
-| arm64v8 | latest | `rustdesk/rustdesk-server-s6:latest-arm64v8` |
-| armv7 | latest | `rustdesk/rustdesk-server-s6:latest-armv7` |
-| multiarch | 2 | `rustdesk/rustdesk-server-s6:2` |
-| amd64 | 2 | `rustdesk/rustdesk-server-s6:2-amd64` |
-| i386 | 2 | `rustdesk/rustdesk-server-s6:2-i386` |
-| arm64v8 | 2 | `rustdesk/rustdesk-server-s6:2-arm64v8` |
-| armv7 | 2 | `rustdesk/rustdesk-server-s6:2-armv7` |
-| multiarch | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0` |
-| amd64 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-amd64` |
-| i386 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-i386` |
-| arm64v8 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-arm64v8` |
-| armv7 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-armv7` |
-
-Je wordt sterk aangeraden om het `multiarch` bestand (image) te gebruiken met de `major version` of `latest` tag.
-
-De S6-overlay fungeert als supervisor en houdt beide processen draaiende, dus met dit bestand (image) is het niet nodig om twee aparte draaiende containers te hebben.
-
-U kunt deze bestanden (images) direct starten via `docker run` met dit commando:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-of zonder `--net=host`, maar een directe P2P verbinding zal niet werken.
-
-```bash
-docker run --name rustdesk-server \
- -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
- -p 21117:21117 -p 21118:21118 -p 21119:21119 \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-Of u kunt een docker-compose bestand gebruiken:
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- volumes:
- - ./data:/data
- restart: unless-stopped
-```
-
-Voor dit container bestand (image) kunt u deze omgevingsvariabelen gebruiken, **naast** de variabelen in de volgende **ENV-variabelen** sectie:
-
-| variabele | optioneel | beschrijving |
-| --- | --- | --- |
-| RELAY | no | het IP-adres/DNS-naam van de machine waarop deze container draait |
-| ENCRYPTED_ONLY | yes | indien ingesteld op **"1"** wordt een niet-versleutelde verbinding niet geaccepteerd |
-| KEY_PUB | yes | het openbare deel van het key paar |
-| KEY_PRIV | yes | het private deel van het key paar |
-
-### Geheim beheer in S6-overlay gebaseerde bestanden (images)
-
-U kunt uiteraard het key paar bewaren in een docker volume, maar de optimale werkwijzen vertellen u om de keys niet op het bestandssysteem te schrijven; dus bieden we een paar opties.
-
-Bij het opstarten van de container wordt de aanwezigheid van het key paar gecontroleerd (`/data/id_ed25519.pub` en `/data/id_ed25519`) en als een van deze keys niet bestaat, wordt deze opnieuw aangemaakt vanuit ENV variabelen of docker secrets.
-Vervolgens wordt de geldigheid van het key paar gecontroleerd: indien publieke en private keys niet overeenkomen, stopt de container.
-Als je geen keys opgeeft, zal `hbbs` er een voor je genereren en op de standaard locatie plaatsen.
-
-#### Gebruik ENV om het key paar op te slaan
-
-U kunt docker omgevingsvariabelen gebruiken om de keys op te slaan. Volg gewoon deze voorbeelden:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
- -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
- -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
- - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
- volumes:
- - ./db:/db
- restart: unless-stopped
-```
-
-#### Gebruik Docker secrets om het key paar op te slaan
-
-U kunt ook docker secrets gebruiken om de keys op te slaan.
-Dit is handig als je **docker-compose** of **docker swarm** gebruikt.
-Volg deze voorbeelden:
-
-```bash
-cat secrets/id_ed25519.pub | docker secret create key_pub -
-cat secrets/id_ed25519 | docker secret create key_priv -
-docker service create --name rustdesk-server \
- --secret key_priv --secret key_pub \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- --mount "type=bind,source=$PWD/db,destination=/db" \
- rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- volumes:
- - ./db:/db
- restart: unless-stopped
- secrets:
- - key_pub
- - key_priv
-
-secrets:
- key_pub:
- file: secrets/id_ed25519.pub
- key_priv:
- file: secrets/id_ed25519
-```
-
-## Hoe maak je een key paar
-
-Een key paar is nodig voor encryptie; u kunt het verstrekken, zoals eerder uitgelegd, maar u heeft een manier nodig om er een te maken.
-
-U kunt dit commando gebruiken om een key paar te genereren:
-
-```bash
-/usr/bin/rustdesk-utils genkeypair
-```
-
-Als u het pakket `rustdesk-utils` niet op uw systeem hebt staan (of wilt), kunt u hetzelfde commando met docker uitvoeren:
-
-```bash
-docker run --rm --entrypoint /usr/bin/rustdesk-utils rustdesk/rustdesk-server-s6:latest genkeypair
-```
-
-De uitvoer ziet er ongeveer zo uit:
-
-```text
-Public Key: 8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
-Secret Key: egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
-```
-
-## .deb pakketten
-
-Voor elke binary zijn aparte .deb-pakketten beschikbaar, u kunt ze vinden in de [releases](https://github.com/rustdesk/rustdesk-server/releases).
-Deze pakketten zijn bedoeld voor de volgende distributies:
-
-- Ubuntu 22.04 LTS
-- Ubuntu 20.04 LTS
-- Ubuntu 18.04 LTS
-- Debian 11 bullseye
-- Debian 10 buster
-
-## ENV variabelen
-
-hbbs en hbbr kunnen worden geconfigureerd met deze ENV-variabelen.
-U kunt de variabelen zoals gebruikelijk opgeven of een `.env` bestand gebruiken.
-
-| variabele | binary | beschrijving |
-| --- | --- | --- |
-| ALWAYS_USE_RELAY | hbbs | indien ingesteld op **"Y"** wordt directe peer-verbinding niet toegestaan |
-| DB_URL | hbbs | path voor database bestand |
-| DOWNGRADE_START_CHECK | hbbr | vertraging (in seconden) voor downgrade-controle |
-| DOWNGRADE_THRESHOLD | hbbr | drempel van downgrade controle (bit/ms) |
-| KEY | hbbs/hbbr | indien ingesteld forceert dit het gebruik van een specifieke toets, indien ingesteld op **"_"** forceert dit het gebruik van een willekeurige toets |
-| LIMIT_SPEED | hbbr | snelheidslimiet (in Mb/s) |
-| PORT | hbbs/hbbr | luister-poort (21116 voor hbbs - 21117 voor hbbr) |
-| RELAY_SERVERS | hbbs | IP-adres/DNS-naam van de machines waarop hbbr draait (gescheiden door komma) |
-| RUST_LOG | all | debug-niveau instellen (error\|warn\|info\|debug\|trace) |
-| SINGLE_BANDWIDTH | hbbr | maximale bandbreedte voor een enkele verbinding (in Mb/s) |
-| TOTAL_BANDWIDTH | hbbr | maximale totale bandbreedte (in Mb/s) |
diff --git a/README-TW.md b/README-TW.md
deleted file mode 100644
index da07954..0000000
--- a/README-TW.md
+++ /dev/null
@@ -1,347 +0,0 @@
-
- 自行建置 •
- Docker •
- S6-overlay •
- 金鑰對 •
- Debian •
- 環境參數
- [English] | [Deutsch] | [Nederlands] | [简体中文]
-
-
-# RustDesk Server Program
-
-[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
-
-[**下載**](https://github.com/rustdesk/rustdesk-server/releases)
-
-[**說明文件**](https://rustdesk.com/docs/zh-tw/self-host/)
-
-[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
-
-自行建置屬於您自己的 RustDesk 伺服器,它是免費的且開源。
-
-## 如何自行建置
-
-```bash
-cargo build --release
-```
-
-在 target/release 中會產生三個可執行檔。
-
-- hbbs - RustDesk ID/會合伺服器
-- hbbr - RustDesk 中繼伺服器
-- rustdesk-utils - RustDesk 命令行工具
-
-您可以在 [releases](https://github.com/rustdesk/rustdesk-server/releases) 頁面上找到更新的執行檔。
-
-如果您需要額外功能,[RustDesk 專業版伺服器](https://rustdesk.com/pricing.html) 或許更適合您。
-
-如果您想開發自己的伺服器,[rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) 可能是一個比這個倉庫更好、更簡單的開始。
-
-## Docker 映像檔
-
-Docker 映像檔會在每次 GitHub 發布時自動生成並發布。我們有兩種映像檔。
-
-### Classic 映像檔
-
-這些映像檔是基於 `ubuntu-20.04` 建置的,僅添加了兩個主要的執行檔(`hbbr` 和 `hbbs`)。它們可在 [Docker Hub](https://hub.docker.com/r/rustdesk/rustdesk-server/) 上取得,帶有以下tags:
-
-| 架構 | image:tag |
-| ------- | ----------------------------------------- |
-| amd64 | `rustdesk/rustdesk-server:latest` |
-| arm64v8 | `rustdesk/rustdesk-server:latest-arm64v8` |
-
-您可以使用以下指令,直接透過 ``docker run`` 來啟動這些映像檔:
-
-```bash
-docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-或刪去 `--net=host`, 但 P2P 直接連線會無法運作。
-
-對於使用 SELinux 的系統,需要將 ``/root`` 替換為 ``/root:z``,以便容器正確運行。或者,也可以通過添加選項 ``--security-opt label=disable`` 完全禁用 SELinux 容器隔離。
-
-```bash
-docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-`relay-server-ip` 參數是執行這些容器的伺服器的 IP 地址(或 DNS 名稱)。如果您為 `hbbr` 使用的端口不是 **21117**,則必須使用 **可選** 的 `port` 參數。
-
-您也可以使用 docker-compose 使用這個設定做為範例:
-
-```yaml
-version: '3'
-
-networks:
- rustdesk-net:
- external: false
-
-services:
- hbbs:
- container_name: hbbs
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21118:21118
- image: rustdesk/rustdesk-server:latest
- command: hbbs -r rustdesk.example.com:21117
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- depends_on:
- - hbbr
- restart: unless-stopped
-
- hbbr:
- container_name: hbbr
- ports:
- - 21117:21117
- - 21119:21119
- image: rustdesk/rustdesk-server:latest
- command: hbbr
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- restart: unless-stopped
-```
-
-請編輯第 16 行,將其指向您的中繼伺服器 (監聽端口 21117 那一個)。 如果需要的話,您也可以編輯 volume (第 18 和 33 行)。
-
-(感謝 @lukebarone 和 @QuiGonLeong 協助提供 docker-compose 的設定範例)
-
-## 基於 S6-overlay 的映象檔
-
-這些映象檔是針對 `busybox:stable` 建置的,並添加了執行檔(hbbr 和 hbbs)以及 [S6-overlay](https://github.com/just-containers/s6-overlay)。 它們在以及這些 tags 在 [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server-s6/) 可用:
-
-| 架構 | version | image:tag |
-| --------- | ------- | -------------------------------------------- |
-| multiarch | latest | `rustdesk/rustdesk-server-s6:latest` |
-| amd64 | latest | `rustdesk/rustdesk-server-s6:latest-amd64` |
-| i386 | latest | `rustdesk/rustdesk-server-s6:latest-i386` |
-| arm64v8 | latest | `rustdesk/rustdesk-server-s6:latest-arm64v8` |
-| armv7 | latest | `rustdesk/rustdesk-server-s6:latest-armv7` |
-| multiarch | 2 | `rustdesk/rustdesk-server-s6:2` |
-| amd64 | 2 | `rustdesk/rustdesk-server-s6:2-amd64` |
-| i386 | 2 | `rustdesk/rustdesk-server-s6:2-i386` |
-| arm64v8 | 2 | `rustdesk/rustdesk-server-s6:2-arm64v8` |
-| armv7 | 2 | `rustdesk/rustdesk-server-s6:2-armv7` |
-| multiarch | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0` |
-| amd64 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-amd64` |
-| i386 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-i386` |
-| arm64v8 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-arm64v8` |
-| armv7 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-armv7` |
-
-強烈建議您使用 `multiarch` 映象檔 可以選擇使用 `major version` 或 `latest` tags。
-
-S6-overlay 在此充當監督程序,保持兩個進程運行,因此使用此映象檔,您無需運行兩個獨立的容器。
-
-您可以直接使用以下命令使用 `docker run` 來啟動這個映象檔:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-或刪去 `--net=host`, 但 P2P 直接連線會無法運作。
-
-```bash
-docker run --name rustdesk-server \
- -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
- -p 21117:21117 -p 21118:21118 -p 21119:21119 \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-或是您可以使用 docker-compose 文件:
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- volumes:
- - ./data:/data
- restart: unless-stopped
-```
-
-對於此容器映象檔,您可以使用這些環境變數,**除了**以下**環境變數**部分指定的那些。
-
-| 環境變數 | 是否可選 | 敘述 |
-| -------------- | -------- | ------------------------------------------ |
-| RELAY | 否 | 運行此容器的機器的 IP 地址/ DNS 名稱 |
-| ENCRYPTED_ONLY | 是 | 如果設置為 **"1"**,將不接受未加密的連接。 |
-| KEY_PUB | 是 | 金鑰對中的公鑰(Public Key) |
-| KEY_PRIV | 是 | 金鑰對中的私鑰(Private Key) |
-
-### 在基於 S6-overlay 的 Secret 管理
-
-您可以將金鑰對保存在 Docker volume 中,但最佳實踐建議不要將金鑰寫入文件系統;因此,我們提供了一些選項。
-
-在容器啟動時,會檢查金鑰對的是否存在(`/data/id_ed25519.pub` 和 `/data/id_ed25519`),如果其中一個金鑰不存在,則會從環境變數或 Docker Secret 重新生成它。
-然後檢查金鑰對的有效性:如果公鑰和私鑰不匹配,容器將停止運行。
-如果您未提供金鑰,`hbbs` 將為您產生一個,並將其放置在默認位置。
-
-#### 使用 ENV 存儲金鑰對
-
-您可以使用 Docker 環境變數來儲存金鑰。只需按照以下範例操作:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
- -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
- -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
- - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
- volumes:
- - ./db:/db
- restart: unless-stopped
-```
-
-#### 使用 Docker Secret 來儲存金鑰對
-
-您還可以使用 Docker Secret來儲存金鑰。
-如果您使用 **docker-compose** 或 **docker swarm**,這很有用。
-只需按照以下示例操作:
-
-```bash
-cat secrets/id_ed25519.pub | docker secret create key_pub -
-cat secrets/id_ed25519 | docker secret create key_priv -
-docker service create --name rustdesk-server \
- --secret key_priv --secret key_pub \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- --mount "type=bind,source=$PWD/db,destination=/db" \
- rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- volumes:
- - ./db:/db
- restart: unless-stopped
- secrets:
- - key_pub
- - key_priv
-
-secrets:
- key_pub:
- file: secrets/id_ed25519.pub
- key_priv:
- file: secrets/id_ed25519
-```
-
-## 如何建立金鑰對
-
-加密需要一對金鑰;您可以按照前面所述提供它,但需要一種生成金鑰對的方法。
-
-您可以使用以下命令生成一對金鑰:
-
-```bash
-/usr/bin/rustdesk-utils genkeypair
-```
-
-如果您沒有(或不想)在系統上安裝 `rustdesk-utils` 套件,您可以使用 Docker執行相同的命令:
-
-```bash
-docker run --rm --entrypoint /usr/bin/rustdesk-utils rustdesk/rustdesk-server-s6:latest genkeypair
-```
-
-輸出將類似於以下內容:
-
-```text
-Public Key: 8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
-Secret Key: egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
-```
-
-## .deb 套件
-
-每個執行檔都有單獨的 .deb 套件可供使用,您可以在 [releases](https://github.com/rustdesk/rustdesk-server/releases) 中找到它們。
-這些套件適用於以下發行版:
-
-- Ubuntu 22.04 LTS
-- Ubuntu 20.04 LTS
-- Ubuntu 18.04 LTS
-- Debian 11 bullseye
-- Debian 10 buster
-
-## ENV 環境參數
-
-可以使用這些 ENV 參數來配置 hbbs 和 hbbr。
-您可以像往常一樣指定參數,或者使用 .env 文件。
-
-| 參數 | 執行檔 | 敘述 |
-| --------------------- | --------- | -------------------------------------------------------------------- |
-| ALWAYS_USE_RELAY | hbbs | 如果設為 **"Y"**,禁止直接點對點連接 |
-| DB_URL | hbbs | 資料庫的路徑 |
-| DOWNGRADE_START_CHECK | hbbr | 降級檢查之前的延遲時間(以秒為單位) |
-| DOWNGRADE_THRESHOLD | hbbr | 降級檢查的閾值(bit/ms) |
-| KEY | hbbs/hbbr | 如果設置了,將強制使用特定金鑰,如果設為 **"_"**,則強制使用任何金鑰 |
-| LIMIT_SPEED | hbbr | 速度限制(以Mb/s為單位) |
-| PORT | hbbs/hbbr | 監聽端口(hbbs為21116,hbbr為21117) |
-| RELAY_SERVERS | hbbs | 運行hbbr的機器的IP地址/DNS名稱(用逗號分隔) |
-| RUST_LOG | all | 設定 debug level (error\|warn\|info\|debug\|trace) |
-| SINGLE_BANDWIDTH | hbbr | 單個連接的最大頻寬(以Mb/s為單位) |
-| TOTAL_BANDWIDTH | hbbr | 最大總頻寬(以Mb/s為單位) |
\ No newline at end of file
diff --git a/README.md b/README.md
index fdfa7b8..17087f1 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,3 @@
-
- Manually •
- Docker •
- S6-overlay •
- Keypair •
- Debian •
- Variables
- [Deutsch] | [Nederlands] | [繁體中文] | [简体中文]
-
-
# RustDesk Server Program
[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
@@ -38,317 +28,8 @@ If you want extra features, [RustDesk Server Pro](https://rustdesk.com/pricing.h
If you want to develop your own server, [rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) might be a better and simpler start for you than this repo.
-## Docker images
+## Installation
-Docker images are automatically generated and published to [Docker Hub](https://hub.docker.com/r/rustdesk) and [GitHub Container Registry](https://github.com/rustdesk?tab=packages&repo_name=rustdesk-server) on every GitHub release. We have 2 kind of images.
+Please follow this [doc](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/)
-### Classic image
-These images are built from scratch with two main binaries (`hbbs` and `hbbr`). They're available on [Docker Hub](https://hub.docker.com/r/rustdesk/rustdesk-server/) and [GitHub Container Registry](https://github.com/rustdesk/rustdesk-server/pkgs/container/rustdesk-server) with these architectures:
-
-* amd64
-* arm64v8
-* armv7
-
-You could use `latest` tag or major version tag `1` with supported architectures:
-
-| Version | image:tag |
-| ------------- | --------------------------------- |
-| latest | `rustdesk/rustdesk-server:latest` |
-| Major version | `rustdesk/rustdesk-server:1` |
-
-
-You can start these images directly with `docker run` with these commands:
-
-```bash
-docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-or without `--net=host`, but P2P direct connection can not work.
-
-For systems using SELinux, replacing `/root` by `/root:z` is required for the containers to run correctly. Alternatively, SELinux container separation can be disabled completely adding the option `--security-opt label=disable`.
-
-```bash
-docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r
-docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
-```
-
-The `relay-server-ip` parameter is the IP address (or dns name) of the server running these containers. The **optional** `port` parameter has to be used if you use a port different than **21117** for `hbbr`.
-
-You can also use docker-compose, using this configuration as a template:
-
-```yaml
-version: '3'
-
-networks:
- rustdesk-net:
- external: false
-
-services:
- hbbs:
- container_name: hbbs
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21118:21118
- image: rustdesk/rustdesk-server:latest
- command: hbbs -r rustdesk.example.com:21117
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- depends_on:
- - hbbr
- restart: unless-stopped
-
- hbbr:
- container_name: hbbr
- ports:
- - 21117:21117
- - 21119:21119
- image: rustdesk/rustdesk-server:latest
- command: hbbr
- volumes:
- - ./data:/root
- networks:
- - rustdesk-net
- restart: unless-stopped
-```
-
-Edit line 16 to point to your relay server (the one listening on port 21117). You can also edit the volume lines (line 18 and line 33) if you need.
-
-(docker-compose credit goes to @lukebarone and @QuiGonLeong)
-
-> [!NOTE]
-> The rustdesk/rustdesk-server:latest in China may be replaced with the latest version number on Docker Hub, such as `rustdesk-server:1.1.10-3`. Otherwise, the old version may be pulled due to image acceleration.
-
-> [!NOTE]
-> If you are experiencing issues pulling from Docker Hub, try pulling from the [GitHub Container Registry](https://github.com/rustdesk/rustdesk-server/pkgs/container/rustdesk-server) instead.
-
-## S6-overlay based images
-
-These images are build against `busybox:stable` with the addition of the binaries (both `hbbs` and `hbbr`) and [S6-overlay](https://github.com/just-containers/s6-overlay). They're available on [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server-s6/) and [GitHub Container Registry](https://github.com/rustdesk/rustdesk-server/pkgs/container/rustdesk-server) with these architectures:
-
-* amd64
-* i386
-* arm64v8
-* armv7
-
-You could use `latest` tag or major version tag `1` with supported architectures:
-
-| Version | image:tag |
-| ------------- | ------------------------------------ |
-| latest | `rustdesk/rustdesk-server-s6:latest` |
-| Major version | `rustdesk/rustdesk-server-s6:1` |
-
-The S6-overlay acts as a supervisor and keeps both process running, so with this image, there's no need to have two separate running containers.
-
-You can start these images directly with `docker run` with this command:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-or without `--net=host`, but P2P direct connection cannot work.
-
-```bash
-docker run --name rustdesk-server \
- -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
- -p 21117:21117 -p 21118:21118 -p 21119:21119 \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
-```
-
-Or you can use a docker-compose file:
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- volumes:
- - ./data:/data
- restart: unless-stopped
-```
-
-For this container image, you can use these environment variables, **in addition** to the ones specified in the following **ENV variables** section:
-
-| variable | optional | description |
-| --- | --- | --- |
-| RELAY | no | the IP address/DNS name of the machine running this container |
-| ENCRYPTED_ONLY | yes | if set to **"1"** unencrypted connection will not be accepted |
-| KEY_PUB | yes | public part of the key pair |
-| KEY_PRIV | yes | private part of the key pair |
-
-### Secret management in S6-overlay based images
-
-You can obviously keep the key pair in a docker volume, but the best practices tells you to not write the keys on the filesystem; so we provide a couple of options.
-
-On container startup, the presence of the keypair is checked (`/data/id_ed25519.pub` and `/data/id_ed25519`) and if one of these keys doesn't exist, it's recreated from ENV variables or docker secrets.
-Then the validity of the keypair is checked: if public and private keys doesn't match, the container will stop.
-If you provide no keys, `hbbs` will generate one for you, and it'll place it in the default location.
-
-#### Use ENV to store the key pair
-
-You can use docker environment variables to store the keys. Just follow this examples:
-
-```bash
-docker run --name rustdesk-server \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
- -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
- -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
- - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
- volumes:
- - ./db:/db
- restart: unless-stopped
-```
-
-#### Use Docker secrets to store the key pair
-
-You can alternatively use docker secrets to store the keys.
-This is useful if you're using **docker-compose** or **Docker Swarm**.
-Just follow this examples:
-
-```bash
-cat secrets/id_ed25519.pub | docker secret create key_pub -
-cat secrets/id_ed25519 | docker secret create key_priv -
-docker service create --name rustdesk-server \
- --secret key_priv --secret key_pub \
- --net=host \
- -e "RELAY=rustdeskrelay.example.com" \
- -e "ENCRYPTED_ONLY=1" \
- -e "DB_URL=/db/db_v2.sqlite3" \
- --mount "type=bind,source=$PWD/db,destination=/db" \
- rustdesk/rustdesk-server-s6:latest
-```
-
-```yaml
-version: '3'
-
-services:
- rustdesk-server:
- container_name: rustdesk-server
- ports:
- - 21115:21115
- - 21116:21116
- - 21116:21116/udp
- - 21117:21117
- - 21118:21118
- - 21119:21119
- image: rustdesk/rustdesk-server-s6:latest
- environment:
- - "RELAY=rustdesk.example.com:21117"
- - "ENCRYPTED_ONLY=1"
- - "DB_URL=/db/db_v2.sqlite3"
- volumes:
- - ./db:/db
- restart: unless-stopped
- secrets:
- - key_pub
- - key_priv
-
-secrets:
- key_pub:
- file: secrets/id_ed25519.pub
- key_priv:
- file: secrets/id_ed25519
-```
-
-## How to create a keypair
-
-A keypair is needed for encryption; you can provide it, as explained before, but you need a way to create one.
-
-You can use this command to generate a keypair:
-
-```bash
-/usr/bin/rustdesk-utils genkeypair
-```
-
-If you don't have (or don't want) the `rustdesk-utils` package installed on your system, you can invoke the same command with docker:
-
-```bash
-docker run --rm --entrypoint /usr/bin/rustdesk-utils rustdesk/rustdesk-server-s6:latest genkeypair
-```
-
-The output will be something like this:
-
-```text
-Public Key: 8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
-Secret Key: egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
-```
-
-## .deb packages
-
-Separate .deb packages are available for each binary, you can find them in the [Releases](https://github.com/rustdesk/rustdesk-server/releases).
-These packages are meant for the following distributions:
-
-- Ubuntu 24.04 LTS
-- Ubuntu 22.04 LTS
-- Ubuntu 20.04 LTS
-- Ubuntu 18.04 LTS
-- Debian 12 bookworm
-- Debian 11 bullseye
-- Debian 10 buster
-
-## ENV variables
-
-`hbbs` and `hbbr` can be configured using these ENV variables.
-You can specify the variables as usual or use an `.env` file.
-
-| variable | binary | description |
-| --- | --- | --- |
-| ALWAYS_USE_RELAY | hbbs | if set to **"Y"** disallows direct peer connection |
-| DB_URL | hbbs | path for database file |
-| DOWNGRADE_START_CHECK | hbbr | delay (in seconds) before downgrade check |
-| DOWNGRADE_THRESHOLD | hbbr | threshold of downgrade check (bit/ms) |
-| KEY | hbbs/hbbr | if set force the use of a specific key, if set to **"_"** force the use of any key |
-| LIMIT_SPEED | hbbr | speed limit (in Mb/s) |
-| PORT | hbbs/hbbr | listening port (21116 for hbbs - 21117 for hbbr) |
-| RELAY | hbbs | IP address/DNS name of the machines running hbbr (separated by comma) |
-| RUST_LOG | all | set debug level (error\|warn\|info\|debug\|trace) |
-| SINGLE_BANDWIDTH | hbbr | max bandwidth for a single connection (in Mb/s) |
-| TOTAL_BANDWIDTH | hbbr | max total bandwidth (in Mb/s) |