Docker轻松自建RustDesk服务器的实现步骤
作者:MUZ木
本文介绍通过Docker和自动化脚本在Linux服务器部署RustDesk的hbbs和hbbr组件,实现自建私有服务器以提升隐私、安全与灵活性,并提供客户端配置及注意事项,感兴趣的可以了解一下
RustDesk 是一款功能强大的开源远程桌面软件,让您完全掌控自己的数据和连接。相比依赖第三方服务,自建 RustDesk 服务器能显著提升隐私性、安全性和灵活性。本文将详细介绍如何通过 Docker 和一个自动化 Bash 脚本,在 Linux 服务器上快速部署 RustDesk 的服务端组件:hbbs
(ID/注册服务器)和 hbbr
(中继服务器)。
为什么选择自建 RustDesk 服务器?
- 数据隐私:所有连接和元数据都存储在您自己的服务器上,避免第三方访问。
- 安全性:自定义服务器安全设置,并使用私有密钥实现端到端加密。
- 无限制:摆脱公共服务器的连接数或带宽限制。
- 定制性:支持高级配置,满足特定需求。
先决条件
在开始之前,请确保满足以下条件:
- 一台具有公网静态 IP 地址的 Linux 服务器(推荐 Ubuntu、CentOS 或 Debian)。
- 服务器上已安装 Docker(参考 Docker 官方文档 安装)。
- 拥有服务器的 sudo 或 root 权限。
- 熟悉基本的 Linux 命令行操作。
- 确保服务器防火墙已开放以下端口:
- TCP:21115、21116、21117、21118
- UDP:21116、21118
andoli
部署 RustDesk 服务器需要两个主要组件:hbbs
(处理客户端注册和 ID 分配)以及 hbbr
(处理中继连接)。本指南提供了一个 Bash 脚本,自动化部署这两个组件,并确保数据持久化和密钥生成。
部署脚本
以下是一个自动化部署 RustDesk 服务器的 Bash 脚本。它会创建 Docker 容器、设置数据持久化目录,并生成和共享密钥。
#!/bin/bash # --- 配置 --- # !!! 重要: 公网服务器 IP 地址 !!! SERVER_IP="YOUR_SERVER_PUBLIC_IP" # 请替换为您的公网 IP # --- 服务器的密钥参数 --- # 使用 "_" 来强制启用密钥。如果 HBBS_DATA_DIR 中存在密钥,则使用它们,否则将生成新密钥。 # 客户端需要 id_ed25519.pub 中的公钥。 KEY_PARAMETER="_" # 推荐:强制使用密钥 # 用于持久化的数据目录 (在脚本所在目录下创建) BASE_DATA_DIR="./rustdesk_server_data" HBBS_DATA_DIR="${BASE_DATA_DIR}/hbbs" # hbbs 的数据和密钥将存放在这里 HBBR_DATA_DIR="${BASE_DATA_DIR}/hbbr" # hbbr 的数据目录 (密钥从 HBBS_DATA_DIR 共享) # Docker 镜像 RUSTDESK_IMAGE="rustdesk/rustdesk-server" # --- 脚本开始 --- echo "RustDesk 服务器部署脚本" echo "---------------------------------" # 检查 SERVER_IP 是否已配置 if [ "${SERVER_IP}" == "YOUR_SERVER_PUBLIC_IP" ] || [ -z "${SERVER_IP}" ]; then echo "错误:请修改脚本,将 SERVER_IP 变量设置为您的公网 IP 地址。" exit 1 fi # 检查 Docker if ! command -v docker &> /dev/null then echo "错误:找不到 Docker 命令。请先安装 Docker。" exit 1 fi echo "Docker 已找到。" echo "" # --- 1. 停止并移除已存在的 RustDesk 容器 --- echo "正在停止并移除已存在的 RustDesk 容器 (hbbs, hbbr)..." if sudo docker ps -a --format '{{.Names}}' | grep -qE '^(hbbs|hbbr)$'; then sudo docker stop hbbs hbbr > /dev/null 2>&1 || true sudo docker rm hbbs hbbr > /dev/null 2>&1 || true echo "已存在的 hbbs 和 hbbr 容器已停止并移除。" else echo "未找到名为 hbbs 或 hbbr 的旧容器。" fi echo "" # --- 2. 创建数据目录 --- echo "服务器 IP: ${SERVER_IP}" echo "HBBS 数据 (及密钥) 目录: ${HBBS_DATA_DIR}" echo "HBBR 数据目录: ${HBBR_DATA_DIR}" echo "" echo "正在创建数据目录 (如果不存在)..." mkdir -p "${HBBS_DATA_DIR}" mkdir -p "${HBBR_DATA_DIR}" echo "数据目录已确保存在。" echo "" # --- 3. 启动 HBBS (信令服务器) --- echo "正在启动 HBBS (信令服务器)..." sudo docker run -d \ --name hbbs \ -p 21115:21115 \ -p 21116:21116 \ -p 21116:21116/udp \ -v "${HBBS_DATA_DIR}":/root \ --restart unless-stopped \ "${RUSTDESK_IMAGE}" \ hbbs -k "${KEY_PARAMETER}" -r "${SERVER_IP}" echo "正在等待 HBBS 初始化 (约 5 秒)..." sleep 5 # 检查 hbbs 是否已启动并生成密钥 if [ ! -f "${HBBS_DATA_DIR}/id_ed25519.pub" ]; then echo "错误:HBBS 启动后未找到公钥文件 ${HBBS_DATA_DIR}/id_ed25519.pub。" echo "请检查 HBBS 日志: sudo docker logs hbbs" sudo docker logs hbbs echo "正在清理失败的 HBBS 容器..." sudo docker stop hbbs > /dev/null 2>&1 || true sudo docker rm hbbs > /dev/null 2>&1 || true exit 1 fi PUBLIC_KEY=$(cat "${HBBS_DATA_DIR}/id_ed25519.pub") echo "HBBS 已启动,公钥已获取。" echo "" # --- 4. 启动 HBBR (中继服务器) --- echo "正在启动 HBBR (中继服务器)..." # HBBR 挂载 HBBS_DATA_DIR 以共享由 HBBS 生成的密钥 sudo docker run -d \ --name hbbr \ -p 21117:21117 \ -p 21118:21118 \ -p 21118:21118/udp \ -v "${HBBS_DATA_DIR}":/root \ --restart unless-stopped \ "${RUSTDESK_IMAGE}" \ hbbr -k "${KEY_PARAMETER}" echo "正在等待 HBBR 初始化 (约 3 秒)..." sleep 3 # 检查 hbbr 是否启动 if ! sudo docker ps --filter "name=hbbr" --filter "status=running" --format '{{.Names}}' | grep -q '^hbbr$'; then echo "错误: HBBR 容器未能成功启动或未处于运行状态。" echo "请检查 HBBR 日志: sudo docker logs hbbr" sudo docker logs hbbr echo "正在清理 HBBS 和 HBBR 容器..." sudo docker stop hbbs hbbr > /dev/null 2>&1 || true sudo docker rm hbbs hbbr > /dev/null 2>&1 || true exit 1 fi echo "HBBR 已启动。" echo "" # --- 部署摘要 --- echo "--- 部署摘要 ---" echo "RustDesk 服务器容器 (hbbs 和 hbbr) 现在应该正在运行。" echo "您可以使用以下命令检查它们的状态: sudo docker ps -a" echo "您可以使用以下命令查看日志: sudo docker logs hbbs 或 sudo docker logs hbbr" echo "" echo "--- 客户端配置 ---" echo "在您的 RustDesk 客户端中,请按如下配置:" echo " ID 服务器: ${SERVER_IP}" echo " 中继服务器: ${SERVER_IP}" echo " Key (公钥): ${PUBLIC_KEY}" echo "" echo "重要提示: 'Key' 是由 hbbs 生成的公钥文件的内容。" echo "它已从以下位置读取: ${HBBS_DATA_DIR}/id_ed25519.pub" echo "" echo "如果您以后需要查找公钥,请运行: cat ${HBBS_DATA_DIR}/id_ed25519.pub" echo "脚本执行完毕。"
使用方法
- 保存脚本:将上述脚本保存为
deploy-rustdesk.sh
。 - 修改公网 IP:将脚本中的
SERVER_IP="YOUR_SERVER_PUBLIC_IP"
替换为您的服务器公网 IP 地址。 - 赋予执行权限:
chmod +x deploy-rustdesk.sh
- 运行脚本:
./deploy-rustdesk.sh
- 检查输出:脚本会输出部署状态、客户端配置信息和公钥。
客户端配置
部署完成后,您需要在 RustDesk 客户端中配置以下信息:
- ID 服务器:您的服务器公网 IP(例如
192.168.1.1
)。 - 中继服务器:同 ID 服务器的 IP 地址。
- Key (公钥):脚本运行后显示的公钥,或通过以下命令查看:
cat rustdesk_server_data/hbbs/id_ed25519.pub
注意事项
- 防火墙设置:确保防火墙或云服务提供商的安全组规则已开放所需的 TCP 和 UDP 端口。
- 密钥管理:公钥 (
id_ed25519.pub
) 必须正确配置到客户端,否则无法连接。脚本自动生成并显示公钥。 - 持久化数据:数据目录 (
rustdesk_server_data/hbbs
和rustdesk_server_data/hbbr
) 存储密钥和其他持久化数据,确保不要误删。 - 日志排查:如果遇到问题,可查看容器日志:
sudo docker logs hbbs sudo docker logs hbbr
常见问题
- 连接失败:检查防火墙端口是否开放,确认客户端的 ID 服务器、中继服务器和公钥是否正确。
- 容器未运行:使用
sudo docker ps -a
检查容器状态,并查看日志以排查错误。 - 密钥丢失:密钥存储在
rustdesk_server_data/hbbs
目录下,备份该目录以防止丢失。
到此这篇关于Docker轻松自建RustDesk服务器的文章就介绍到这了,更多相关Docker自建RustDesk服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!