No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-02 19:47:40 +00:00
.idea feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
traefik-patch feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
.env.example feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
.gitignore feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
AGENTS.md feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
CLAUDE.md feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
docker-compose.yaml feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
LICENSE chore(license): add AGPL-3.0-or-later license and copyright notice 2026-09-02 21:32:56 +02:00
Projekt.md feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00
README.md chore(license): add AGPL-3.0-or-later license and copyright notice 2026-09-02 21:32:56 +02:00
STATUS.md feat(rustdesk): add generic Docker-based RustDesk server setup with Traefik 2026-07-12 16:40:48 +02:00

RustDesk Self-Hosted (Docker + Traefik)

Generisches, .env-gesteuertes Setup für hbbs/hbbr als Docker-Container hinter einem bestehenden Traefik-Stack — kein WireGuard, kein separater Tunnel. Ein Repo, beliebig oft auf verschiedenen Servern einsetzbar, nur .env pro Ziel anpassen (z. B. desk.web-seo-consulting.eu oder desk.schicker-gruppe.de).

Voraussetzung

Ein Traefik-Stack (v3.x) läuft bereits auf dem Zielserver mit:

  • Docker-Provider (exposedByDefault: false, Netzwerk traefik_proxy_network oder äquivalent)
  • File-Provider für die statische entryPoints-Erweiterung
  • ports: mit mode: host für die eigenen EntryPoints

Deployment

  1. Repo auf den Zielserver kopieren (oder git clone, da keine Secrets im Repo liegen — Key und .env werden erst lokal auf dem Server erzeugt).
  2. .env aus der Vorlage erstellen und anpassen:
    cp .env.example .env
    # RUSTDESK_DOMAIN, COMPOSE_PROJECT_NAME, PROXY_NETWORK setzen
    
  3. Traefik-Patches einfügen (siehe traefik-patch/):
    • 01-docker-compose-ports.snippet.yaml → Traefik-docker-compose.yaml unter ports:
    • 02-traefik-entrypoints.snippet.yaml → Traefik-configs/traefik.yaml unter entryPoints:
    • Falls von einer älteren Version migriert wird: alte tcp:/udp:-Sektionen im File-Provider (configs/traefik-dynamic.yaml) entfernen, falls vorhanden — würden mit den neuen Docker-Label-Routern kollidieren.
  4. Traefik neu starten (neue entryPoints erfordern Neustart, kein reines Reload):
    cd <traefik-verzeichnis>
    docker compose up -d
    
  5. RustDesk-Container starten:
    docker compose up -d
    docker compose logs -f
    
  6. Öffentlichen Key auslesen (für die Client-Konfiguration) — liegt als Bind-Mount direkt neben der docker-compose.yaml, kein Docker-Volume, kein Suchen unter /var/lib/docker/volumes/ nötig:
    cat ./data/id_ed25519.pub
    
    Absoluter Pfad z. B. bei Checkout unter /home/dockeradmin/docker-stacks/rustdesk/: /home/dockeradmin/docker-stacks/rustdesk/data/id_ed25519.pub
  7. Firewall öffnen: TCP 21115/21116/21117/21118/21119 + UDP 21116.
  8. Client testen: Host = RUSTDESK_DOMAIN + ausgelesener Key, eigene ID sollte grün erscheinen. Sicherheitstest: Verbindung mit falschem/leerem Key muss abgelehnt werden.

Sicherheit

  • -k _ erzwingt die Key-Prüfung in hbbs/hbbr — ohne passenden Key keine Verbindung zum Server (vor Rollout aktiv testen, siehe Projekt.md).
  • data/ (enthält id_ed25519 Private Key + SQLite-DB) und .env sind per .gitignore ausgeschlossen — nie committen.
  • Auf jedem ferngesteuerten Ziel-PC zusätzlich: starkes Permanent-Passwort + 2FA statt "immer erlauben".

Bekannter Trade-off

Traefik als TCP-Proxy vor hbbs verschlechtert die P2P-NAT-Traversal (hbbs sieht nicht die echte Client-IP) — Sessions laufen praktisch immer über den Relay (hbbr) statt direkt. Funktional unproblematisch, siehe Projekt.md.

Mehrere Instanzen auf verschiedenen Servern

Jeder Zielserver bekommt eine eigene Kopie dieses Repos (oder denselben Checkout mit eigener lokaler .env) mit eigenem data/-Verzeichnis, eigenem Key und eigener ID-Datenbank — komplett unabhängig voneinander, auch wenn derselbe Code/Compose-Aufbau verwendet wird.

Lizenz

Copyright (C) 2026 Christian Säum – web-seo-consulting.eu

Dieses Projekt steht unter der GNU Affero General Public License, Version 3 oder (nach deiner Wahl) einer späteren Version (AGPL-3.0-or-later). Der vollständige Lizenztext steht in der Datei LICENSE.

Du darfst die Software nutzen, weitergeben und – auch kommerziell – verkaufen. Gibst du eine veränderte Fassung weiter oder betreibst du sie über ein Netzwerk (z. B. als Dienst), muss deren vollständiger Quellcode ebenfalls unter der AGPL-3.0-or-later verfügbar sein. Der Copyright-Hinweis und die Nennung des ursprünglichen Autors dürfen nicht entfernt werden.

Diese Angabe betrifft nur die in diesem Repository enthaltenen eigenen Dateien (Konfiguration, Skripte, Anpassungen). Eingebundene Fremdsoftware und Container-Images unterliegen weiterhin ihren eigenen Lizenzen.