> 技术文档 > 【手把手教你用 Docker 搭建私有远程桌面服务:RustDesk 自托管全攻略】_rustdesk自建服务器docker

【手把手教你用 Docker 搭建私有远程桌面服务:RustDesk 自托管全攻略】_rustdesk自建服务器docker


这里写自定义目录标题

  • 🌟手把手教你用 Docker 搭建私有远程桌面服务:RustDesk 自托管全攻略(小白友好)
    • 📌 什么是 RustDesk?为什么要自托管?
    • 🧰 准备工作
    • 🚀 第一步:创建项目目录
    • 📄 第二步:准备配置文件(docker-compose.yml)
    • ⚙️ 第三步:下载启动脚本(start.sh)
    • 🔧 第四步:安装 Docker(如果还没装)
    • ▶️ 第五步:运行脚本,一键部署!
    • 🖥️ 第六步:客户端配置(Windows/Mac/Linux/手机)
    • 🛠️ 常用管理命令(可选)
    • 🔐 安全建议
    • ✅ 总结
    • ❓ 常见问题

🌟手把手教你用 Docker 搭建私有远程桌面服务:RustDesk 自托管全攻略(小白友好)

还在为远程控制电脑而烦恼?TeamViewer、AnyDesk 虽然好用,但速度慢、连接不稳定,还可能被检测为商业用途而断开连接?别担心,今天我来教大家一个完全免费、安全可控、性能超强的替代方案 —— 自托管 RustDesk 服务

只需要一台云服务器(比如阿里云、腾讯云、VPS),几分钟就能搭建属于你自己的远程桌面系统,数据不经过第三方,安全又快速,全家人都能用,办公、远程维护、游戏串流统统搞定!

而且本教程提供一键部署脚本 + 完整配置文件,全程“傻瓜式”操作,哪怕你是 Linux 新手也能轻松上手!


📌 什么是 RustDesk?为什么要自托管?

RustDesk 是一款开源的远程桌面软件,界面简洁、跨平台支持(Windows/macOS/Linux/Android/iOS),功能媲美 TeamViewer。

但使用官方服务器可能会有:

  • 连接延迟高
  • 中继服务器拥堵
  • 数据经过第三方,隐私风险

自托管就是:把 RustDesk 的服务器部署在你自己的服务器上,所有数据都走你自己的网络,速度快、更安全、完全私有

✅ 适合个人使用、家庭共享、企业内网远程支持等场景。


🧰 准备工作

在开始前,请确保你有以下准备:

项目 说明 一台云服务器 推荐 1核2G,系统:Ubuntu 20.04/22.04 或 CentOS 7+ 公网 IP 大多数 VPS 都自带 基础命令行操作能力 会复制粘贴命令即可 😄 开放指定端口 确保防火墙放行 21115~21119 端口

💡 提示:推荐使用腾讯云轻量应用服务器、阿里云 ECS 或海外 VPS(如 AWS Lightsail、Vultr)


🚀 第一步:创建项目目录

登录你的服务器(使用 SSH 工具如 Xshell、FinalShell 或终端):

# 创建一个专门存放 RustDesk 的文件夹mkdir rustdesk-server && cd rustdesk-server

📄 第二步:准备配置文件(docker-compose.yml)

我们将使用 Docker Compose 来管理服务,简单又稳定。

创建 docker-compose.yml 文件:

nano docker-compose.yml

将以下内容粘贴进去(支持自动缩进):

version: \'3.8\'# RustDesk 远程桌面服务# 用于建立私有的远程桌面连接服务networks: rustdesk-net: driver: bridge external: falseservices: # 信号服务器 - 负责 ID 注册和心跳服务 hbbs: container_name: rustdesk-hbbs image: rustdesk/rustdesk-server:latest command: hbbs -r 127.0.0.1:21117 -k _ restart: unless-stopped ports: - \"21115:21115\" # NAT 类型测试 - \"21116:21116/tcp\" # TCP 打洞连接服务 - \"21116:21116/udp\" # ID 注册和心跳服务 - \"21118:21118\" # Web 客户端支持 volumes: - ./data/hbbs:/root networks: - rustdesk-net depends_on: - hbbr deploy: resources: limits: memory: 512M cpus: \'0.25\' reservations: memory: 256M cpus: \'0.1\' # 中继服务器 - 负责流量转发 hbbr: container_name: rustdesk-hbbr image: rustdesk/rustdesk-server:latest command: hbbr -k _ restart: unless-stopped ports: - \"21117:21117\" # 中继服务 - \"21119:21119\" # Web 客户端中继支持 volumes: - ./data/hbbr:/root networks: - rustdesk-net deploy: resources: limits: memory: 512M cpus: \'0.25\' reservations: memory: 256M cpus: \'0.1\'

保存并退出:

  • Ctrl + O → 回车 → Ctrl + X

⚙️ 第三步:下载启动脚本(start.sh)

我们准备了一个“全自动”启动脚本,包含检查、部署、防火墙配置、信息显示等功能。

创建脚本文件:

nano start.sh

粘贴以下内容:

#!/bin/bash# RustDesk 远程桌面服务启动脚本# 用于快速部署和管理 RustDesk 服务set -e# 颜色定义RED=\'\\033[0;31m\'GREEN=\'\\033[0;32m\'YELLOW=\'\\033[1;33m\'BLUE=\'\\033[0;34m\'NC=\'\\033[0m\' # No Color# 打印带颜色的消息print_info() { echo -e \"${BLUE}[信息]${NC} $1\"}print_success() { echo -e \"${GREEN}[成功]${NC} $1\"}print_warning() { echo -e \"${YELLOW}[警告]${NC} $1\"}print_error() { echo -e \"${RED}[错误]${NC} $1\"}# 检查 Docker 是否安装check_docker() { if ! command -v docker &> /dev/null; then print_error \"Docker 未安装,请先安装 Docker\" exit 1 fi if ! command -v docker compose &> /dev/null; then print_error \"Docker Compose 未安装,请先安装 Docker Compose\" exit 1 fi}# 检查端口是否可用check_ports() { print_info \"检查端口占用情况...\" local ports=(21115 21116 21117 21118 21119) local occupied_ports=() for port in \"${ports[@]}\"; do if netstat -tuln | grep -q \":$port \"; then occupied_ports+=($port) fi done if [ ${#occupied_ports[@]} -gt 0 ]; then print_warning \"以下端口已被占用: ${occupied_ports[*]}\" print_warning \"请确保这些端口可用或修改配置文件中的端口设置\" else print_success \"所需端口都可用\" fi}# 创建数据目录create_directories() { print_info \"创建数据目录...\" mkdir -p ./data/hbbs ./data/hbbr print_success \"数据目录创建完成\"}# 配置防火墙configure_firewall() { print_info \"配置防火墙规则...\" # 检查是否有 ufw if command -v ufw &> /dev/null; then print_info \"使用 ufw 配置防火墙...\" ufw allow 21115/tcp >/dev/null 2>&1 || true ufw allow 21116/tcp >/dev/null 2>&1 || true ufw allow 21116/udp >/dev/null 2>&1 || true ufw allow 21117/tcp >/dev/null 2>&1 || true ufw allow 21118/tcp >/dev/null 2>&1 || true ufw allow 21119/tcp >/dev/null 2>&1 || true print_success \"ufw 防火墙规则配置完成\" elif command -v firewall-cmd &> /dev/null; then print_info \"使用 firewall-cmd 配置防火墙...\" firewall-cmd --permanent --add-port=21115/tcp >/dev/null 2>&1 || true firewall-cmd --permanent --add-port=21116/tcp >/dev/null 2>&1 || true firewall-cmd --permanent --add-port=21116/udp >/dev/null 2>&1 || true firewall-cmd --permanent --add-port=21117/tcp >/dev/null 2>&1 || true firewall-cmd --permanent --add-port=21118/tcp >/dev/null 2>&1 || true firewall-cmd --permanent --add-port=21119/tcp >/dev/null 2>&1 || true firewall-cmd --reload >/dev/null 2>&1 || true print_success \"firewall-cmd 防火墙规则配置完成\" else print_warning \"未检测到支持的防火墙工具,请手动配置防火墙\" print_warning \"需要开放端口: 21115-21119 (TCP), 21116 (UDP)\" fi}# 启动服务start_services() { print_info \"启动 RustDesk 服务...\" # 拉取最新镜像 print_info \"拉取最新的 Docker 镜像...\" docker compose pull # 启动服务 docker compose up -d print_success \"RustDesk 服务启动完成\"}# 显示服务状态show_status() { print_info \"检查服务状态...\" sleep 5 echo \"\" print_info \"容器状态:\" docker compose ps echo \"\" print_info \"服务日志 (最近10行):\" docker compose logs --tail=10}# 获取服务器信息get_server_info() { echo \"\" print_info \"获取服务器配置信息...\" # 等待密钥文件生成 local max_wait=30 local wait_time=0 while [ ! -f \"./data/hbbs/id_ed25519.pub\" ] && [ $wait_time -lt $max_wait ]; do sleep 1 wait_time=$((wait_time + 1)) done if [ -f \"./data/hbbs/id_ed25519.pub\" ]; then local public_key=$(cat ./data/hbbs/id_ed25519.pub) local server_ip=$(curl -s ifconfig.me 2>/dev/null || echo \"请手动获取服务器公网IP\") echo \"\" print_success \"RustDesk 服务器配置信息:\" echo \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\" echo -e \"📡 ${BLUE}ID 服务器:${NC} $server_ip:21116\" echo -e \"🔄 ${BLUE}中继服务器:${NC} $server_ip:21117\" echo -e \"🔑 ${BLUE}服务器密钥:${NC} $public_key\" echo \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\" echo \"\" print_info \"客户端配置步骤:\" echo \"1. 下载 RustDesk 客户端: https://rustdesk.com/ \" echo \"2. 点击 ID 右侧的设置按钮(三个点)\" echo \"3. 选择 \'ID/中继服务器\'\" echo \"4. 输入上述服务器信息\" echo \"\" else print_warning \"密钥文件尚未生成,请稍后运行以下命令获取密钥:\" echo \"cat ./data/hbbs/id_ed25519.pub\" fi}# 显示帮助信息show_help() { echo \"RustDesk 远程桌面服务管理脚本\" echo \"\" echo \"用法: $0 [选项]\" echo \"\" echo \"选项:\" echo \" start 启动 RustDesk 服务\" echo \" stop 停止 RustDesk 服务\" echo \" restart 重启 RustDesk 服务\" echo \" status 查看服务状态\" echo \" logs 查看服务日志\" echo \" key 显示服务器密钥\" echo \" info 显示服务器配置信息\" echo \" update 更新 RustDesk 服务\" echo \" help 显示帮助信息\" echo \"\"}# 主函数main() { local action=${1:-start} case $action in \"start\") print_info \"开始部署 RustDesk 远程桌面服务...\" check_docker check_ports create_directories configure_firewall start_services show_status get_server_info ;; \"stop\") print_info \"停止 RustDesk 服务...\" docker compose down print_success \"RustDesk 服务已停止\" ;; \"restart\") print_info \"重启 RustDesk 服务...\" docker compose restart print_success \"RustDesk 服务已重启\" ;; \"status\") docker compose ps ;; \"logs\") docker compose logs -f ;; \"key\") if [ -f \"./data/hbbs/id_ed25519.pub\" ]; then print_info \"服务器公钥:\" cat ./data/hbbs/id_ed25519.pub else print_error \"密钥文件不存在,请先启动服务\" fi ;; \"info\") get_server_info ;; \"update\") print_info \"更新 RustDesk 服务...\" docker compose pull docker compose up -d print_success \"RustDesk 服务更新完成\" ;; \"help\"|\"--help\"|\"-h\") show_help ;; *) print_error \"未知操作: $action\" show_help exit 1 ;; esac}# 进入脚本目录cd \"$(dirname \"$0\")\"# 执行主函数main \"$@\"

保存退出:Ctrl + O → 回车 → Ctrl + X


🔧 第四步:安装 Docker(如果还没装)

运行以下命令一键安装 Docker 和 Docker Compose:

# 安装 Dockercurl -fsSL https://get.docker.com | bash# 安装 Docker Compose(v2+)sudo apt install docker-compose -y

⚠️ 注意:CentOS 用户可能需要额外启用 EPEL 源。


▶️ 第五步:运行脚本,一键部署!

给脚本添加执行权限并运行:

chmod +x start.sh./start.sh start

你会看到:

  • 自动检查环境
  • 创建数据目录
  • 配置防火墙
  • 拉取镜像
  • 启动容器
  • 最后输出你的服务器信息!

部署完成后,你会看到类似这样的输出:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━📡 ID 服务器: 123.123.123.123:21116🔄 中继服务器: 123.123.123.123:21117🔑 服务器密钥: your-public-key-here━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

记下这些信息,马上要用!


🖥️ 第六步:客户端配置(Windows/Mac/Linux/手机)

  1. 前往 https://rustdesk.com/ 下载客户端
  2. 打开软件,点击右上角 ID 旁边的 三个点(…)
  3. 选择 “ID/中继服务器”
  4. 填入刚才获取的信息:
    • ID 服务器你的公网IP:21116
    • 中继服务器你的公网IP:21117
    • 服务器密钥:粘贴你看到的公钥
  5. 点击“应用”或“确定”

✅ 完成!现在你就可以用自建服务器连接远程设备了!


🛠️ 常用管理命令(可选)

你的 start.sh 支持以下命令:

命令 说明 ./start.sh start 启动服务 ./start.sh stop 停止服务 ./start.sh restart 重启服务 ./start.sh status 查看运行状态 ./start.sh logs 查看实时日志 ./start.sh info 显示服务器配置信息 ./start.sh update 更新到最新版本

🔐 安全建议

  • 不要将服务器密钥泄露给他人
  • 可以考虑使用域名 + HTTPS(配合 Nginx 反向代理)
  • 定期运行 ./start.sh update 保持更新
  • 如果用于生产环境,建议开启防火墙并限制 IP 访问

✅ 总结

通过本教程,你已经成功搭建了一个完全私有、高速稳定、永久免费的远程桌面服务!

🎉 优势一览

  • 🚫 不依赖官方服务器
  • 🔐 数据完全掌握在自己手中
  • ⚡ 连接速度快,延迟低
  • 💻 支持多平台,全家都能用
  • 📦 一键部署,小白也能搞定

❓ 常见问题

Q:连接失败怎么办?
A:检查服务器防火墙是否放行 21115~21119 端口,尤其是 UDP 21116。

Q:能否用域名访问?
A:可以!绑定域名后,可通过 Nginx 反向代理支持 Web 客户端。

Q:手机能用吗?
A:当然可以!安卓和 iOS 都有 RustDesk App,配置方式一样。

Q:是否支持 Web 客户端?
A:支持!访问 http://你的IP:21118 即可使用网页版。


📌 喜欢这篇教程?欢迎收藏、分享给朋友!


你的远程桌面,从此由你掌控!🚀