RustDesk

RustDesk

Docker app from junkerderprovinz's Repository

Overview

Your own RustDesk server: the ID server and the relay, with a web console, user accounts, an address book that follows you to every client and a web client in the browser. Devices can also change their ID, which the stock open-source server refuses. What you get: • Web console at /_admin/ on port 21114: devices, users, groups, address books, connection and file transfer logs • Log in once in the RustDesk client and your address book is on every device • Web client at /webclient/ for a session from any browser • "Change ID" in the client works, for the machine that registered the old ID and a free new ID • Encrypted connections only, by default Notes: • Fill in the four address fields with the name or IP your clients reach this server under. • The first start creates the key pair in the data folder and prints the console's admin password in the container log (search for "Admin Password"). • Moving from another RustDesk server: copy id_ed25519, id_ed25519.pub and db_v2.sqlite3 into the data folder before the first start, and every device keeps its ID. • Clients need the ID server (port 21116), the relay (21117), the API server (http://...:21114) and the key from id_ed25519.pub. Source on GitHub: https://github.com/junkerderprovinz/rustdesk

RustDesk

Build  Lint  Docker Pulls  Image Size  Arch  rustdesk-api  License: AGPL-3.0


Your own RustDesk server for Unraid, in one container. The ID server and the relay come with a web console, user accounts, an address book that follows you to every client and a web client in the browser. Devices can also change their ID, which the stock open-source server refuses. The buttons under the first row lead to RustDesk's own clients.

Install from Unraid's Community Applications   Install from the MOS Hub   Install from the ZimaOS and CasaOS store   Install from the umbrelOS community app store

Download the docker-compose file   Download the source archive


Download for WindowsDownload for Windows on ARM   Download for macOS on Intel or Apple silicon   Download for LinuxDownload for Linux on ARM


Get it on F-Droid   Download the Android app   Download on the App Store


A one-knight job: I build it, keep it running, work through the issues and add what people ask for, until nothing is missing. It is free, with no accounts, no telemetry, no ads and no paid tier. No asterisk anywhere. Nothing readable ever leaves your own walls. Forged on evenings and weekends, with heart and stubbornness.

If it has earned a place on your server or computer, toss a coin to your knight: it helps cover the costs and keeps the project alive. It also makes this knight's heart beat a little faster. Three ways below, whichever suits you.

Buy me a coffee   PayPal   Donate with crypto


Table of Contents

  1. What it looks like
  2. What it does
  3. How it compares
  4. Getting started
  5. Connecting your devices
  6. Changing a device's ID
  7. Moving from another RustDesk server
  8. What is inside
  9. How AI is used here
  10. Support this project

1. What it looks like

The devices page of the web console in a browser window at nas.local:21114, listing five devices
Every device that registered with your server, with its system, when it was last online and one click to connect.

The address book page of the web console, with four devices in My Address Book
The address book a user sees in every RustDesk client they log in to.


2. What it does

  • hbbs hands out IDs and introduces your devices to each other. hbbr relays the session when two devices cannot reach each other directly. By default the server accepts encrypted connections only.
  • The web console on port 21114, at /_admin/, lists devices, users, groups and address books, keeps the connection and file transfer logs, and holds the server's settings.
  • You log in once in the RustDesk client and your address book is there on every device you use. Your own server keeps it.
  • The web client at /webclient/ opens a session from a browser on a machine without RustDesk, and you can share access with a guest through it.
  • A device can change its ID in the client. The server accepts the change when it comes from the same machine and the new ID is free.
  • On Unraid it is one container with two volumes, and every setting is in the template.

3. How it compares

This image ich777 AIO Official server RustDesk Server Pro
ID server and relay ✅ ✅ ✅ ✅
Web console ✅ ❌ ❌ ✅
Accounts and shared address book ✅ ❌ ❌ ✅
Web client ✅ ❌ ❌ ✅
Change a device's ID ✅ ❌ ❌ ✅
Multi-arch amd64 + arm64 amd64 amd64 + arm64 + armv7 amd64 + arm64 + armv7
Licence AGPL-3.0 AGPL-3.0 AGPL-3.0 proprietary
Price free free free paid subscription

The official server is rustdesk/rustdesk-server; ich777's all-in-one image is the one in Unraid's Community Applications.


4. Getting started

Unraid: install RustDesk from Community Applications and fill in the address your clients use to reach the server (a DNS name or IP) in the four address fields.

Docker Compose: take compose.yaml, replace rustdesk.example.com with your server's address and run docker compose up -d.

  • Synology: in Container Manager, create a project from the file (DSM 7.2 or newer).
  • Proxmox: run it in a VM or an LXC container that has Docker.
  • MOS: install RustDesk from the MOS Hub and fill in the four address fields.
  • ZimaOS and CasaOS: add the community store and install RustDesk with Custom Installation, where you fill in the four addresses.
  • umbrelOS: add the community app store and install RustDesk from it. The addresses point to your Umbrel by itself, and the API server for the clients is http://umbrel.local:35135.

On the first start the server creates its key pair in /data and the console creates the account admin and prints its password in the container log:

docker logs rustdesk 2>&1 | grep -i password

Log in at http://<server>:21114/_admin/, change the password, and the server is ready. If the line has scrolled away, set a new one:

docker exec rustdesk /app/apimain reset-admin-pwd <new password>

Ports: 21114 (console and web client), 21115 (NAT test), 21116 TCP and UDP (ID server), 21117 (relay), 21118 and 21119 (websocket variants for the web client). Forward 21115 to 21117 if devices outside your network should connect; the console does not need to be reachable from outside.


5. Connecting your devices

Get the client from RustDesk's releases, F-Droid or the App Store, or with the buttons at the top. Then open Settings → Network → ID/Relay server and enter:

Field Value
ID server <server>:21116
Relay server <server>:21117
API server http://<server>:21114
Key the content of /data/id_ed25519.pub

With the API server set, the client shows a login. Log in with a user from the console and your address book appears; it syncs to every device where you log in with the same user.


6. Changing a device's ID

The client's Change ID works against this server. The server renames the device only when the request comes from the machine that registered the old ID, and only to an ID that is free and follows RustDesk's format (6 to 16 characters, starting with a letter). The stock open-source server answers the same request with "not supported".


7. Moving from another RustDesk server

Your devices keep their IDs and trust the new server when it uses the same key pair. Stop the old container and copy id_ed25519, id_ed25519.pub and db_v2.sqlite3 from its data folder into this container's /data before the first start. The key the clients use stays the same, so nothing has to change on the devices.


8. What is inside

The newer web client that older rustdesk-api images shipped as /webclient2 was removed upstream after a DMCA notice and is not included.


9. How AI is used here

One knight builds this, and AI is one of the tools I work with, the same way I work with an editor or a compiler. It helps me write code and documentation and it checks my work, and that saves me a good many evenings. It does not make the decisions, though. I read and understand everything before it ships, and if something here breaks, that is on me and not on the tool.

You do not have to take my word for it. The code is open and every release note is written by hand. The issue tracker shows how problems actually get handled, including the ones I got wrong the first time. If you find something that is not right, open an issue and I will look at it.


10. Support this project

Bugs, ideas or feature requests? Please open a GitHub issue.

A one-knight job: I build it, keep it running, work through the issues and add what people ask for, until nothing is missing. It is free, with no accounts, no telemetry, no ads and no paid tier. No asterisk anywhere. Nothing readable ever leaves your own walls. Forged on evenings and weekends, with heart and stubbornness.

If it has earned a place on your server or computer, toss a coin to your knight: it helps cover the costs and keeps the project alive. It also makes this knight's heart beat a little faster. Three ways below, whichever suits you.

Buy me a coffee   PayPal   Donate with crypto


The packaging in this repository is AGPL-3.0. RustDesk server, rustdesk-api and s6-overlay keep their own licences; see NOTICE. RustDesk is a trademark of its owners; this project is not affiliated with them.

Download Statistics

674
Total Downloads

Related apps

Details

Repository
junkerderprovinz/rustdesk:latest
Last Updated2026-10-25
First Seen2026-10-26

Runtime arguments

Web UI
http://[IP]:[PORT:21114]/_admin/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--restart=unless-stopped

Template configuration

Console and web clientPorttcp

Web console (/_admin/), the API the clients log in to, and the web client (/webclient/). Only needed inside your network unless you want to log in from outside.

Target
21114
Default
21114
Value
21114
NAT testPorttcp

Lets clients find out what kind of NAT they are behind.

Target
21115
Default
21115
Value
21115
ID server (TCP)Porttcp

ID server and hole punching. Forward it if devices outside your network connect.

Target
21116
Default
21116
Value
21116
ID server (UDP)Portudp

ID server registration and hole punching over UDP.

Target
21116
Default
21116
Value
21116
RelayPorttcp

Relay for sessions whose devices cannot reach each other directly.

Target
21117
Default
21117
Value
21117
ID server (websocket)Porttcp

ID server over websocket, used by the web client.

Target
21118
Default
21118
Value
21118
Relay (websocket)Porttcp

Relay over websocket, used by the web client.

Target
21119
Default
21119
Value
21119
Server data (/data)Pathrw

Key pair (id_ed25519, id_ed25519.pub) and the device database. Keep it: a new key pair means every client has to be set up again.

Target
/data
Default
/mnt/user/appdata/rustdesk
Value
/mnt/user/appdata/rustdesk
Console data (/app/data)Pathrw

Users, groups, address books and logs of the web console.

Target
/app/data
Default
/mnt/user/appdata/rustdesk/api
Value
/mnt/user/appdata/rustdesk/api
Relay address (RELAY)Variable

Name or IP and port of the relay as clients reach it, e.g. rustdesk.example.com:21117.

Target
RELAY
ID server for clientsVariable

The ID server address the console hands to clients, e.g. rustdesk.example.com:21116.

Target
RUSTDESK_API_RUSTDESK_ID_SERVER
Relay for clientsVariable

The relay address the console hands to clients, e.g. rustdesk.example.com:21117.

Target
RUSTDESK_API_RUSTDESK_RELAY_SERVER
API server for clientsVariable

The console's address as clients reach it, e.g. http://rustdesk.example.com:21114.

Target
RUSTDESK_API_RUSTDESK_API_SERVER
Encrypted connections only (ENCRYPTED_ONLY)Variable

1 accepts only clients that know the server's key. 0 also lets clients without the key connect.

Target
ENCRYPTED_ONLY
Default
1|0
Value
1
Login required (MUST_LOGIN)Variable

Y lets only clients that are logged in to the console start a session.

Target
MUST_LOGIN
Default
N|Y
Value
N
Console language (RUSTDESK_API_LANG)Variable

Language of the console's messages.

Target
RUSTDESK_API_LANG
Default
en|zh-CN|zh-TW|ko|ru|fr|es
Value
en
Timezone (TZ)Variable

Container timezone for log timestamps.

Target
TZ
Default
Europe/Vienna|Africa/Abidjan|Africa/Accra|Africa/Addis_Ababa|Africa/Algiers|Africa/Asmera|Africa/Bamako|Africa/Bangui|Africa/Banjul|Africa/Bissau|Africa/Blantyre|Africa/Brazzaville|Africa/Bujumbura|Africa/Cairo|Africa/Casablanca|Africa/Ceuta|Africa/Conakry|Africa/Dakar|Africa/Dar_es_Salaam|Africa/Djibouti|Africa/Douala|Africa/El_Aaiun|Africa/Freetown|Africa/Gaborone|Africa/Harare|Africa/Johannesburg|Africa/Juba|Africa/Kampala|Africa/Khartoum|Africa/Kigali|Africa/Kinshasa|Africa/Lagos|Africa/Libreville|Africa/Lome|Africa/Luanda|Africa/Lubumbashi|Africa/Lusaka|Africa/Malabo|Africa/Maputo|Africa/Maseru|Africa/Mbabane|Africa/Mogadishu|Africa/Monrovia|Africa/Nairobi|Africa/Ndjamena|Africa/Niamey|Africa/Nouakchott|Africa/Ouagadougou|Africa/Porto-Novo|Africa/Sao_Tome|Africa/Tripoli|Africa/Tunis|Africa/Windhoek|America/Adak|America/Anchorage|America/Anguilla|America/Antigua|America/Araguaina|America/Argentina/La_Rioja|America/Argentina/Rio_Gallegos|America/Argentina/Salta|America/Argentina/San_Juan|America/Argentina/San_Luis|America/Argentina/Tucuman|America/Argentina/Ushuaia|America/Aruba|America/Asuncion|America/Bahia|America/Bahia_Banderas|America/Barbados|America/Belem|America/Belize|America/Blanc-Sablon|America/Boa_Vista|America/Bogota|America/Boise|America/Buenos_Aires|America/Cambridge_Bay|America/Campo_Grande|America/Cancun|America/Caracas|America/Catamarca|America/Cayenne|America/Cayman|America/Chicago|America/Chihuahua|America/Ciudad_Juarez|America/Coral_Harbour|America/Cordoba|America/Costa_Rica|America/Coyhaique|America/Creston|America/Cuiaba|America/Curacao|America/Danmarkshavn|America/Dawson|America/Dawson_Creek|America/Denver|America/Detroit|America/Dominica|America/Edmonton|America/Eirunepe|America/El_Salvador|America/Fort_Nelson|America/Fortaleza|America/Glace_Bay|America/Godthab|America/Goose_Bay|America/Grand_Turk|America/Grenada|America/Guadeloupe|America/Guatemala|America/Guayaquil|America/Guyana|America/Halifax|America/Havana|America/Hermosillo|America/Indiana/Knox|America/Indiana/Marengo|America/Indiana/Petersburg|America/Indiana/Tell_City|America/Indiana/Vevay|America/Indiana/Vincennes|America/Indiana/Winamac|America/Indianapolis|America/Inuvik|America/Iqaluit|America/Jamaica|America/Jujuy|America/Juneau|America/Kentucky/Monticello|America/Kralendijk|America/La_Paz|America/Lima|America/Los_Angeles|America/Louisville|America/Lower_Princes|America/Maceio|America/Managua|America/Manaus|America/Marigot|America/Martinique|America/Matamoros|America/Mazatlan|America/Mendoza|America/Menominee|America/Merida|America/Metlakatla|America/Mexico_City|America/Miquelon|America/Moncton|America/Monterrey|America/Montevideo|America/Montserrat|America/Nassau|America/New_York|America/Nome|America/Noronha|America/North_Dakota/Beulah|America/North_Dakota/Center|America/North_Dakota/New_Salem|America/Ojinaga|America/Panama|America/Paramaribo|America/Phoenix|America/Port-au-Prince|America/Port_of_Spain|America/Porto_Velho|America/Puerto_Rico|America/Punta_Arenas|America/Rankin_Inlet|America/Recife|America/Regina|America/Resolute|America/Rio_Branco|America/Santarem|America/Santiago|America/Santo_Domingo|America/Sao_Paulo|America/Scoresbysund|America/Sitka|America/St_Barthelemy|America/St_Johns|America/St_Kitts|America/St_Lucia|America/St_Thomas|America/St_Vincent|America/Swift_Current|America/Tegucigalpa|America/Thule|America/Tijuana|America/Toronto|America/Tortola|America/Vancouver|America/Whitehorse|America/Winnipeg|America/Yakutat|Antarctica/Casey|Antarctica/Davis|Antarctica/DumontDUrville|Antarctica/Macquarie|Antarctica/Mawson|Antarctica/McMurdo|Antarctica/Palmer|Antarctica/Rothera|Antarctica/Syowa|Antarctica/Troll|Antarctica/Vostok|Arctic/Longyearbyen|Asia/Aden|Asia/Almaty|Asia/Amman|Asia/Anadyr|Asia/Aqtau|Asia/Aqtobe|Asia/Ashgabat|Asia/Atyrau|Asia/Baghdad|Asia/Bahrain|Asia/Baku|Asia/Bangkok|Asia/Barnaul|Asia/Beirut|Asia/Bishkek|Asia/Brunei|Asia/Calcutta|Asia/Chita|Asia/Colombo|Asia/Damascus|Asia/Dhaka|Asia/Dili|Asia/Dubai|Asia/Dushanbe|Asia/Famagusta|Asia/Gaza|Asia/Hebron|Asia/Hong_Kong|Asia/Hovd|Asia/Irkutsk|Asia/Jakarta|Asia/Jayapura|Asia/Jerusalem|Asia/Kabul|Asia/Kamchatka|Asia/Karachi|Asia/Katmandu|Asia/Khandyga|Asia/Krasnoyarsk|Asia/Kuala_Lumpur|Asia/Kuching|Asia/Kuwait|Asia/Macau|Asia/Magadan|Asia/Makassar|Asia/Manila|Asia/Muscat|Asia/Nicosia|Asia/Novokuznetsk|Asia/Novosibirsk|Asia/Omsk|Asia/Oral|Asia/Phnom_Penh|Asia/Pontianak|Asia/Pyongyang|Asia/Qatar|Asia/Qostanay|Asia/Qyzylorda|Asia/Rangoon|Asia/Riyadh|Asia/Saigon|Asia/Sakhalin|Asia/Samarkand|Asia/Seoul|Asia/Shanghai|Asia/Singapore|Asia/Srednekolymsk|Asia/Taipei|Asia/Tashkent|Asia/Tbilisi|Asia/Tehran|Asia/Thimphu|Asia/Tokyo|Asia/Tomsk|Asia/Ulaanbaatar|Asia/Urumqi|Asia/Ust-Nera|Asia/Vientiane|Asia/Vladivostok|Asia/Yakutsk|Asia/Yekaterinburg|Asia/Yerevan|Atlantic/Azores|Atlantic/Bermuda|Atlantic/Canary|Atlantic/Cape_Verde|Atlantic/Faeroe|Atlantic/Madeira|Atlantic/Reykjavik|Atlantic/South_Georgia|Atlantic/St_Helena|Atlantic/Stanley|Australia/Adelaide|Australia/Brisbane|Australia/Broken_Hill|Australia/Darwin|Australia/Eucla|Australia/Hobart|Australia/Lindeman|Australia/Lord_Howe|Australia/Melbourne|Australia/Perth|Australia/Sydney|Europe/Amsterdam|Europe/Andorra|Europe/Astrakhan|Europe/Athens|Europe/Belgrade|Europe/Berlin|Europe/Bratislava|Europe/Brussels|Europe/Bucharest|Europe/Budapest|Europe/Busingen|Europe/Chisinau|Europe/Copenhagen|Europe/Dublin|Europe/Gibraltar|Europe/Guernsey|Europe/Helsinki|Europe/Isle_of_Man|Europe/Istanbul|Europe/Jersey|Europe/Kaliningrad|Europe/Kiev|Europe/Kirov|Europe/Lisbon|Europe/Ljubljana|Europe/London|Europe/Luxembourg|Europe/Madrid|Europe/Malta|Europe/Mariehamn|Europe/Minsk|Europe/Monaco|Europe/Moscow|Europe/Oslo|Europe/Paris|Europe/Podgorica|Europe/Prague|Europe/Riga|Europe/Rome|Europe/Samara|Europe/San_Marino|Europe/Sarajevo|Europe/Saratov|Europe/Simferopol|Europe/Skopje|Europe/Sofia|Europe/Stockholm|Europe/Tallinn|Europe/Tirane|Europe/Ulyanovsk|Europe/Vaduz|Europe/Vatican|Europe/Vilnius|Europe/Volgograd|Europe/Warsaw|Europe/Zagreb|Europe/Zurich|Indian/Antananarivo|Indian/Chagos|Indian/Christmas|Indian/Cocos|Indian/Comoro|Indian/Kerguelen|Indian/Mahe|Indian/Maldives|Indian/Mauritius|Indian/Mayotte|Indian/Reunion|Pacific/Apia|Pacific/Auckland|Pacific/Bougainville|Pacific/Chatham|Pacific/Easter|Pacific/Efate|Pacific/Enderbury|Pacific/Fakaofo|Pacific/Fiji|Pacific/Funafuti|Pacific/Galapagos|Pacific/Gambier|Pacific/Guadalcanal|Pacific/Guam|Pacific/Honolulu|Pacific/Kiritimati|Pacific/Kosrae|Pacific/Kwajalein|Pacific/Majuro|Pacific/Marquesas|Pacific/Midway|Pacific/Nauru|Pacific/Niue|Pacific/Norfolk|Pacific/Noumea|Pacific/Pago_Pago|Pacific/Palau|Pacific/Pitcairn|Pacific/Ponape|Pacific/Port_Moresby|Pacific/Rarotonga|Pacific/Saipan|Pacific/Tahiti|Pacific/Tarawa|Pacific/Tongatapu|Pacific/Truk|Pacific/Wake|Pacific/Wallis
Value
Europe/Vienna