RustDesk 1.1.16 服务端 Docker Compose 部署指南
用 Docker Compose 在 Ubuntu 22.04 单机部署 RustDesk 1.1.16 自建服务端:hbbs/hbbr 双服务编排、21115-21119 端口矩阵验证、Ed25519 密钥对确认与客户端接入配置全链路实测通过。
RustDesk 1.1.16 服务端 Docker Compose 部署指南
目标:用 Docker Compose 在单台 Ubuntu 22.04 服务器上从零部署 RustDesk 自建服务端(hbbs ID/Rendezvous 服务器 + hbbr Relay 中继服务器),完成「独立网络 → 编排启动 → 端口矩阵验证 → 密钥对确认 → 客户端接入配置」的完整链路。本文全部命令与回显已在 Docker Engine 29.9.2(Compose v5.6.1)环境实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Docker Engine:29.9.2,Docker Compose 插件 v5.6.1
- RustDesk 服务端版本:1.1.16(2026-07-20 发布,官方最新稳定版,发布信息查询日期 2026-10-25)
- 官方镜像:
rustdesk/rustdesk-server:1.1.16(multi-arch manifest,实测磁盘占用 19 MB) - 端口规划(RustDesk 标准端口,生产建议直接映射这组端口):
- hbbs:
21115/TCP(NAT 类型测试)、21116/TCP+UDP(ID 注册与心跳、打洞协调)、21118/TCP(WebSocket,Web 客户端) - hbbr:
21117/TCP(中继)、21119/TCP(WebSocket,Web 客户端)
- hbbs:
- 编排目录:
/opt/rustdesk/(示例路径,含docker-compose.yml、data/hbbs/、data/hbbr/) - 独立网络:
rustdesk-1.1.16-net(bridge,网段10.89.70.0/24) - 客户端接入信息(部署产物):ID 服务器 = 服务器地址,Key =
data/hbbs/id_ed25519.pub内容
二、镜像选型说明
RustDesk 官方在 Docker Hub 提供两个服务端镜像仓库,选型先定仓库再定标签:
| 项目 | 取值 | 说明 |
|---|---|---|
rustdesk/rustdesk-server | 本文选用 | scratch 极简基础(实测 19 MB,无 shell、无包管理器),Entrypoint/Cmd 均为空,靠编排的 command: hbbs / command: hbbr 直接启动对应二进制;hbbs 与 hbbr 拆成两个服务,职责分离、日志分离、可独立重启伸缩 |
rustdesk/rustdesk-server-s6 | 备选 | 内置 s6-overlay 监督进程,单实例同时跑 hbbs+hbbr 两个进程,用 RELAY/ENCRYPTED_ONLY/KEY_PUB/KEY_PRIV 等环境变量注入配置;适合「一个服务跑全套」的简易场景,但两进程耦合在同一实例内 |
标签策略(Docker Hub 实测,查询日期 2026-10-25):
| 标签 | 性质 | 适用 |
|---|---|---|
1.1.16 | 精确版本,multi-arch manifest(自动按宿主架构选层) | 生产推荐,与本文回显一致 |
1.1.16-amd64 / 1.1.16-arm64v8 / 1.1.16-armv7 | 架构专属标签 | 需锁定架构或 manifest 解析异常时使用 |
1 / latest | 滚动标签,跟随最新稳定版 | 升级可控性差,生产不建议 |
镜像关键元数据(docker inspect 实测):
Entrypoint=null Cmd=null WorkingDir=/root ExposedPorts=null Volumes=null User=
- 镜像不含
Entrypoint,编排里的command: hbbs即整条启动命令(二进制位于/usr/bin/),工作目录/root即密钥对与 SQLite 数据库的落盘目录——这就是唯一需要持久化的路径 - 未声明任何暴露端口与挂载点,端口矩阵与数据卷全由编排显式给出(见第四章)
- 镜像为 scratch 形态、内部无 shell,
docker exec进入不可用;运行时治理走 loopback 控制台(见十、常用运维命令)
💡 说明:本文全部使用
1.1.16精确标签。双服务分离形态下 hbbs 与 hbbr 可分别升级、分别排障,是官方 docker 部署文档的推荐编排方式。
三、前置条件
- 服务器已安装 Docker Engine 与 Compose 插件,验证:
docker version --format 'Engine {{.Server.Version}}'
实测输出:
Engine 29.9.2
docker compose version
实测输出:
Docker Compose version v5.6.1
- 端口空闲确认:21115–21119 未被占用:
ss -ltn | grep -E '2111[5-9]' || echo "21115-21119 空闲"
实测输出(部署前):
21115-21119 空闲
- ⚠️ 防火墙/安全组必须同时放通 TCP 21115–21119 与 UDP 21116。UDP 21116 承载客户端注册与心跳,只放 TCP 不放 UDP 是自建部署最常见的「客户端显示离线」根因(见十一、常见问题 Q1)。
四、部署步骤
本章按「创建网络 → 编写编排文件 → 启动 → 日志验证 → 端口验证 → 密钥对确认 → 客户端接入」的顺序完成 0→1 部署。预期结果:hbbs/hbbr 双服务健康运行,客户端可凭「ID 服务器 + Key」接入。
4.1 创建独立网络
为整套服务创建独立 bridge 网络并显式指定网段,避免与其他业务网段冲突:
docker network create -d bridge --subnet 10.89.70.0/24 rustdesk-1.1.16-net
实测输出:
0b10b679eef70ebbc1d7c6c532a4276eb63ec7f1d8aedb727f308423fcb07063
💡 说明:hbbs 与 hbbr 同网络互通(hbbs 向客户端下发的中继地址、以及
-r指定的 relay-servers 场景都依赖两服务互通)。若网段与现有网络冲突,换一个空闲/24并同步修改编排文件即可。
4.2 编写编排文件
创建部署目录 /opt/rustdesk/,写入 docker-compose.yml:
mkdir -p /opt/rustdesk && cd /opt/rustdesk
docker-compose.yml 完整内容:
name: rustdesk-1.1.16-stack
services:
hbbs:
container_name: rustdesk-1.1.16-hbbs
image: rustdesk/rustdesk-server:1.1.16
command: hbbs
ports:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
- "21118:21118"
volumes:
- ./data/hbbs:/root
networks:
- rustdesk-net
restart: unless-stopped
hbbr:
container_name: rustdesk-1.1.16-hbbr
image: rustdesk/rustdesk-server:1.1.16
command: hbbr
ports:
- "21117:21117"
- "21119:21119"
volumes:
- ./data/hbbr:/root
networks:
- rustdesk-net
restart: unless-stopped
networks:
rustdesk-net:
external: true
name: rustdesk-1.1.16-net
逐项说明:
name:显式指定 Compose 项目名rustdesk-1.1.16-stack,避免多套部署目录同名导致down误删其他在跑实例image:精确版本标签1.1.16,与本文回显一致command: hbbs/command: hbbr:镜像无 Entrypoint,整条命令即启动对应服务进程;hbbs 不带参数时监听全部默认端口、工作目录/rootports:完整端口矩阵。注意"21116:21116/udp"独立成行——Compose 默认协议为 TCP,UDP 映射必须显式声明volumes:./data/hbbs挂到 hbbs 工作目录/root(密钥对 + SQLite 数据库落盘点);./data/hbbr挂到 hbbr 工作目录(运行时黑名单文件blacklist.txt/blocklist.txt落盘点,初始为空目录)networks:接入 4.1 创建的外部网络;external: true+ 显式name指向已建网络restart: unless-stopped:进程异常退出或宿主机重启后自动拉起
4.3 启动服务
docker compose up -d
实测输出:
Container rustdesk-1.1.16-hbbs Creating
Container rustdesk-1.1.16-hbbr Creating
Container rustdesk-1.1.16-hbbr Created
Container rustdesk-1.1.16-hbbs Created
Container rustdesk-1.1.16-hbbs Starting
Container rustdesk-1.1.16-hbbr Starting
Container rustdesk-1.1.16-hbbs Started
Container rustdesk-1.1.16-hbbr Started
确认运行状态:
docker compose ps
实测输出:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
rustdesk-1.1.16-hbbr rustdesk/rustdesk-server:1.1.16 "hbbr" hbbr Less than a second ago Up Less than a second 0.0.0.0:21117->21117/tcp, [::]:21117->21117/tcp, 0.0.0.0:21119->21119/tcp, [::]:21119->21119/tcp
rustdesk-1.1.16-hbbs rustdesk/rustdesk-server:1.1.16 "hbbs" hbbs Less than a second ago Up Less than a second 0.0.0.0:21115-21116->21115-21116/tcp, [::]:21115-21116->21115-21116/tcp, 0.0.0.0:21118->21118/tcp, [::]:21118->21118/tcp, 0.0.0.0:21116->21116/udp, [::]:21116->21116/udp
💡 说明:
PORTS列可一次性核对端口矩阵:hbbs 的21115-21116/TCP + 21118/TCP + 21116/UDP、hbbr 的21117/TCP + 21119/TCP全部在映射中,即编排生效。
4.4 启动日志验证
查看 hbbs 启动日志:
docker logs rustdesk-1.1.16-hbbs
实测输出:
[2026-10-25 04:19:09.279881 +00:00] INFO [src/common.rs:121] Private key comes from id_ed25519
[2026-10-25 04:19:09.279909 +00:00] INFO [src/rendezvous_server.rs:1243] Key: tIOS6+HyV3YtZbGh57aTlN5cKrAF2Kg0w2gjWgm2dYY=
[2026-10-25 04:19:09.279912 +00:00] INFO [src/peer.rs:84] DB_URL=./db_v2.sqlite3
[2026-10-25 04:19:09.281108 +00:00] INFO [src/rendezvous_server.rs:107] serial=0
[2026-10-25 04:19:09.281119 +00:00] INFO [src/common.rs:45] rendezvous-servers=[]
[2026-10-25 04:19:09.281124 +00:00] INFO [src/rendezvous_server.rs:109] Listening on tcp/udp :21116
[2026-10-25 04:19:09.281130 +00:00] INFO [src/rendezvous_server.rs:110] Listening on tcp :21115, extra port for NAT test
[2026-10-25 04:19:09.281133 +00:00] INFO [src/rendezvous_server.rs:111] Listening on websocket :21118
[2026-10-25 04:19:09.281216 +00:00] INFO [src/rendezvous_server.rs:146] mask: None
[2026-10-25 04:19:09.281222 +00:00] INFO [src/rendezvous_server.rs:147] local-ip: ""
[2026-10-25 04:19:09.281234 +00:00] INFO [src/common.rs:45] relay-servers=[]
[2026-10-25 04:19:09.281809 +00:00] INFO [src/rendezvous_server.rs:161] ALWAYS_USE_RELAY=N
[2026-10-25 04:19:09.281839 +00:00] INFO [src/rendezvous_server.rs:193] Start
关键行解读:
Private key comes from id_ed25519+Key: tIOS6+HyV3YtZbGh57aTlN5cKrAF2Kg0w2gjWgm2dYY=:服务端身份密钥对已加载(首次启动会自动生成,见第五章),Key:行即客户端要配置的公钥DB_URL=./db_v2.sqlite3:设备注册信息持久化到工作目录内嵌 SQLiteListening on tcp/udp :21116、tcp :21115、websocket :21118:hbbs 三端口监听确认ALWAYS_USE_RELAY=N:默认不强制中继(优先 P2P 打洞直连)
查看 hbbr 启动日志:
docker logs rustdesk-1.1.16-hbbr
实测输出:
[2026-10-25 04:19:09.438307 +00:00] INFO [src/relay_server.rs:61] #blacklist(blacklist.txt): 0
[2026-10-25 04:19:09.438329 +00:00] INFO [src/relay_server.rs:76] #blocklist(blocklist.txt): 0
[2026-10-25 04:19:09.438331 +00:00] INFO [src/relay_server.rs:82] Listening on tcp :21117
[2026-10-25 04:19:09.438333 +00:00] INFO [src/relay_server.rs:84] Listening on websocket :21119
[2026-10-25 04:19:09.438334 +00:00] INFO [src/relay_server.rs:87] Start
[2026-10-25 04:19:09.438382 +00:00] INFO [src/relay_server.rs:105] DOWNGRADE_THRESHOLD: 0.66
[2026-10-25 04:19:09.438389 +00:00] INFO [src/relay_server.rs:115] DOWNGRADE_START_CHECK: 1800s
[2026-10-25 04:19:09.438390 +00:00] INFO [src/relay_server.rs:125] LIMIT_SPEED: 32Mb/s
[2026-10-25 04:19:09.438392 +00:00] INFO [src/relay_server.rs:136] TOTAL_BANDWIDTH: 1024Mb/s
[2026-10-25 04:19:09.438393 +00:00] INFO [src/relay_server.rs:146] SINGLE_BANDWIDTH: 128Mb/s
关键行解读:
Listening on tcp :21117+websocket :21119:hbbr 双端口监听确认- 末尾五行是中继带宽 QoS 出厂默认:单连接上限
128Mb/s、总带宽1024Mb/s、限速32Mb/s、降级阈值0.66、降级起始检查1800s(参数语义详解见同专栏《RustDesk 1.1.16 配置参数详解》)
4.5 端口矩阵验证
宿主机核对 TCP 监听:
ss -ltn | grep 2111
实测输出:
LISTEN 0 4096 0.0.0.0:21115 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:21116 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:21117 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:21118 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:21119 0.0.0.0:*
LISTEN 0 4096 [::]:21115 [::]:*
LISTEN 0 4096 [::]:21116 [::]:*
LISTEN 0 4096 [::]:21117 [::]:*
LISTEN 0 4096 [::]:21118 [::]:*
LISTEN 0 4096 [::]:21119 [::]:*
核对 UDP 21116:
ss -lun | grep 21116
实测输出:
UNCONN 0 0 0.0.0.0:21116 0.0.0.0:*
UNCONN 0 0 [::]:21116 [::]:*
逐个 TCP 连通性验证:
for p in 21115 21116 21117 21118 21119; do nc -zv -w2 127.0.0.1 $p; done
实测输出:
Connection to 127.0.0.1 21115 port [tcp/*] succeeded!
Connection to 127.0.0.1 21116 port [tcp/*] succeeded!
Connection to 127.0.0.1 21117 port [tcp/*] succeeded!
Connection to 127.0.0.1 21118 port [tcp/*] succeeded!
Connection to 127.0.0.1 21119 port [tcp/*] succeeded!
4.6 密钥对确认
服务端身份密钥对位于 hbbs 数据目录,确认公钥(即客户端 Key):
cat data/hbbs/id_ed25519.pub
实测输出:
tIOS6+HyV3YtZbGh57aTlN5cKrAF2Kg0w2gjWgm2dYY=
查看数据目录全貌:
ls -la data/hbbs/ data/hbbr/
实测输出:
data/hbbr/:
total 8
drwxr-xr-x 2 root root 4096 Oct 25 11:55 .
drwxr-xr-x 4 root root 4096 Oct 25 11:53 ..
data/hbbs/:
total 84
drwxr-xr-x 3 root root 4096 Oct 25 12:19 .
drwxr-xr-x 4 root root 4096 Oct 25 11:53 ..
drwxr-xr-x 3 root root 4096 Oct 25 11:53 .config
-rw-r--r-- 1 root root 24576 Oct 25 11:54 db_v2.sqlite3
-rw-r--r-- 1 root root 32768 Oct 25 12:19 db_v2.sqlite3-shm
-rw-r--r-- 1 root root 0 Oct 25 12:19 db_v2.sqlite3-wal
-rw-r--r-- 1 root root 88 Oct 25 11:54 id_ed25519
-rw-r--r-- 1 root root 44 Oct 25 11:54 id_ed25519.pub
⚠️ 注意:
id_ed25519(私钥)+id_ed25519.pub(公钥)就是这套自建服务端的身份。密钥对丢失或重新生成后,所有已配置旧 Key 的客户端将无法通过校验,必须逐台更新 Key。务必把这两个文件纳入备份(备份恢复实测见同专栏《RustDesk 1.1.16 日常运维手册》)。
4.7 客户端接入配置
服务端就绪后,各平台客户端(1.5.0)在「设置 → 网络 → ID/中继服务器」中填入:
| 配置项 | 取值 | 说明 |
|---|---|---|
| ID 服务器 | 服务器 IP 或域名(如 rustdesk.example.com) | 即 hbbs 地址;只填主机,不带端口(默认 21116) |
| 中继服务器 | 留空 | 留空时客户端自动用 ID 服务器地址推导中继(hbbr 21117);hbbr 分离部署到其他主机时才需显式填写 |
| API 服务器 | 留空 | 仅官方托管 Pro 版使用 |
| Key | data/hbbs/id_ed25519.pub 内容(本文实测为 tIOS6+HyV3YtZbGh57aTlN5cKrAF2Kg0w2gjWgm2dYY=) | 服务端 Ed25519 公钥,用于校验服务端身份并加密信令 |
💡 说明:Key 正确生效时,客户端主界面底部状态栏从「未就绪」变为「就绪」;Web 客户端(Web 客户端走 WebSocket)还需 21118/21119 可达。主控端与被控端两端都要配置同一套 ID 服务器 + Key。
五、数据持久化说明
整套服务的状态全部落在两个数据目录:
| 路径 | 内容 | 丢失影响 |
|---|---|---|
data/hbbs/id_ed25519 + .pub | Ed25519 身份密钥对 | 致命:服务端身份变更,全部客户端 Key 失效,需逐台重配 |
data/hbbs/db_v2.sqlite3(含 -wal/-shm) | 设备注册信息(peer 表:guid、id、uuid、pk、user 等) | 已注册设备的 ID 分配与绑定信息丢失,客户端重启后重新注册 |
data/hbbs/.config/ | hbbs 运行时配置目录 | 影响小 |
data/hbbr/ | 黑名单文件 blacklist.txt/blocklist.txt(仅运行时治理后生成) | 黑/封名单清零 |
本次实测已验证「实例重建后身份不变」:4.3 章的启动发生在完整重建(down → 删网络 → 重建网络 → up)之后,日志中 Private key comes from id_ed25519 与 Key: tIOS6+HyV3YtZbGh57aTlN5cKrAF2Kg0w2gjWgm2dYY= 和重建前完全一致——只要 data/hbbs 持久化在,服务端身份与设备注册数据就稳定。
六、环境变量表
编排中可注入的核心环境变量(完整参数语义与优先级规则见同专栏《RustDesk 1.1.16 配置参数详解》):
| 变量 | 作用服务 | 默认值 | 说明 |
|---|---|---|---|
KEY | hbbs / hbbr | _(hbbs 自动加载或生成密钥对)/ 空(hbbr 不校验) | 私钥内容或其 base64;设为 _ 表示从工作目录密钥文件加载,空值表示禁用 key 校验 |
PORT | hbbs / hbbr | 21116 / 21117 | 主监听端口,改了需同步改端口矩阵 |
RELAY_SERVERS | hbbs | 空 | 下发给客户端的中继服务器列表(多中继时用空格分隔) |
ALWAYS_USE_RELAY | hbbs | N | Y 强制全部会话走中继(放弃 P2P 打洞) |
DB_URL | hbbs | ./db_v2.sqlite3 | 设备注册库路径(SQLite) |
RUST_LOG | hbbs / hbbr | info | 日志级别(debug/error 等),排障时改 debug |
LIMIT_SPEED | hbbr | 32Mb/s | 中继限速阈值 |
SINGLE_BANDWIDTH | hbbr | 128Mb/s | 单连接带宽上限 |
TOTAL_BANDWIDTH | hbbr | 1024Mb/s | 中继总带宽上限 |
注入示例(编排 environment: 段):
environment:
RUST_LOG: info
RELAY_SERVERS: "rustdesk.example.com"
七、配置参数说明
两个二进制的启动参数(命令行 flag)概览,本文编排均使用默认值:
| 参数 | 服务 | 默认 | 说明 |
|---|---|---|---|
-p <端口> | hbbs / hbbr | 21116 / 21117 | 覆盖主监听端口(等价于 PORT 变量) |
-k <key> | hbbs / hbbr | 见第六章 KEY 行 | 指定私钥(内容/base64/-/_);hbbs 缺省自动加载或生成,hbbr 缺省不校验 |
-r <主机:端口> | hbbs | 空 | 指定默认中继服务器(等价于 RELAY_SERVERS) |
-M <Mb> | hbbs | 2 | 打洞相关内存参数 |
-R | hbbs | 关 | 仅中继模式开关(等价 ALWAYS_USE_RELAY=Y) |
--config <文件> | hbbs | 无 | 从 INI 配置文件加载参数(见第八章) |
💡 说明:hbbs 配置优先级为 命令行 flag >
--configINI 文件 >.env文件 > 继承环境变量;hbbr 为 flag >.env> 继承环境变量。完整参数表与逐项实测见《RustDesk 1.1.16 配置参数详解》。
八、配置文件挂载
默认编排不需要任何配置文件即可运行;需要文件化配置时按以下方式挂载(挂载到工作目录 /root 下生效):
1. INI 配置文件(仅 hbbs 支持):
command: hbbs --config /root/hbbs.ini
volumes:
- ./data/hbbs:/root
- ./hbbs.ini:/root/hbbs.ini:ro
hbbs.ini 示例:
relay-servers = rustdesk.example.com
always-use-relay = N
2. .env 文件(hbbs / hbbr 均支持): 把 .env 放到各自数据目录即自动加载:
volumes:
- ./env/hbbs.env:/root/.env:ro
3. 密钥文件挂载(密钥对不进数据卷的场景): 把已有密钥对挂到工作目录:
volumes:
- ./keys/id_ed25519:/root/id_ed25519:ro
- ./keys/id_ed25519.pub:/root/id_ed25519.pub:ro
⚠️ 注意:hbbr 不支持
--configINI 文件,其配置只能走 flag /.env/ 环境变量。
九、等价 docker run
不使用 Compose 时,以下两条命令与第四章编排逐项等价(先手工创建同一网络):
docker run -d --name rustdesk-1.1.16-hbbs --restart unless-stopped \
--network rustdesk-1.1.16-net \
-p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 \
-v /opt/rustdesk/data/hbbs:/root \
rustdesk/rustdesk-server:1.1.16 hbbs
docker run -d --name rustdesk-1.1.16-hbbr --restart unless-stopped \
--network rustdesk-1.1.16-net \
-p 21117:21117 -p 21119:21119 \
-v /opt/rustdesk/data/hbbr:/root \
rustdesk/rustdesk-server:1.1.16 hbbr
💡 说明:等价命令与编排的
ports/volumes/command/restart一一对应;Compose 方式的优势在端口矩阵与数据卷的声明式管理,生产推荐编排形态。
十、常用运维命令
日常高频操作(升降级、备份恢复与控制台的完整演练见同专栏《RustDesk 1.1.16 日常运维手册》):
# 查看实时日志
docker logs -f rustdesk-1.1.16-hbbs
docker logs -f rustdesk-1.1.16-hbbr
# 重启单个服务
docker compose restart hbbs
docker compose restart hbbr
# 停止/启动整套栈
docker compose down
docker compose up -d
# 升级到新版(以官方发布新标签为例):改 image 标签后执行
docker compose pull
docker compose up -d
镜像为 scratch 形态、无 shell,无法用 docker exec rustdesk-1.1.16-hbbs sh 进入(实测返回 executable file not found)。运行时治理用 loopback 控制台:hbbs 在 21115、hbbr 在 21117 上接受来自 127.0.0.1 的单命令 TCP 连接,可借助同网络共享方式用 nc 发送控制台命令(如 hbbr 的 tb 查询总带宽、hbbs 的 aur 查询强制中继状态),完整命令集与实测见《RustDesk 1.1.16 日常运维手册》。
十一、常见问题
Q1:客户端填好 ID 服务器后一直「未就绪」/显示离线?
按序排查:① UDP 21116 未放通(最常见)——注册与心跳走 UDP,安全组/防火墙只对 TCP 放行就会出现该现象,ss -lun | grep 21116 在服务端应能看到监听;② 客户端「ID 服务器」只填主机不带端口;③ 服务端 docker logs rustdesk-1.1.16-hbbs 确认 Listening on tcp/udp :21116 在。
Q2:客户端提示 key 相关错误、连不上?
客户端配置的 Key 与服务端 data/hbbs/id_ed25519.pub 内容不一致。典型诱因:数据目录被删后 hbbs 重新生成了密钥对(公钥变化),而客户端还配着旧 Key。核对 4.6 的公钥值与客户端配置逐字符一致(含结尾 =)。
Q3:所有会话都走中继、P2P 打洞不成?
先查 hbbs 日志 ALWAYS_USE_RELAY=N 是否被改成 Y;再考虑 NAT 类型——对称型 NAT(对称 NAT)之间打洞天然失败,中继兜底是正常行为,可用 hbbr QoS 参数控制中继带宽成本(见配置参数详解篇)。
Q4:docker exec 进不去、报 executable file not found?
这是 scratch 极简镜像的正常现象——镜像内没有 shell 与任何工具。治理操作走 4.4 日志与 loopback 控制台(见第十章),不要试图 exec。
Q5:Web 客户端能用自建服务端吗?
能。Web 客户端走 WebSocket,需要 hbbs 的 21118 与 hbbr 的 21119 均可达(本文端口矩阵已含);客户端侧同样填 ID 服务器 + Key。
十二、参考链接
- 官方自托管文档:https://rustdesk.com/docs/en/self-host/
- 官方 Docker 部署文档:https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/
- 官方客户端配置文档:https://rustdesk.com/docs/en/self-host/client-configuration/
- 服务端环境变量说明:https://github.com/rustdesk/rustdesk-server/blob/master/docs/environment-variables.md
- GitHub 仓库与 Releases:https://github.com/rustdesk/rustdesk-server(/releases)
- Docker Hub 镜像:https://hub.docker.com/r/rustdesk/rustdesk-server
- 站内同系列:《RustDesk 1.5.0 介绍与选型指南》、《RustDesk 1.1.16 配置参数详解》、《RustDesk 1.1.16 日常运维手册》(同专栏 RustDesk)