Paolo Asperti лет назад: 3
Родитель
Сommit
0862bc8c04

+ 100 - 0
README.md

@@ -176,3 +176,103 @@ We use these environment variables:
176 176
 | --- | --- | --- |
177 177
 | RELAY | no | the IP address/DNS name of the machine running this container |
178 178
 | ENCRYPTED_ONLY | yes | if set to **"1"** unencrypted connection will not be accepted |
179
+| DB_URL | yes | path for database file |
180
+| KEY_PUB | yes | public part of the key pair |
181
+| KEY_PRIV | yes | private part of the key pair |
182
+
183
+### Secret management in S6-overlay based images
184
+
185
+You can obviously keep the key pair in a docker volume, but the best practices tells you to not write the keys on the filesystem; so we provide a couple of options.
186
+
187
+On container startup, the presence of the keypair is checked (`/data/id_ed25519.pub` and `/data/id_ed25519`) and if one of these keys doesn't exist, it's recreated from ENV variables or docker secrets.
188
+
189
+#### Use ENV to store the key pair
190
+
191
+You can use docker environment variables to store the keys. Just follow this examples:
192
+
193
+```bash
194
+docker run --name rustdesk-server \ 
195
+  --net=host \
196
+  -e "RELAY=rustdeskrelay.example.com" \
197
+  -e "ENCRYPTED_ONLY=1" \
198
+  -e "DB_URL=/db/db_v2.sqlite3" \
199
+  -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
200
+  -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
201
+  -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
202
+```
203
+
204
+```yaml
205
+version: '3'
206
+
207
+services:
208
+  rustdesk-server:
209
+    container_name: rustdesk-server
210
+    ports:
211
+      - 21115:21115
212
+      - 21116:21116
213
+      - 21116:21116/udp
214
+      - 21117:21117
215
+      - 21118:21118
216
+      - 21119:21119
217
+    image: rustdesk/rustdesk-server-s6:latest
218
+    environment:
219
+      - "RELAY=rustdesk.example.com:21117"
220
+      - "ENCRYPTED_ONLY=1"
221
+      - "DB_URL=/db/db_v2.sqlite3"
222
+      - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
223
+      - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
224
+    volumes:
225
+      - ./db:/db
226
+    restart: unless-stopped
227
+```
228
+
229
+#### Use Docker secrets to store the key pair
230
+
231
+You can alternatively use docker secrets to store the keys.
232
+This is useful if you're using **docker-compose** or **docker swarm**.
233
+Just follow this examples:
234
+
235
+```bash
236
+cat secrets/id_ed25519.pub | docker secret create key_pub -
237
+cat secrets/id_ed25519 | docker secret create key_priv -
238
+docker service create --name rustdesk-server \
239
+  --secret key_priv --secret key_pub \
240
+  --net=host \
241
+  -e "RELAY=rustdeskrelay.example.com" \
242
+  -e "ENCRYPTED_ONLY=1" \
243
+  -e "DB_URL=/db/db_v2.sqlite3" \
244
+  --mount "type=bind,source=$PWD/db,destination=/db" \
245
+  rustdesk/rustdesk-server-s6:latest
246
+```
247
+
248
+```yaml
249
+version: '3'
250
+
251
+services:
252
+  rustdesk-server:
253
+    container_name: rustdesk-server
254
+    ports:
255
+      - 21115:21115
256
+      - 21116:21116
257
+      - 21116:21116/udp
258
+      - 21117:21117
259
+      - 21118:21118
260
+      - 21119:21119
261
+    image: rustdesk/rustdesk-server-s6:latest
262
+    environment:
263
+      - "RELAY=rustdesk.example.com:21117"
264
+      - "ENCRYPTED_ONLY=1"
265
+      - "DB_URL=/db/db_v2.sqlite3"
266
+    volumes:
267
+      - ./db:/db
268
+    restart: unless-stopped
269
+    secrets:
270
+      - key_pub
271
+      - key_priv
272
+
273
+secrets:
274
+  key_pub:
275
+    file: secrets/id_ed25519.pub
276
+  key_priv:
277
+    file: secrets/id_ed25519      
278
+```

+ 2 - 1
docker/Dockerfile

@@ -7,7 +7,8 @@ ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLA
7 7
 RUN \
8 8
   tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz && \
9 9
   tar -C / -Jxpf /tmp/s6-overlay-${S6_ARCH}.tar.xz && \
10
-  rm /tmp/s6-overlay*.tar.xz
10
+  rm /tmp/s6-overlay*.tar.xz && \
11
+  ln -s /run /var/run
11 12
 
12 13
 COPY rootfs /
13 14
 

+ 1 - 0
docker/rootfs/etc/s6-overlay/s6-rc.d/hbbr/dependencies

@@ -0,0 +1 @@
1
+key-secret

+ 1 - 0
docker/rootfs/etc/s6-overlay/s6-rc.d/hbbs/dependencies

@@ -1 +1,2 @@
1
+key-secret
1 2
 hbbr

+ 1 - 0
docker/rootfs/etc/s6-overlay/s6-rc.d/key-secret/type

@@ -0,0 +1 @@
1
+oneshot

+ 1 - 0
docker/rootfs/etc/s6-overlay/s6-rc.d/key-secret/up

@@ -0,0 +1 @@
1
+/etc/s6-overlay/s6-rc.d/key-secret/up.real

+ 35 - 0
docker/rootfs/etc/s6-overlay/s6-rc.d/key-secret/up.real

@@ -0,0 +1,35 @@
1
+#!/command/with-contenv sh
2
+
3
+if [ ! -d /data ] ; then
4
+  mkdir /data
5
+fi
6
+
7
+# normal docker secrets
8
+if [ ! -f /data/id_ed25519.pub ] && [ -r /run/secrets/key_pub ] ; then
9
+  cp /run/secrets/key_pub /data/id_ed25519.pub
10
+  echo "Public key created from secret"
11
+fi
12
+
13
+if [ ! -f /data/id_ed25519 ] && [ -r /run/secrets/key_priv ] ; then
14
+  cp /run/secrets/key_priv /data/id_ed25519
15
+  echo "Private key created from secret"
16
+fi
17
+
18
+# ENV variables
19
+if [ ! -f /data/id_ed25519.pub ] && [ ! "$KEY_PUB" = "" ] ; then
20
+  echo -n "$KEY_PUB" > /data/id_ed25519.pub
21
+  echo "Public key created from ENV variable"
22
+fi
23
+
24
+if [ ! -f /data/id_ed25519 ] && [ ! "$KEY_PRIV" = "" ] ; then
25
+  echo -n "$KEY_PRIV" > /data/id_ed25519
26
+  echo "Private key created from ENV variable"
27
+fi
28
+
29
+# fix perms
30
+if [ -f /data/id_ed25519.pub ] ; then
31
+  chmod 600 /data/id_ed25519.pub 
32
+fi
33
+if [ -f /data/id_ed25519 ] ; then
34
+  chmod 600 /data/id_ed25519
35
+fi

+ 0 - 0
docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/key-secret