Files
selfhosted-apps-docker/rustdesk/readme.md
T
DoTheEvo c201b5b6ca update
2022-11-17 17:37:10 +01:00

4.4 KiB

Rustdesk in docker

guide-by-example

logo

Purpose & Overview

Remote desktop application.

Rustdesk is a young opensource replacement for TeamViewer or Anydesk. The major thing is that it does NAT punching, and lets you host all the infrastructure for it to function.

Written in rust(gasp), with Dart and Flutter framework for client side.


interface-pic

Files and directory structure

/home/
└── ~/
    └── docker/
        └── rustdesk/
            ├── data/
            ├── .env
            └── docker-compose.yml
  • data/ - servers persistent data, contains sqlite database and the api key
  • .env - a file containing environment variables for docker compose
  • docker-compose.yml - a docker compose file, telling docker how to run the containers

You only need to provide the two files.
The directory is created by docker compose on the first run.

docker-compose

Using an edited version of S6-overlay based compose.
It's a simpler, single container approach, without the noise of hbbs/hbbr, it also has health check implemented.

There is also no network section since its fine to run this completely isolated.

docker-compose.yml

services:
  rustdesk:
    image: rustdesk/rustdesk-server-s6:latest
    container_name: rustdesk
    hostname: rustdesk
    restart: unless-stopped
    env_file: .env
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21117:21117
      - 21118:21118
      - 21119:21119
    volumes:
      - ./data:/data

.env

# GENERAL
MY_DOMAIN=example.com
DOCKER_MY_NETWORK=caddy_net
TZ=Europe/Bratislava

# RUSTDESK
RELAY=rust.example.com:21117
ENCRYPTED_ONLY=0

Port forwarding

the ports 21115 - 21119 needs to be open for tcp
the port 21116 is tcp and udp


interface-pic

The usage on clients

  • download and install the client apps from the official site
  • three dots near ID > ID/Relay Server > ID Server: rust.example.com > OK
  • the green dot at the bottom should stay green saying "ready"
  • done
  • in the docker server logs you should see machines public IP and ID code it was given

Encrypted use

settings-pic

For encrypted communication and to prevent undesirables access to the server

  • the encryption public key is on the docker host:
    ~/docker/rustdesk/data/id_ed25519.pub
  • you can manually add it to any client application
    three dots near ID > ID/Relay Server > Key: 3AVva64bn1ea2vsDuOuQH3i8+2M=
  • to only allow clients with the key on server:
    in the env_file set ENCRYPTED_ONLY=1 and down and up the copose.

On windows one can deploy client with these settings by renaming the installation file to: rustdesk-host=<host-ip-or-name>,key=<public-key-string>.exe

example: rustdesk-host=rust.example.com,key=3AVva64bn1ea2vsDuOuQH3i8+2M=.exe

If by chance the key contains symbols not usable in windows filenames, down the container, delete the files id_ed25519 and id_ed25519.pub, up the container

Trouble shooting

From what I read, most client side issues are with two differently set rustdesk clients running on the same machine.

Uninstall/remove all all, plus:

  • C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk
  • %AppData%\RustDesk

restart and do fresh client install

Update

Manual image update:

  • docker-compose pull
  • docker-compose up -d
  • docker image prune

Backup and restore

Backup

Using borg that makes daily snapshot of the entire directory.

Restore

  • down the bookstack containers docker-compose down
  • delete the entire bookstack directory
  • from the backup copy back the bookstack directory
  • start the containers docker-compose up -d