> 技术文档 > 使用 Docker 轻松自建 RustDesk 服务器:详细指南与脚本_rustdesk docker

使用 Docker 轻松自建 RustDesk 服务器:详细指南与脚本_rustdesk docker


使用 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 1fi# 检查 Dockerif ! command -v docker &> /dev/nullthen echo \"错误:找不到 Docker 命令。请先安装 Docker。\" exit 1fiecho \"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 的旧容器。\"fiecho \"\"# --- 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 1fiPUBLIC_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 1fiecho \"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 \"脚本执行完毕。\"

使用方法

  1. 保存脚本:将上述脚本保存为 deploy-rustdesk.sh
  2. 修改公网 IP:将脚本中的 SERVER_IP=\"YOUR_SERVER_PUBLIC_IP\" 替换为您的服务器公网 IP 地址。
  3. 赋予执行权限
    chmod +x deploy-rustdesk.sh
  4. 运行脚本
    ./deploy-rustdesk.sh
  5. 检查输出:脚本会输出部署状态、客户端配置信息和公钥。

客户端配置

部署完成后,您需要在 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/hbbsrustdesk_server_data/hbbr) 存储密钥和其他持久化数据,确保不要误删。
  • 日志排查:如果遇到问题,可查看容器日志:
    sudo docker logs hbbssudo docker logs hbbr

常见问题

  • 连接失败:检查防火墙端口是否开放,确认客户端的 ID 服务器、中继服务器和公钥是否正确。
  • 容器未运行:使用 sudo docker ps -a 检查容器状态,并查看日志以排查错误。
  • 密钥丢失:密钥存储在 rustdesk_server_data/hbbs 目录下,备份该目录以防止丢失。