|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+<p align="center">
|
|
|
2
|
+ <a href="#如何自行建置">自行建置</a> •
|
|
|
3
|
+ <a href="#Docker-映像檔">Docker</a> •
|
|
|
4
|
+ <a href="#基於-S6-overlay-的映象檔">S6-overlay</a> •
|
|
|
5
|
+ <a href="#如何建立金鑰對">金鑰對</a> •
|
|
|
6
|
+ <a href="#deb-套件">Debian</a> •
|
|
|
7
|
+ <a href="#ENV-環境參數">環境參數</a><br>
|
|
|
8
|
+ [<a href="README.md">English</a>] | [<a href="README-DE.md">Deutsch</a>] | [<a href="README-NL.md">Nederlands</a>]<br>
|
|
|
9
|
+</p>
|
|
|
10
|
+
|
|
|
11
|
+# RustDesk Server Program
|
|
|
12
|
+
|
|
|
13
|
+[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
|
|
|
14
|
+
|
|
|
15
|
+[**下載**](https://github.com/rustdesk/rustdesk-server/releases)
|
|
|
16
|
+
|
|
|
17
|
+[**說明文件**](https://rustdesk.com/docs/zh-tw/self-host/)
|
|
|
18
|
+
|
|
|
19
|
+[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
|
|
|
20
|
+
|
|
|
21
|
+自行建置屬於您自己的 RustDesk 伺服器,它是免費的且開源。
|
|
|
22
|
+
|
|
|
23
|
+## 如何自行建置
|
|
|
24
|
+
|
|
|
25
|
+```bash
|
|
|
26
|
+cargo build --release
|
|
|
27
|
+```
|
|
|
28
|
+
|
|
|
29
|
+在 target/release 中會產生三個可執行檔。
|
|
|
30
|
+
|
|
|
31
|
+- hbbs - RustDesk ID/會合伺服器
|
|
|
32
|
+- hbbr - RustDesk 中繼伺服器
|
|
|
33
|
+- rustdesk-utils - RustDesk 命令行工具
|
|
|
34
|
+
|
|
|
35
|
+您可以在 [releases](https://github.com/rustdesk/rustdesk-server/releases) 頁面上找到更新的執行檔。
|
|
|
36
|
+
|
|
|
37
|
+如果您需要額外功能,[RustDesk 專業版伺服器](https://rustdesk.com/pricing.html) 或許更適合您。
|
|
|
38
|
+
|
|
|
39
|
+如果您想開發自己的伺服器,[rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) 可能是一個比這個倉庫更好、更簡單的開始。
|
|
|
40
|
+
|
|
|
41
|
+## Docker 映像檔
|
|
|
42
|
+
|
|
|
43
|
+Docker 映像檔會在每次 GitHub 發布時自動生成並發布。我們有兩種映像檔。
|
|
|
44
|
+
|
|
|
45
|
+### Classic 映像檔
|
|
|
46
|
+
|
|
|
47
|
+這些映像檔是基於 `ubuntu-20.04` 建置的,僅添加了兩個主要的執行檔(`hbbr` 和 `hbbs`)。它們可在 [Docker Hub](https://hub.docker.com/r/rustdesk/rustdesk-server/) 上取得,帶有以下tags:
|
|
|
48
|
+
|
|
|
49
|
+| 架構 | image:tag |
|
|
|
50
|
+| ------- | ----------------------------------------- |
|
|
|
51
|
+| amd64 | `rustdesk/rustdesk-server:latest` |
|
|
|
52
|
+| arm64v8 | `rustdesk/rustdesk-server:latest-arm64v8` |
|
|
|
53
|
+
|
|
|
54
|
+您可以使用以下指令,直接透過 ``docker run`` 來啟動這些映像檔:
|
|
|
55
|
+
|
|
|
56
|
+```bash
|
|
|
57
|
+docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r <relay-server-ip[:port]>
|
|
|
58
|
+docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
|
|
|
59
|
+```
|
|
|
60
|
+
|
|
|
61
|
+或刪去 `--net=host`, 但 P2P 直接連線會無法運作。
|
|
|
62
|
+
|
|
|
63
|
+對於使用 SELinux 的系統,需要將 ``/root`` 替換為 ``/root:z``,以便容器正確運行。或者,也可以通過添加選項 ``--security-opt label=disable`` 完全禁用 SELinux 容器隔離。
|
|
|
64
|
+
|
|
|
65
|
+```bash
|
|
|
66
|
+docker 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 <relay-server-ip[:port]>
|
|
|
67
|
+docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
|
|
|
68
|
+```
|
|
|
69
|
+
|
|
|
70
|
+`relay-server-ip` 參數是執行這些容器的伺服器的 IP 地址(或 DNS 名稱)。如果您為 `hbbr` 使用的端口不是 **21117**,則必須使用 **可選** 的 `port` 參數。
|
|
|
71
|
+
|
|
|
72
|
+您也可以使用 docker-compose 使用這個設定做為範例:
|
|
|
73
|
+
|
|
|
74
|
+```yaml
|
|
|
75
|
+version: '3'
|
|
|
76
|
+
|
|
|
77
|
+networks:
|
|
|
78
|
+ rustdesk-net:
|
|
|
79
|
+ external: false
|
|
|
80
|
+
|
|
|
81
|
+services:
|
|
|
82
|
+ hbbs:
|
|
|
83
|
+ container_name: hbbs
|
|
|
84
|
+ ports:
|
|
|
85
|
+ - 21115:21115
|
|
|
86
|
+ - 21116:21116
|
|
|
87
|
+ - 21116:21116/udp
|
|
|
88
|
+ - 21118:21118
|
|
|
89
|
+ image: rustdesk/rustdesk-server:latest
|
|
|
90
|
+ command: hbbs -r rustdesk.example.com:21117
|
|
|
91
|
+ volumes:
|
|
|
92
|
+ - ./data:/root
|
|
|
93
|
+ networks:
|
|
|
94
|
+ - rustdesk-net
|
|
|
95
|
+ depends_on:
|
|
|
96
|
+ - hbbr
|
|
|
97
|
+ restart: unless-stopped
|
|
|
98
|
+
|
|
|
99
|
+ hbbr:
|
|
|
100
|
+ container_name: hbbr
|
|
|
101
|
+ ports:
|
|
|
102
|
+ - 21117:21117
|
|
|
103
|
+ - 21119:21119
|
|
|
104
|
+ image: rustdesk/rustdesk-server:latest
|
|
|
105
|
+ command: hbbr
|
|
|
106
|
+ volumes:
|
|
|
107
|
+ - ./data:/root
|
|
|
108
|
+ networks:
|
|
|
109
|
+ - rustdesk-net
|
|
|
110
|
+ restart: unless-stopped
|
|
|
111
|
+```
|
|
|
112
|
+
|
|
|
113
|
+請編輯第 16 行,將其指向您的中繼伺服器 (監聽端口 21117 那一個)。 如果需要的話,您也可以編輯 volume (第 18 和 33 行)。
|
|
|
114
|
+
|
|
|
115
|
+(感謝 @lukebarone 和 @QuiGonLeong 協助提供 docker-compose 的設定範例)
|
|
|
116
|
+
|
|
|
117
|
+## 基於 S6-overlay 的映象檔
|
|
|
118
|
+
|
|
|
119
|
+這些映象檔是針對 `busybox:stable` 建置的,並添加了執行檔(hbbr 和 hbbs)以及 [S6-overlay](https://github.com/just-containers/s6-overlay)。 它們在以及這些 tags 在 [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server-s6/) 可用:
|
|
|
120
|
+
|
|
|
121
|
+| 架構 | version | image:tag |
|
|
|
122
|
+| --------- | ------- | -------------------------------------------- |
|
|
|
123
|
+| multiarch | latest | `rustdesk/rustdesk-server-s6:latest` |
|
|
|
124
|
+| amd64 | latest | `rustdesk/rustdesk-server-s6:latest-amd64` |
|
|
|
125
|
+| i386 | latest | `rustdesk/rustdesk-server-s6:latest-i386` |
|
|
|
126
|
+| arm64v8 | latest | `rustdesk/rustdesk-server-s6:latest-arm64v8` |
|
|
|
127
|
+| armv7 | latest | `rustdesk/rustdesk-server-s6:latest-armv7` |
|
|
|
128
|
+| multiarch | 2 | `rustdesk/rustdesk-server-s6:2` |
|
|
|
129
|
+| amd64 | 2 | `rustdesk/rustdesk-server-s6:2-amd64` |
|
|
|
130
|
+| i386 | 2 | `rustdesk/rustdesk-server-s6:2-i386` |
|
|
|
131
|
+| arm64v8 | 2 | `rustdesk/rustdesk-server-s6:2-arm64v8` |
|
|
|
132
|
+| armv7 | 2 | `rustdesk/rustdesk-server-s6:2-armv7` |
|
|
|
133
|
+| multiarch | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0` |
|
|
|
134
|
+| amd64 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-amd64` |
|
|
|
135
|
+| i386 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-i386` |
|
|
|
136
|
+| arm64v8 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-arm64v8` |
|
|
|
137
|
+| armv7 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-armv7` |
|
|
|
138
|
+
|
|
|
139
|
+強烈建議您使用 `multiarch` 映象檔 可以選擇使用 `major version` 或 `latest` tags。
|
|
|
140
|
+
|
|
|
141
|
+S6-overlay 在此充當監督程序,保持兩個進程運行,因此使用此映象檔,您無需運行兩個獨立的容器。
|
|
|
142
|
+
|
|
|
143
|
+您可以直接使用以下命令使用 `docker run` 來啟動這個映象檔:
|
|
|
144
|
+
|
|
|
145
|
+```bash
|
|
|
146
|
+docker run --name rustdesk-server \
|
|
|
147
|
+ --net=host \
|
|
|
148
|
+ -e "RELAY=rustdeskrelay.example.com" \
|
|
|
149
|
+ -e "ENCRYPTED_ONLY=1" \
|
|
|
150
|
+ -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
|
|
|
151
|
+```
|
|
|
152
|
+
|
|
|
153
|
+或刪去 `--net=host`, 但 P2P 直接連線會無法運作。
|
|
|
154
|
+
|
|
|
155
|
+```bash
|
|
|
156
|
+docker run --name rustdesk-server \
|
|
|
157
|
+ -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
|
|
|
158
|
+ -p 21117:21117 -p 21118:21118 -p 21119:21119 \
|
|
|
159
|
+ -e "RELAY=rustdeskrelay.example.com" \
|
|
|
160
|
+ -e "ENCRYPTED_ONLY=1" \
|
|
|
161
|
+ -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
|
|
|
162
|
+```
|
|
|
163
|
+
|
|
|
164
|
+或是您可以使用 docker-compose 文件:
|
|
|
165
|
+
|
|
|
166
|
+```yaml
|
|
|
167
|
+version: '3'
|
|
|
168
|
+
|
|
|
169
|
+services:
|
|
|
170
|
+ rustdesk-server:
|
|
|
171
|
+ container_name: rustdesk-server
|
|
|
172
|
+ ports:
|
|
|
173
|
+ - 21115:21115
|
|
|
174
|
+ - 21116:21116
|
|
|
175
|
+ - 21116:21116/udp
|
|
|
176
|
+ - 21117:21117
|
|
|
177
|
+ - 21118:21118
|
|
|
178
|
+ - 21119:21119
|
|
|
179
|
+ image: rustdesk/rustdesk-server-s6:latest
|
|
|
180
|
+ environment:
|
|
|
181
|
+ - "RELAY=rustdesk.example.com:21117"
|
|
|
182
|
+ - "ENCRYPTED_ONLY=1"
|
|
|
183
|
+ volumes:
|
|
|
184
|
+ - ./data:/data
|
|
|
185
|
+ restart: unless-stopped
|
|
|
186
|
+```
|
|
|
187
|
+
|
|
|
188
|
+對於此容器映象檔,您可以使用這些環境變數,**除了**以下**環境變數**部分指定的那些。
|
|
|
189
|
+
|
|
|
190
|
+| 環境變數 | 是否可選 | 敘述 |
|
|
|
191
|
+| -------------- | -------- | ------------------------------------------ |
|
|
|
192
|
+| RELAY | 否 | 運行此容器的機器的 IP 地址/ DNS 名稱 |
|
|
|
193
|
+| ENCRYPTED_ONLY | 是 | 如果設置為 **"1"**,將不接受未加密的連接。 |
|
|
|
194
|
+| KEY_PUB | 是 | 金鑰對中的公鑰(Public Key) |
|
|
|
195
|
+| KEY_PRIV | 是 | 金鑰對中的私鑰(Private Key) |
|
|
|
196
|
+
|
|
|
197
|
+### 在基於 S6-overlay 的 Secret 管理
|
|
|
198
|
+
|
|
|
199
|
+您可以將金鑰對保存在 Docker volume 中,但最佳實踐建議不要將金鑰寫入文件系統;因此,我們提供了一些選項。
|
|
|
200
|
+
|
|
|
201
|
+在容器啟動時,會檢查金鑰對的是否存在(`/data/id_ed25519.pub` 和 `/data/id_ed25519`),如果其中一個金鑰不存在,則會從環境變數或 Docker Secret 重新生成它。
|
|
|
202
|
+然後檢查金鑰對的有效性:如果公鑰和私鑰不匹配,容器將停止運行。
|
|
|
203
|
+如果您未提供金鑰,`hbbs` 將為您產生一個,並將其放置在默認位置。
|
|
|
204
|
+
|
|
|
205
|
+#### 使用 ENV 存儲金鑰對
|
|
|
206
|
+
|
|
|
207
|
+您可以使用 Docker 環境變數來儲存金鑰。只需按照以下範例操作:
|
|
|
208
|
+
|
|
|
209
|
+```bash
|
|
|
210
|
+docker run --name rustdesk-server \
|
|
|
211
|
+ --net=host \
|
|
|
212
|
+ -e "RELAY=rustdeskrelay.example.com" \
|
|
|
213
|
+ -e "ENCRYPTED_ONLY=1" \
|
|
|
214
|
+ -e "DB_URL=/db/db_v2.sqlite3" \
|
|
|
215
|
+ -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
|
|
|
216
|
+ -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
|
|
|
217
|
+ -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
|
|
|
218
|
+```
|
|
|
219
|
+
|
|
|
220
|
+```yaml
|
|
|
221
|
+version: '3'
|
|
|
222
|
+
|
|
|
223
|
+services:
|
|
|
224
|
+ rustdesk-server:
|
|
|
225
|
+ container_name: rustdesk-server
|
|
|
226
|
+ ports:
|
|
|
227
|
+ - 21115:21115
|
|
|
228
|
+ - 21116:21116
|
|
|
229
|
+ - 21116:21116/udp
|
|
|
230
|
+ - 21117:21117
|
|
|
231
|
+ - 21118:21118
|
|
|
232
|
+ - 21119:21119
|
|
|
233
|
+ image: rustdesk/rustdesk-server-s6:latest
|
|
|
234
|
+ environment:
|
|
|
235
|
+ - "RELAY=rustdesk.example.com:21117"
|
|
|
236
|
+ - "ENCRYPTED_ONLY=1"
|
|
|
237
|
+ - "DB_URL=/db/db_v2.sqlite3"
|
|
|
238
|
+ - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
|
|
|
239
|
+ - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
|
|
|
240
|
+ volumes:
|
|
|
241
|
+ - ./db:/db
|
|
|
242
|
+ restart: unless-stopped
|
|
|
243
|
+```
|
|
|
244
|
+
|
|
|
245
|
+#### 使用 Docker Secret 來儲存金鑰對
|
|
|
246
|
+
|
|
|
247
|
+您還可以使用 Docker Secret來儲存金鑰。
|
|
|
248
|
+如果您使用 **docker-compose** 或 **docker swarm**,這很有用。
|
|
|
249
|
+只需按照以下示例操作:
|
|
|
250
|
+
|
|
|
251
|
+```bash
|
|
|
252
|
+cat secrets/id_ed25519.pub | docker secret create key_pub -
|
|
|
253
|
+cat secrets/id_ed25519 | docker secret create key_priv -
|
|
|
254
|
+docker service create --name rustdesk-server \
|
|
|
255
|
+ --secret key_priv --secret key_pub \
|
|
|
256
|
+ --net=host \
|
|
|
257
|
+ -e "RELAY=rustdeskrelay.example.com" \
|
|
|
258
|
+ -e "ENCRYPTED_ONLY=1" \
|
|
|
259
|
+ -e "DB_URL=/db/db_v2.sqlite3" \
|
|
|
260
|
+ --mount "type=bind,source=$PWD/db,destination=/db" \
|
|
|
261
|
+ rustdesk/rustdesk-server-s6:latest
|
|
|
262
|
+```
|
|
|
263
|
+
|
|
|
264
|
+```yaml
|
|
|
265
|
+version: '3'
|
|
|
266
|
+
|
|
|
267
|
+services:
|
|
|
268
|
+ rustdesk-server:
|
|
|
269
|
+ container_name: rustdesk-server
|
|
|
270
|
+ ports:
|
|
|
271
|
+ - 21115:21115
|
|
|
272
|
+ - 21116:21116
|
|
|
273
|
+ - 21116:21116/udp
|
|
|
274
|
+ - 21117:21117
|
|
|
275
|
+ - 21118:21118
|
|
|
276
|
+ - 21119:21119
|
|
|
277
|
+ image: rustdesk/rustdesk-server-s6:latest
|
|
|
278
|
+ environment:
|
|
|
279
|
+ - "RELAY=rustdesk.example.com:21117"
|
|
|
280
|
+ - "ENCRYPTED_ONLY=1"
|
|
|
281
|
+ - "DB_URL=/db/db_v2.sqlite3"
|
|
|
282
|
+ volumes:
|
|
|
283
|
+ - ./db:/db
|
|
|
284
|
+ restart: unless-stopped
|
|
|
285
|
+ secrets:
|
|
|
286
|
+ - key_pub
|
|
|
287
|
+ - key_priv
|
|
|
288
|
+
|
|
|
289
|
+secrets:
|
|
|
290
|
+ key_pub:
|
|
|
291
|
+ file: secrets/id_ed25519.pub
|
|
|
292
|
+ key_priv:
|
|
|
293
|
+ file: secrets/id_ed25519
|
|
|
294
|
+```
|
|
|
295
|
+
|
|
|
296
|
+## 如何建立金鑰對
|
|
|
297
|
+
|
|
|
298
|
+加密需要一對金鑰;您可以按照前面所述提供它,但需要一種生成金鑰對的方法。
|
|
|
299
|
+
|
|
|
300
|
+您可以使用以下命令生成一對金鑰:
|
|
|
301
|
+
|
|
|
302
|
+```bash
|
|
|
303
|
+/usr/bin/rustdesk-utils genkeypair
|
|
|
304
|
+```
|
|
|
305
|
+
|
|
|
306
|
+如果您沒有(或不想)在系統上安裝 `rustdesk-utils` 套件,您可以使用 Docker執行相同的命令:
|
|
|
307
|
+
|
|
|
308
|
+```bash
|
|
|
309
|
+docker run --rm --entrypoint /usr/bin/rustdesk-utils rustdesk/rustdesk-server-s6:latest genkeypair
|
|
|
310
|
+```
|
|
|
311
|
+
|
|
|
312
|
+輸出將類似於以下內容:
|
|
|
313
|
+
|
|
|
314
|
+```text
|
|
|
315
|
+Public Key: 8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
|
|
|
316
|
+Secret Key: egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
|
|
|
317
|
+```
|
|
|
318
|
+
|
|
|
319
|
+## .deb 套件
|
|
|
320
|
+
|
|
|
321
|
+每個執行檔都有單獨的 .deb 套件可供使用,您可以在 [releases](https://github.com/rustdesk/rustdesk-server/releases) 中找到它們。
|
|
|
322
|
+這些套件適用於以下發行版:
|
|
|
323
|
+
|
|
|
324
|
+- Ubuntu 22.04 LTS
|
|
|
325
|
+- Ubuntu 20.04 LTS
|
|
|
326
|
+- Ubuntu 18.04 LTS
|
|
|
327
|
+- Debian 11 bullseye
|
|
|
328
|
+- Debian 10 buster
|
|
|
329
|
+
|
|
|
330
|
+## ENV 環境參數
|
|
|
331
|
+
|
|
|
332
|
+可以使用這些 ENV 參數來配置 hbbs 和 hbbr。
|
|
|
333
|
+您可以像往常一樣指定參數,或者使用 .env 文件。
|
|
|
334
|
+
|
|
|
335
|
+| 參數 | 執行檔 | 敘述 |
|
|
|
336
|
+| --------------------- | --------- | -------------------------------------------------------------------- |
|
|
|
337
|
+| ALWAYS_USE_RELAY | hbbs | 如果設為 **"Y"**,禁止直接點對點連接 |
|
|
|
338
|
+| DB_URL | hbbs | 資料庫的路徑 |
|
|
|
339
|
+| DOWNGRADE_START_CHECK | hbbr | 降級檢查之前的延遲時間(以秒為單位) |
|
|
|
340
|
+| DOWNGRADE_THRESHOLD | hbbr | 降級檢查的閾值(bit/ms) |
|
|
|
341
|
+| KEY | hbbs/hbbr | 如果設置了,將強制使用特定金鑰,如果設為 **"_"**,則強制使用任何金鑰 |
|
|
|
342
|
+| LIMIT_SPEED | hbbr | 速度限制(以Mb/s為單位) |
|
|
|
343
|
+| PORT | hbbs/hbbr | 監聽端口(hbbs為21116,hbbr為21117) |
|
|
|
344
|
+| RELAY_SERVERS | hbbs | 運行hbbr的機器的IP地址/DNS名稱(用逗號分隔) |
|
|
|
345
|
+| RUST_LOG | all | 設定 debug level (error\|warn\|info\|debug\|trace) |
|
|
|
346
|
+| SINGLE_BANDWIDTH | hbbr | 單個連接的最大頻寬(以Mb/s為單位) |
|
|
|
347
|
+| TOTAL_BANDWIDTH | hbbr | 最大總頻寬(以Mb/s為單位) |
|