使用 Docker 轻松自建 RustDesk 服务器:详细指南与脚本
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 "脚本执行完毕。"
使用方法
客户端配置
部署完成后,您需要在 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 目录下,备份该目录以防止丢失。
评论前必须登录!
注册