{"id":13405782,"url":"https://github.com/rustdesk/rustdesk-server","last_synced_at":"2025-05-12T13:19:06.495Z","repository":{"id":37206104,"uuid":"299354666","full_name":"rustdesk/rustdesk-server","owner":"rustdesk","description":"RustDesk Server Program","archived":false,"fork":false,"pushed_at":"2025-05-11T12:54:24.000Z","size":1641,"stargazers_count":7757,"open_issues_count":134,"forks_count":1725,"subscribers_count":95,"default_branch":"master","last_synced_at":"2025-05-12T13:18:59.623Z","etag":null,"topics":["remote-access","remote-control","remote-desktop","tauri"],"latest_commit_sha":null,"homepage":"https://rustdesk.com/server","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rustdesk.png","metadata":{"files":{"readme":"README-DE.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-28T15:37:59.000Z","updated_at":"2025-05-12T05:59:06.000Z","dependencies_parsed_at":"2023-12-05T10:29:04.603Z","dependency_job_id":"fd30d141-5b3a-4c1f-91df-63315ba63f99","html_url":"https://github.com/rustdesk/rustdesk-server","commit_stats":{"total_commits":319,"total_committers":32,"mean_commits":9.96875,"dds":0.6677115987460815,"last_synced_commit":"041a603173513a5958dc8df836b26344707207cb"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustdesk%2Frustdesk-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustdesk%2Frustdesk-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustdesk%2Frustdesk-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustdesk%2Frustdesk-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rustdesk","download_url":"https://codeload.github.com/rustdesk/rustdesk-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253745196,"owners_count":21957319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["remote-access","remote-control","remote-desktop","tauri"],"created_at":"2024-07-30T19:02:11.475Z","updated_at":"2025-05-12T13:19:06.470Z","avatar_url":"https://github.com/rustdesk.png","language":"Rust","funding_links":[],"categories":["Rust","HarmonyOS","Apps","tauri","Network","Applications","Work"],"sub_categories":["Windows Manager","Open Source","Networking"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"#manuelles-erstellen\"\u003eErstellen\u003c/a\u003e •\n  \u003ca href=\"#docker-image\"\u003eDocker\u003c/a\u003e •\n  \u003ca href=\"#s6-overlay-basierte-images\"\u003eS6-Overlay\u003c/a\u003e •\n  \u003ca href=\"#ein-schlüsselpaar-erstellen\"\u003eSchlüsselpaar\u003c/a\u003e •\n  \u003ca href=\"#debian-pakete\"\u003eDebian-Pakete\u003c/a\u003e •\n  \u003ca href=\"#umgebungsvariablen\"\u003eUmgebungsvariablen\u003c/a\u003e\u003cbr\u003e\n  [\u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e] | [\u003ca href=\"README-NL.md\"\u003eNederlands\u003c/a\u003e] | [\u003ca href=\"README-TW.md\"\u003e繁體中文\u003c/a\u003e] | [\u003ca href=\"README-ZH.md\"\u003e简体中文\u003c/a\u003e]\u003cbr\u003e\n\u003c/p\u003e\n\n# RustDesk Server-Programm\n\n[![build](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml/badge.svg)](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)\n\n[**Herunterladen**](https://github.com/rustdesk/rustdesk-server/releases)\n\n[**Handbuch**](https://rustdesk.com/docs/de/self-host/)\n\n[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)\n\nHosten Sie Ihren eigenen RustDesk-Server selbst, er ist kostenlos und quelloffen.\n\n## Manuelles Erstellen\n\n```bash\ncargo build --release\n```\n\nIn target/release werden drei ausführbare Dateien erzeugt.\n\n- hbbs - RustDesk ID/Rendezvous-Server\n- hbbr - RustDesk Relay-Server\n- rustdesk-utils - RustDesk CLI-Utilities\n\n[Hier](https://github.com/rustdesk/rustdesk-server/releases) finden Sie aktualisierte Binärdateien.\n\nWenn 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.\n\n## Docker-Image\n\nDocker-Images werden automatisch generiert und bei jedem Github-Release veröffentlicht. Wir haben 2 Arten von Images.\n\n### Klassisches Image\n\nDiese 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:\n\n| Architektur | Image:Tag |\n| --- | --- |\n| amd64 | `rustdesk/rustdesk-server:latest` |\n| arm64v8 | `rustdesk/rustdesk-server:latest-arm64v8` |\n\nSie können diese Images direkt mit `docker run` mit diesen Befehlen starten:\n\n```bash\ndocker run --name hbbs --net=host -v \"$PWD/data:/root\" -d rustdesk/rustdesk-server:latest hbbs -r \u003crelay-server-ip[:port]\u003e \ndocker run --name hbbr --net=host -v \"$PWD/data:/root\" -d rustdesk/rustdesk-server:latest hbbr \n```\n\nOder ohne `--net=host`, aber die P2P-Direktverbindung kann dann nicht funktionieren.\n\nBei 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.\n\n```bash\ndocker 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 \u003crelay-server-ip[:port]\u003e \ndocker run --name hbbr -p 21117:21117 -p 21119:21119 -v \"$PWD/data:/root\" -d rustdesk/rustdesk-server:latest hbbr \n```\n\nDer 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.\n\nSie können auch Docker Compose verwenden, wobei diese Konfiguration als Vorlage dient:\n\n```yaml\nversion: '3'\n\nnetworks:\n  rustdesk-net:\n    external: false\n\nservices:\n  hbbs:\n    container_name: hbbs\n    ports:\n      - 21115:21115\n      - 21116:21116\n      - 21116:21116/udp\n      - 21118:21118\n    image: rustdesk/rustdesk-server:latest\n    command: hbbs -r rustdesk.example.com:21117\n    volumes:\n      - ./data:/root\n    networks:\n      - rustdesk-net\n    depends_on:\n      - hbbr\n    restart: unless-stopped\n\n  hbbr:\n    container_name: hbbr\n    ports:\n      - 21117:21117\n      - 21119:21119\n    image: rustdesk/rustdesk-server:latest\n    command: hbbr\n    volumes:\n      - ./data:/root\n    networks:\n      - rustdesk-net\n    restart: unless-stopped\n```\n\nBearbeiten 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.\n\n(Die Anerkennung für Docker Compose geht an @lukebarone und @QuiGonLeong.)\n\n## S6-Overlay-basierte Images\n\nDiese 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:\n\n| Architektur | Version | Image:Tag |\n| --- | --- | --- |\n| multiarch | neueste | `rustdesk/rustdesk-server-s6:latest` |\n| amd64 | neueste | `rustdesk/rustdesk-server-s6:latest-amd64` |\n| i386 | neueste | `rustdesk/rustdesk-server-s6:latest-i386` |\n| arm64v8 | neueste | `rustdesk/rustdesk-server-s6:latest-arm64v8` |\n| armv7 | neueste | `rustdesk/rustdesk-server-s6:latest-armv7` |\n| multiarch | 2 | `rustdesk/rustdesk-server-s6:2` |\n| amd64 | 2 | `rustdesk/rustdesk-server-s6:2-amd64` |\n| i386 | 2 | `rustdesk/rustdesk-server-s6:2-i386` |\n| arm64v8 | 2 | `rustdesk/rustdesk-server-s6:2-arm64v8` |\n| armv7 | 2 | `rustdesk/rustdesk-server-s6:2-armv7` |\n| multiarch | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0` |\n| amd64 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-amd64` |\n| i386 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-i386` |\n| arm64v8 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-arm64v8` |\n| armv7 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-armv7` |\n\nEs wird dringend empfohlen, das Image `multiarch` entweder mit dem Tag `major version` oder `latest` zu verwenden.\n\nDas S6-Overlay fungiert als Supervisor und hält beide Prozesse am Laufen, sodass bei diesem Image keine zwei separaten Container benötigt werden.\n\nSie können diese Images direkt mit `docker run` mit diesem Befehl starten:\n\n```bash\ndocker run --name rustdesk-server \\ \n  --net=host \\\n  -e \"RELAY=rustdeskrelay.example.com\" \\\n  -e \"ENCRYPTED_ONLY=1\" \\\n  -v \"$PWD/data:/data\" -d rustdesk/rustdesk-server-s6:latest\n```\n\noder ohne `--net=host`, aber die P2P-Direktverbindung kann dann nicht funktionieren.\n\n```bash\ndocker run --name rustdesk-server \\\n  -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \\\n  -p 21117:21117 -p 21118:21118 -p 21119:21119 \\\n  -e \"RELAY=rustdeskrelay.example.com\" \\\n  -e \"ENCRYPTED_ONLY=1\" \\\n  -v \"$PWD/data:/data\" -d rustdesk/rustdesk-server-s6:latest\n```\n\nOder Sie können eine Docker Compose-Datei verwenden:\n\n```yaml\nversion: '3'\n\nservices:\n  rustdesk-server:\n    container_name: rustdesk-server\n    ports:\n      - 21115:21115\n      - 21116:21116\n      - 21116:21116/udp\n      - 21117:21117\n      - 21118:21118\n      - 21119:21119\n    image: rustdesk/rustdesk-server-s6:latest\n    environment:\n      - \"RELAY=rustdesk.example.com:21117\"\n      - \"ENCRYPTED_ONLY=1\"\n    volumes:\n      - ./data:/data\n    restart: unless-stopped\n```\n\nFür dieses Container-Image können Sie diese Umgebungsvariablen verwenden, **zusätzlich** zu den im Abschnitt **Umgebungsvariablen** angegebenen Variablen:\n\n| Variable | optional | Beschreibung |\n| --- | --- | --- |\n| RELAY | nein | IP-Adresse/DNS-Name des Rechners, auf dem dieser Container läuft |\n| ENCRYPTED_ONLY | ja | Wenn auf **1** gesetzt, wird eine unverschlüsselte Verbindung nicht akzeptiert |\n| KEY_PUB | ja | Öffentlicher Teil des Schlüsselpaares |\n| KEY_PRIV | ja | Privater Teil des Schlüsselpaares |\n\n### Verwaltung von Geheimnissen in S6-Overlay-basierten Images\n\nSie können das Schlüsselpaar natürlich in einem Docker-Volume aufbewahren, aber empfehlenswert ist, die Schlüssel nicht in das Dateisystem zu schreiben.\n\nBeim 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.\nDann wird die Gültigkeit des Schlüsselpaares überprüft: Wenn öffentlicher und privater Schlüssel nicht übereinstimmen, wird der Container angehalten.\nWenn Sie keine Schlüssel angeben, erzeugt `hbbs` einen für Sie und legt ihn am Standardspeicherort ab.\n\n#### Umgebungsvariablen zum Speichern des Schlüsselpaars verwenden\n\nSie können Docker-Umgebungsvariablen verwenden, um die Schlüssel zu speichern. Folgen Sie einfach diesen Beispielen:\n\n```bash\ndocker run --name rustdesk-server \\ \n  --net=host \\\n  -e \"RELAY=rustdeskrelay.example.com\" \\\n  -e \"ENCRYPTED_ONLY=1\" \\\n  -e \"DB_URL=/db/db_v2.sqlite3\" \\\n  -e \"KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==\" \\\n  -e \"KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=\" \\\n  -v \"$PWD/db:/db\" -d rustdesk/rustdesk-server-s6:latest\n```\n\n```yaml\nversion: '3'\n\nservices:\n  rustdesk-server:\n    container_name: rustdesk-server\n    ports:\n      - 21115:21115\n      - 21116:21116\n      - 21116:21116/udp\n      - 21117:21117\n      - 21118:21118\n      - 21119:21119\n    image: rustdesk/rustdesk-server-s6:latest\n    environment:\n      - \"RELAY=rustdesk.example.com:21117\"\n      - \"ENCRYPTED_ONLY=1\"\n      - \"DB_URL=/db/db_v2.sqlite3\"\n      - \"KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==\"\n      - \"KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=\"\n    volumes:\n      - ./db:/db\n    restart: unless-stopped\n```\n\n#### Docker-Geheimnisse zum Speichern des Schlüsselpaars verwenden\n\nSie können alternativ auch Docker-Geheimnisse verwenden, um die Schlüssel zu speichern.\nDies ist nützlich, wenn Sie **Docker Compose** oder **Docker Swarm** verwenden.\nFolgen Sie einfach diesem Beispiel:\n\n```bash\ncat secrets/id_ed25519.pub | docker secret create key_pub -\ncat secrets/id_ed25519 | docker secret create key_priv -\ndocker service create --name rustdesk-server \\\n  --secret key_priv --secret key_pub \\\n  --net=host \\\n  -e \"RELAY=rustdeskrelay.example.com\" \\\n  -e \"ENCRYPTED_ONLY=1\" \\\n  -e \"DB_URL=/db/db_v2.sqlite3\" \\\n  --mount \"type=bind,source=$PWD/db,destination=/db\" \\\n  rustdesk/rustdesk-server-s6:latest\n```\n\n```yaml\nversion: '3'\n\nservices:\n  rustdesk-server:\n    container_name: rustdesk-server\n    ports:\n      - 21115:21115\n      - 21116:21116\n      - 21116:21116/udp\n      - 21117:21117\n      - 21118:21118\n      - 21119:21119\n    image: rustdesk/rustdesk-server-s6:latest\n    environment:\n      - \"RELAY=rustdesk.example.com:21117\"\n      - \"ENCRYPTED_ONLY=1\"\n      - \"DB_URL=/db/db_v2.sqlite3\"\n    volumes:\n      - ./db:/db\n    restart: unless-stopped\n    secrets:\n      - key_pub\n      - key_priv\n\nsecrets:\n  key_pub:\n    file: secrets/id_ed25519.pub\n  key_priv:\n    file: secrets/id_ed25519      \n```\n\n## Ein Schlüsselpaar erstellen\n\nFü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.\n\nMit diesem Befehl können Sie ein Schlüsselpaar erzeugen:\n\n```bash\n/usr/bin/rustdesk-utils genkeypair\n```\n\nWenn Sie das Paket `rustdesk-utils` nicht auf Ihrem System installiert haben (oder dies nicht wollen), können Sie den gleichen Befehl mit Docker aufrufen:\n\n```bash\ndocker run --rm --entrypoint /usr/bin/rustdesk-utils  rustdesk/rustdesk-server-s6:latest genkeypair\n```\n\nDie Ausgabe sieht dann etwa so aus:\n\n```text\nPublic Key:  8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=\nSecret Key:  egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==\n```\n\n## Debian-Pakete\n\nFü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.\nDiese Pakete sind für die folgenden Distributionen gedacht:\n\n- Ubuntu 22.04 LTS\n- Ubuntu 20.04 LTS\n- Ubuntu 18.04 LTS\n- Debian 11 Bullseye\n- Debian 10 Buster\n\n## Umgebungsvariablen\n\nhbbs und hbbr können mit diesen Umgebungsvariablen konfiguriert werden.\nSie können die Variablen wie üblich angeben oder eine `.env`-Datei verwenden.\n\n| Variable | Binärdatei | Beschreibung |\n| --- | --- | --- |\n| ALWAYS_USE_RELAY | hbbs | Wenn auf **Y** gesetzt, wird eine direkte Verbindung nicht zugelassen. |\n| DB_URL | hbbs | Pfad für die Datenbankdatei |\n| DOWNGRADE_START_CHECK | hbbr | Verzögerung (in Sekunden) vor der Downgrade-Prüfung |\n| DOWNGRADE_THRESHOLD | hbbr | Schwellenwert der Downgrade-Prüfung (Bit/ms)) |\n| KEY | hbbs/hbbr | Wenn gesetzt, wird die Verwendung eines bestimmten Schlüssels erzwungen. Wenn auf **_** gesetzt, wird die Verwendung eines beliebigen Schlüssels erzwungen. |\n| LIMIT_SPEED | hbbr | Höchstgeschwindigkeit (in Mb/s) |\n| PORT | hbbs/hbbr | Lauschender Port (21116 für hbbs - 21117 für hbbr) |\n| RELAY_SERVERS | hbbs | IP-Adresse/DNS-Name der Rechner, auf denen hbbr läuft (durch Komma getrennt) |\n| RUST_LOG | all | Debug-Level einstellen (error\\|warn\\|info\\|debug\\|trace) |\n| SINGLE_BANDWIDTH | hbbr | Maximale Bandbreite für eine einzelne Verbindung (in Mb/s) |\n| TOTAL_BANDWIDTH | hbbr | Maximale Gesamtbandbreite (in Mb/s) |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustdesk%2Frustdesk-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frustdesk%2Frustdesk-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustdesk%2Frustdesk-server/lists"}