RustDesk
Docker app from junkerderprovinz's Repository
Overview
Readme
View on GitHub
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.
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.
Table of Contents
- What it looks like
- What it does
- How it compares
- Getting started
- Connecting your devices
- Changing a device's ID
- Moving from another RustDesk server
- What is inside
- How AI is used here
- Support this project
1. What it looks like
Every device that registered with your server, with its system, when it was last online and one click to connect.
The address book a user sees in every RustDesk client they log in to.
2. What it does
hbbshands out IDs and introduces your devices to each other.hbbrrelays 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
hbbs,hbbrandrustdesk-utilsbuilt from lejianwen/rustdesk-server, a fork of rustdesk-server that talks to the API, with the patches in patches/ applied.- lejianwen/rustdesk-api for the console, the accounts, the address book and the web client.
- s6-overlay to run the three.
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.
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
Related apps
Explore more like this
Explore allLinks
Details
junkerderprovinz/rustdesk:latestRuntime arguments
- Web UI
http://[IP]:[PORT:21114]/_admin/- Network
bridge- Shell
sh- Privileged
- false
- Extra Params
--restart=unless-stopped
Template configuration
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
Lets clients find out what kind of NAT they are behind.
- Target
- 21115
- Default
- 21115
- Value
- 21115
ID server and hole punching. Forward it if devices outside your network connect.
- Target
- 21116
- Default
- 21116
- Value
- 21116
ID server registration and hole punching over UDP.
- Target
- 21116
- Default
- 21116
- Value
- 21116
Relay for sessions whose devices cannot reach each other directly.
- Target
- 21117
- Default
- 21117
- Value
- 21117
ID server over websocket, used by the web client.
- Target
- 21118
- Default
- 21118
- Value
- 21118
Relay over websocket, used by the web client.
- Target
- 21119
- Default
- 21119
- Value
- 21119
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
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
Name or IP and port of the relay as clients reach it, e.g. rustdesk.example.com:21117.
- Target
- RELAY
The ID server address the console hands to clients, e.g. rustdesk.example.com:21116.
- Target
- RUSTDESK_API_RUSTDESK_ID_SERVER
The relay address the console hands to clients, e.g. rustdesk.example.com:21117.
- Target
- RUSTDESK_API_RUSTDESK_RELAY_SERVER
The console's address as clients reach it, e.g. http://rustdesk.example.com:21114.
- Target
- RUSTDESK_API_RUSTDESK_API_SERVER
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
Y lets only clients that are logged in to the console start a session.
- Target
- MUST_LOGIN
- Default
- N|Y
- Value
- N
Language of the console's messages.
- Target
- RUSTDESK_API_LANG
- Default
- en|zh-CN|zh-TW|ko|ru|fr|es
- Value
- en
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