基于RustDesk自建服务器实战指南(跨平台免费远程控制安卓设备)

基于RustDesk自建服务器实战指南(跨平台免费多设备远程控制)

文章目录

前言

在当今多设备互联的时代,远程控制技术 已成为企业远程运维、个人技术支持和跨设备协作的重要工具。特别是对安卓设备的远程控制需求日益增长,从协助长辈解决手机使用问题,到企业批量管理移动设备,都离不开高效可靠的远程控制方案。

然而,实现高质量的安卓设备远程控制面临诸多技术挑战:系统权限限制 是最大障碍,安卓系统沙盒安全机制和权限隔离使得免Root控制异常困难;网络环境复杂性 包括NAT穿透、防火墙限制和延迟抖动等问题;跨平台兼容性 要求解决方案能覆盖Windows、macOS、iOS和Android等多种操作系统;安全性与隐私保护更是重中之重,需要防范未授权访问和数据泄露风险。

一、主流远程控制方案全景解析

在深入探讨自建服务器方案之前,我们有必要对当前主流的远程控制方案进行一次全面的梳理与分析。根据其服务架构和技术实现,市面上的远程控制解决方案大致可以分为三类,各具特色,也各有取舍。

三大技术架构的博弈

  1. 成熟商用软件(SaaS模式)

    • 代表产品:ToDesk、向日葵、AnyDesk、TeamViewer
    • 核心逻辑:使用服务商提供的统一中继服务器集群,用户通过注册账户实现设备发现和连接。开箱即用,无需关心网络环境。
    • 优点:部署简单,功能丰富(如远程文件、远程终端、高清模式),通常有跨平台客户端支持。
    • 缺点数据流经第三方服务器 ,对隐私敏感场景存在顾虑;免费版本在速度、分辨率、功能上有明确限制;个人使用可能因高频触发而被判定为商用导致限速或付费
  2. IP直达(点对点直连)

    • 代表技术:Windows RDP、VNC、通过VPN打通内网后的SSH/远程桌面
    • 核心逻辑:控制端通过IP地址(或主机名)直接访问被控端,不依赖第三方服务器中转。
    • 优点延迟最低 ,连接质量最优;数据不出私网,安全性高。
    • 缺点极度依赖网络环境 ,要求两端至少一端拥有公网IP,或已通过VPN/内网穿透等技术处于同一局域网,配置复杂,对普通用户极不友好
  3. 自建服务器(私有化部署)

    • 代表方案:RustDesk、部分企业级远程管理系统的私有化部署版
    • 核心逻辑:用户在自有服务器上搭建中继服务,替代商业软件的中转服务器,实现"自主可控"。
    • 优点数据完全私密,连接速度和稳定性取决于自有服务器质量,可摆脱商业软件的各种限制,长期成本可预期。
    • 缺点 :存在一定的初始部署和技术维护成本,需要用户具备基础的服务器运维能力。

聚焦安卓:商用方案的"甜蜜"与"痛点"

针对控制安卓设备这一细分场景,市面上也涌现了诸多解决方案。我们将几款主流工具对安卓设备的控制能力与痛点整理如下:

工具名称 控制安卓能力 核心优势 主要痛点与槽点
ToDesk 支持 连接速度快,国产软件对国内网络优化好,免费版相对良心。 免费版存在设备数量限制和单日使用时长提示 ;高峰期部分节点可能出现连接繁忙;被控安卓端需保持App在前台。
向日葵 支持 生态完整,软硬件结合好(如开机棒),功能全面。 免费版画质和帧率限制明显 ,操作有卡顿感;部分高级功能(如摄像头、远程文件)需付费;同样存在节点繁忙问题。
AirDroid 支持 专注移动设备,除远程控制外,文件管理、通知同步等功能丰富。 免费版有月度流量限制,远程控制画质一般;部分功能需付费订阅;纯粹的互联网中转,隐私性依赖厂商。
AnyDesk 支持 客户端轻量,连接建立快,界面简洁。 个人免费使用,但频繁的商业用途检测可能导致中断;对中文和国内网络环境的优化一般。
TeamViewer 支持 老牌巨头,功能稳定,企业级功能强大。 对个人用户识别极其严格 ,极易被误判为商业用途而强制付费,对普通用户已基本不友好
小X远程等工具 参差不齐 通常主打"免Root"控制,App本身可能更轻量。 核心痛点在于安全性存疑 (非开源,权限过高),功能单一,连接稳定性无保障,可能存在潜在风险

总结痛点如下:

  • 画质与流畅度困境:免费版通常被限制在较低的分辨率和帧率,远程操作手机时卡顿、模糊是常态。
  • 功能与收费博弈:诸如高清模式、文件自由传输、多设备同时在线等实用功能,常常是付费才能解锁的"特权"。
  • 隐私的隐形代价:所有远程画面、操作指令都流经服务商服务器,尽管大厂承诺安全,但对敏感场景而言始终是"心结"。
  • 稳定性的不确定性:共享的公共中继节点,在高峰期可能面临拥堵,导致连接失败或延迟飙升。

破局之路:为什么选择自建服务器?

面对商用软件的种种限制与隐私忧虑,自建服务器 方案提供了一条截然不同的"破局之路"。其核心价值在于将控制权彻底交还给用户

通过在自己的服务器上部署中继服务(如RustDesk的hbbs/hbbr),你构建了一个完全私有的远程控制网络。所有连接数据在你的服务器和两端设备之间流转,不再"过别人的手"。这意味着:

  1. 隐私的绝对保障:敏感操作画面和指令不再经由任何第三方服务器,从根源上杜绝了潜在的窥探风险。
  2. 性能的自主掌控 :连接速度和画质上限,完全取决于你为服务器配置的带宽和硬件性能,一分钱一分体验,不再受免费套餐的"卡脖子"。
  3. 成本的可预期性:一次部署,长期使用。除了服务器的租赁费用(通常每月几十元即可获得不错体验),没有按设备、按时长、按功能的额外付费,长期成本透明且可控。
  4. 无限制的自由:连接设备数量、使用时长、所有高级功能,均由你部署的软件版本决定,通常开源方案的功能是完整开放的。

当然,这种"自由"是有门槛的,它要求你具备基础的Linux服务器操作和网络知识,并愿意投入数小时进行初始的部署和配置。但这份投入带来的回报是持久且丰厚的。

在自建服务器的阵营中,RustDesk 因其开源免费、部署相对简单、性能优秀、跨平台支持完善 (包括对安卓的良好支持)而脱颖而出,成为技术爱好者和小型团队的首选。当然,除了RustDesk,你也可以通过组合Tailscale/VPN + scrcpy/原生VNC的方案实现更底层的直连控制,但这通常需要更高的技术门槛。如果有机会再后续的文章当中都会给大家讲到。

本文接下来的重点,就将聚焦于 RustDesk自建服务器 这一方案,手把手带你从零开始,搭建一个完全属于你自己的、高性能、高私密的远程控制中心。下面会依次介绍RustDesk服务端搭的建教程,包含到常用的安装方式还有操作系统。

RustDesk相关链接

官方介绍:https://rustdesk.com/zh/

服务下载地址:https://github.com/rustdesk/rustdesk-server/releases

客户端下载地址:https://rustdesk.com/zh/ 支持IOS、Mac、Windows、Android、Linux等!

二、使用Docker搭建RustDesk服务端教程

下面我们就开始动手进行操作,理论上Docker不限制任何的操作系统还有环境,基本上所有的操作系统都支持,这里的话我们就使用CentOS 7和Docker来搭建一个RustDesk服务器。闲麻烦的话可以跳转后面的脚本一键部署,方便快捷。

关于docker的使用,可以参考我之前的blog:
Docker入门 --- 简单安装及部署 | Docker进阶 --- 一文掌握Docker 入门到精通

(一)环境检查与配置

在开始部署之前,我们需要确保你的CentOS 7服务器已经准备就绪。以下是需要检查和完善的准备工作。
1.服务器需求检查

  • 操作系统:确认你的系统是CentOS 7.x版本。你可以在终端中执行 cat /etc/redhat-release来查看。

  • 硬件要求:RustDesk服务端(hbbs/hbbr)资源需求不高。1核1GB内存是基础,但建议使用1核2GB内存或更高的配置,以确保在多设备连接时依然流畅。存储空间有10GB以上即可。

  • 网络要求:这是最关键的一步。你需要一台拥有公网IP地址的服务器。(当然没有公网IP也不着急,且看 后续的文章)并确保服务器的防火墙(如firewalld)或云服务商的安全组规则已经开放了以下必需的端口:

协议 端口号 用途说明
TCP 21115-21119 用于信令服务、中继服务、Web客户端等
UDP 21116 用于点对点连接和心跳检测

开放防火墙端口的命令示例:

shell 复制代码
# 启动firewalld(如果未启动)
sudo systemctl start firewalld 
sudo systemctl enable firewalld  # 设置开机自启动

# 开放TCP 21115-21119端口
sudo firewall-cmd --permanent --add-port=21115-21119/tcp
# 开放UDP 21116端口
sudo firewall-cmd --permanent --add-port=21116/udp
# 重新加载防火墙配置使其生效
sudo firewall-cmd --reload
# 查看已开放的端口,确认配置成功
sudo firewall-cmd --list-ports
# 查看防火墙状态
sudo systemctl status firewalld

看到输出"21115-21119/tcp 21116/udp"表示我们的相关端口已经放通了。

2.安装Docker环境

如果你的系统还没有安装Docker,请依次执行以下命令进行安装。这些命令会添加Docker的官方镜像源并使用国内镜像加速下载。

shell 复制代码
# 1. 卸载旧版本的Docker(如果有)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2. 安装必要的工具包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 vim

# 3. 设置稳定的Docker镜像仓库(使用国内阿里云源)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4. 更新yum软件包索引(可选)
sudo yum makecache fast

# 5. 安装最新版本的Docker Engine和Containerd
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 6. 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 7. 验证Docker是否安装成功(如果能正常输出版本号则成功)
docker --version


3.安装Docker Compose

Docker Compose是一个用于定义和运行多容器Docker应用的工具。我们将使用它来编排RustDesk服务,这比直接使用docker run命令更便于管理。

GitHub发布页:https://github.com/docker/compose/releases

可以使用uname命令查看自己对于的linux版本。

下面这个就是我们要要的,复制下载链接:

shell 复制代码
# 下载Docker Compose的特定版本(例如5.0.1),你可以从GitHub发布页获取最新稳定版的下载链接
#sudo curl -L "https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予下载的二进制文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 创建符号链接,以便在终端中直接使用docker-compose命令
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 验证安装是否成功
docker-compose --version

(二)使用Docker Compose部署RustDesk

一切准备就绪,现在开始最核心的部署步骤。我们将使用一个docker-compose.yml文件来定义和启动所有服务。
1.创建部署目录和编写配置文件

首先,创建一个独立的目录来存放所有配置和数据,这样非常整洁且易于维护。

shell 复制代码
# 创建目录并进入
sudo mkdir -p /opt/rustdesk-server
cd /opt/rustdesk-server

然后,创建并编辑docker-compose.yml文件。

shell 复制代码
sudo vim docker-compose.yml

将以下配置内容粘贴到文件中。请务必将 <你的服务器公网IP地址> 替换为你CentOS服务器的真实公网IP。并根据后文看是否使用-k参数,建议使用并配置为自己密码。

json 复制代码
services:
  hbbs:
    container_name: rustdesk-hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r <你的服务器公网IP地址>:21116 -k _your_secure_key_123456
    volumes:
      - ./data:/root
    ports:
      - "21115:21115"
      - "21116:21116/tcp"
      - "21116:21116/udp"
      - "21118:21118/tcp"
    networks:
      - rustdesk-net
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "pgrep", "hbbs"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  hbbr:
    container_name: rustdesk-hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr -k _your_secure_key_123456
    volumes:
      - ./data:/root
    ports:
      - "21117:21117/tcp"
      - "21119:21119/tcp"
    networks:
      - rustdesk-net
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "pgrep", "hbbr"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  rustdesk-net:
    driver: bridge

配置参数详解:

很多新手容易忽略配置里的细节,这里特意拆解关键参数,避免踩坑:

  • 容器核心组件: RustDesk 服务依赖hbbs(中继注册服务器)和hbbr(中继转发服务器)两个核心容器,缺一不可。
  • command命令参数: hbbs -r <IP>:21116 -k <密码>
    -- -r:指定hbbs的公网 IP 和端口(固定 21116),客户端会通过这个地址完成设备注册。该参数至关重要,它告诉客户端如何连接到你的中继服务器。后面的IP必须是公网IP。
    -- -k:设置加密连接密钥,、加强连接的安全性。请将 _your_secure_key_123456替换为一个你自己定义的、复杂的密码(如:-k MySecureKey_2025!)。如果使用-k,hbbs启动时会自动生成一对非对称密钥对。
  • volumes: 数据卷映射:./data:/root 会把容器内的配置和设备数据映射到宿主机的/opt/rustdesk-server/data目录,后续重装容器也不会丢失数据。
  • ports: 端口说明RustDesk 需要占用21115-21119端口,其中21116同时需要 TCP 和 UDP 协议。将容器内部的端口映射到宿主机,使得外部可以访问RustDesk服务。注意配置防火墙时要重点放行。
  • restart: unless-stopped:确保容器在异常退出或Docker守护进程重启时自动重新启动,提高服务可靠性。
    编辑完成后,按 Esc键,然后输入 :wq保存并退出vim编辑器。

2.启动RustDesk服务

在docker-compose.yml文件所在的目录下,执行以下命令来启动服务

shell 复制代码
sudo docker-compose up -d

-d参数表示在后台运行(守护进程模式)。如果一切正常,你会看到类似下面的输出:

你可以使用以下命令检查容器的运行状态:

shell 复制代码
sudo docker-compose ps

如果两个服务的状态(State)都显示为 "Up" ,那么恭喜你,部署已经成功!

3. 获取关键密钥信息

设置了密码的可以跳过该步骤,因为我也没找到公钥。理论上部署成功后,密钥文件已经生成在 /opt/rustdesk-server/data目录下。如果之前没有使用-k参数,才需要查看公钥。

shell 复制代码
# 查看生成的id_ed25519.pub公钥文件内容
sudo cat /opt/rustdesk-server/data/id_ed25519.pub

# 生成的公钥类似这样
7SRdnwqxCbndEAan/ukzmSS9bBNz3vMLTAncvcQlK6I=

请完整记录下终端输出的这一长串公钥字符串(它以一串字母数字开始)。如果你是通过 -k指定了固定密钥,则客户端配置时直接使用该密钥。
这个Key是客户端能够安全连接到你的私服的关键凭证,请妥善保管。

(三)客户端配置与连接测试

现在,你的私有RustDesk服务器已经搭建完毕。接下来需要在控制端和被控端的RustDesk客户端上进行配置。
1. 下载客户端 :从 RustDesk官网为你需要使用的设备(Windows, macOS, Linux, Android, iOS)下载并安装客户端。

Android:https://github.com/rustdesk/rustdesk/releases/download/1.4.5/rustdesk-1.4.5-universal-signed.apkhttps://github.com/rustdesk/rustdesk/releases/download/1.4.5/rustdesk-1.4.5-aarch64-signed.apk

Windows:https://github.com/rustdesk/rustdesk/releases/download/1.4.5/rustdesk-1.4.5-x86_64.exehttps://github.com/rustdesk/rustdesk/releases/download/1.4.5/rustdesk-1.4.5-x86_64.msi

iOS:https://apps.apple.com/us/app/rustdesk-remote-desktop/id1581225015

Mac:https://apps.apple.com/us/app/rustdesk-remote-desktop/id1581225015

其余的自行去网站上看,如无法打卡github,请多尝试几次。

2. 配置客户端:

  • 打开RustDesk客户端。
  • 点击左上角的"菜单"图标(三条横线),进入 设置 -> 网络。
  • 在 ID服务器 和 中继服务器 中,填写你的CentOS服务器的公网IP地址。
  • 在 Key 中,填写你在上一步骤中获取的公钥字符串或你自定义的固定密钥。

3. 应用并重启 点击"应用",然后完全退出并重新启动RustDesk客户端,使配置生效。

4. 开始连接:

  • 在被控安卓设备上,RustDesk客户端会显示本机的ID和临时密码。
  • 在控制端(如你的电脑)的RustDesk客户端输入被控端的ID和密码,即可建立连接!此时,所有数据都将通过你自建的服务器进行传输。

至此,你已经成功在CentOS 7上利用Docker搭建了一个完全私有的RustDesk远程控制服务器。享受高速、安全、无限制的远程控制体验吧!如果遇到任何问题,欢迎在评论区留言讨论。

一键部署脚本(五星推荐)

为了方便部署,这里提供一个完整的自动化部署脚本:

shell 复制代码
#!/bin/bash
# RustDesk 私有化部署一键脚本(适配 CentOS 7)
# 作者:Xenon Young
# 使用方法:sudo chmod +x deploy-rustdesk.sh && sudo ./deploy-rustdesk.sh
# 注意:执行前请修改下方「配置变量」中的服务器IP和自定义密钥

set -euo pipefail  # 严格模式:出错立即退出,未定义变量报错,管道错误传递

# ======================== 配置变量(请根据实际情况修改)========================
SERVER_PUBLIC_IP="x.x.x.x"  # 替换为你的服务器公网IP
CUSTOM_SECRET_KEY="A@123!"   # 替换为你的自定义加密密钥(建议包含大小写+数字+特殊字符)
RUSTDESK_VERSION="latest"       # RustDesk镜像版本(推荐latest或1.2.3)
DATA_DIR="/opt/rustdesk-server" # 部署目录(数据持久化路径)
DOCKER_COMPOSE_VERSION="v5.0.1" # Docker Compose版本
# ==============================================================================

# 颜色输出函数(增强可读性)
red() { echo -e "\033[31m$1\033[0m"; }
green() { echo -e "\033[32m$1\033[0m"; }
yellow() { echo -e "\033[33m$1\033[0m"; }
blue() { echo -e "\033[34m$1\033[0m"; }

# 第一步:系统环境检查
blue "===== 1/12 系统环境检查 ====="
if [ ! -f /etc/redhat-release ] || ! grep -q "CentOS Linux 7" /etc/redhat-release; then
    red "错误:本脚本仅支持 CentOS 7 系统!"
    exit 1
fi
green "✅ 系统检测通过:CentOS 7"

# 第二步:安装基础依赖
blue "===== 2/12 安装基础依赖 ====="
yum install -y yum-utils device-mapper-persistent-data lvm2 curl wget net-tools tar > /dev/null 2>&1
green "✅ 基础依赖安装完成"

# 第三步:卸载旧版Docker(如有)
blue "===== 3/12 清理旧版Docker ====="
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine > /dev/null 2>&1
green "✅ 旧版Docker清理完成"

# 第四步:安装Docker(阿里云源,加速下载)
blue "===== 4/12 安装Docker ====="
if ! command -v docker &> /dev/null; then
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo > /dev/null 2>&1
    yum install -y docker-ce docker-ce-cli containerd.io > /dev/null 2>&1
    # 启动Docker并设置开机自启
    systemctl start docker
    systemctl enable docker > /dev/null 2>&1
    green "✅ Docker安装并启动成功"
else
    yellow "⚠️ Docker已安装,跳过此步骤"
fi

# 第五步:配置Docker镜像加速(解决拉取镜像超时)
blue "===== 5/12 配置Docker镜像加速 ====="
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
systemctl daemon-reload
systemctl restart docker
green "✅ Docker镜像加速配置生效"

# 第六步:安装Docker Compose(多加速链接兜底)
blue "===== 6/12 安装Docker Compose ====="
COMPOSE_BIN="/usr/local/bin/docker-compose"
if ! command -v docker-compose &> /dev/null; then
    # 定义多个加速链接,失败自动切换
    COMPOSE_URLS=(
        "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64"
        "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64"
        "https://gh.xxooo.cf/https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64"
    )
    # 尝试下载,直到成功
    for url in "${COMPOSE_URLS[@]}"; do
        yellow "🔄 尝试从链接下载:$url"
        if curl -L "$url" -o "$COMPOSE_BIN" --connect-timeout 10; then
            chmod +x "$COMPOSE_BIN"
            ln -s "$COMPOSE_BIN" /usr/bin/docker-compose > /dev/null 2>&1
            green "✅ Docker Compose安装成功"
            break
        fi
    done
    # 检查是否下载成功
    if [ ! -x "$COMPOSE_BIN" ]; then
        red "❌ Docker Compose下载失败,请手动下载后重新执行脚本!"
        exit 1
    fi
else
    yellow "⚠️ Docker Compose已安装,跳过此步骤"
fi

# 第七步:创建部署目录
blue "===== 7/12 创建部署目录 ====="
mkdir -p "${DATA_DIR}" && cd "${DATA_DIR}"
green "✅ 部署目录创建完成:${DATA_DIR}"

# 第八步:生成优化后的docker-compose.yml(修复健康检查、移除过时字段)
blue "===== 8/12 生成docker-compose配置文件 ====="
cat > docker-compose.yml << EOF
services:
  hbbs:
    container_name: rustdesk-hbbs
    image: rustdesk/rustdesk-server:${RUSTDESK_VERSION}
    command: hbbs -r ${SERVER_PUBLIC_IP}:21116 -k ${CUSTOM_SECRET_KEY}
    volumes:
      - ./data:/root
    ports:
      - "21115:21115/tcp"
      - "21116:21116/tcp"
      - "21116:21116/udp"
      - "21118:21118/tcp"
    networks:
      - rustdesk-net
    restart: unless-stopped
    # 适配极简镜像的健康检查(无pgrep/curl,用端口检测)
    healthcheck:
      test: ["CMD", "sh", "-c", "exec 3<>/dev/tcp/localhost/21116 && exec 3<&- && exec 3>&-"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  hbbr:
    container_name: rustdesk-hbbr
    image: rustdesk/rustdesk-server:${RUSTDESK_VERSION}
    command: hbbr -k ${CUSTOM_SECRET_KEY}
    volumes:
      - ./data:/root
    ports:
      - "21117:21117/tcp"
      - "21119:21119/tcp"
    networks:
      - rustdesk-net
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "sh", "-c", "exec 3<>/dev/tcp/localhost/21117 && exec 3<&- && exec 3>&-"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  rustdesk-net:
    driver: bridge
EOF
green "✅ docker-compose.yml配置文件生成完成"

# 第九步:配置防火墙(放行端口)
blue "===== 9/12 配置防火墙规则 ====="
if systemctl is-active --quiet firewalld; then
    firewall-cmd --permanent --add-port=21115-21119/tcp > /dev/null 2>&1
    firewall-cmd --permanent --add-port=21116/udp > /dev/null 2>&1
    firewall-cmd --reload > /dev/null 2>&1
    green "✅ 防火墙端口放行完成(21115-21119 TCP + 21116 UDP)"
else
    yellow "⚠️ firewalld未启动,跳过防火墙配置(请确保云安全组放行端口)"
fi

# 第十步:拉取RustDesk镜像(多源兜底)
blue "===== 10/12 拉取RustDesk镜像 ====="
# 优先拉取官方镜像
if ! docker pull rustdesk/rustdesk-server:${RUSTDESK_VERSION} > /dev/null 2>&1; then
    yellow "🔄 官方镜像拉取失败,尝试阿里云备用源..."
    if docker pull registry.cn-hangzhou.aliyuncs.com/rustdesk/rustdesk-server:${RUSTDESK_VERSION} > /dev/null 2>&1; then
        docker tag registry.cn-hangzhou.aliyuncs.com/rustdesk/rustdesk-server:${RUSTDESK_VERSION} rustdesk/rustdesk-server:${RUSTDESK_VERSION} > /dev/null 2>&1
        green "✅ 备用源镜像拉取并重命名成功"
    else
        red "❌ 镜像拉取失败!请手动下载镜像包后执行以下命令导入:"
        echo "   1. 下载:wget https://mirror.ghproxy.com/https://github.com/rustdesk/rustdesk-server/releases/download/1.2.3/rustdesk-server-x86_64.tar.gz"
        echo "   2. 解压:tar -zxvf rustdesk-server-x86_64.tar.gz"
        echo "   3. 导入:docker load < hbbs.tar.gz && docker load < hbbr.tar.gz"
        echo "   4. 打标签:docker tag rustdesk/rustdesk-server-hbbs:latest rustdesk/rustdesk-server:latest"
        exit 1
    fi
else
    green "✅ 官方镜像拉取成功"
fi

# 第十一步:启动RustDesk服务
blue "===== 11/12 启动RustDesk服务 ====="
docker-compose up -d > /dev/null 2>&1
sleep 5  # 等待服务启动
# 检查容器状态
if docker-compose ps | grep -q "Up"; then
    green "✅ RustDesk服务启动成功"
else
    red "❌ RustDesk服务启动失败!日志如下:"
    docker-compose logs
    exit 1
fi

# 第十二步:部署完成,输出关键信息
blue "===== 12/12 部署完成 - 关键信息汇总 ====="
green "🎉 RustDesk私有化服务器部署成功!"
echo -e "\n【核心配置信息】"
echo -e "📌 服务器公网IP:\033[33m${SERVER_PUBLIC_IP}\033[0m"
echo -e "🔑 连接密钥:\033[33m${CUSTOM_SECRET_KEY}\033[0m"
echo -e "📁 数据目录:\033[33m${DATA_DIR}/data\033[0m"
echo -e "\n【客户端配置步骤】"
echo -e "1. 下载客户端:https://rustdesk.com/zh/"
echo -e "2. 打开客户端 → 菜单 → 网络 → ID服务器:填写 ${SERVER_PUBLIC_IP}"
echo -e "3. Key:填写 ${CUSTOM_SECRET_KEY} → 应用并重启客户端"
echo -e "\n【常用管理命令】"
echo -e "🔍 查看状态:cd ${DATA_DIR} && docker-compose ps"
echo -e "📄 查看日志:cd ${DATA_DIR} && docker-compose logs -f hbbs/hbbr"
echo -e "⏹️ 停止服务:cd ${DATA_DIR} && docker-compose down"
echo -e "▶️  启动服务:cd ${DATA_DIR} && docker-compose up -d"
echo -e "📝 查看端口:netstat -tulpn | grep -E '2111[5-9]'"

部署后验证

部署完成后,执行以下命令验证服务是否正常运行:

shell 复制代码
# 1. 检查容器状态
cd /opt/rustdesk-server
sudo docker-compose ps

# 2. 查看服务日志
sudo docker-compose logs -f hbbs
sudo docker-compose logs -f hbbr

# 3. 检查端口监听状态
sudo netstat -tlnp | grep -E '2111[5-9]'


三、常见错误

1. 安装过程中 docker-compose-plugin 包下载失败

具体问题如下:

Error downloading packages: docker-compose-plugin-2.27.1-1.el7.x86_64: [Errno 256] No more mirrors to try.

问题原因: 由于 YUM 缓存元数据不一致导致的问题。

解决方式: 清理 YUM 元数据并重试安装,使用以下命令

shell 复制代码
sudo yum --enablerepo=docker-ce-stable clean metadata  #清理元数据缓存
sudo yum install -y docker-ce docker-ce-cli containerd.io  #重试安装

2. 下载Docker Compose失败,Empty reply from server

报错如下:curl: (52) Empty reply from server

解决方式,采用更快的加速链接下载:

txt 复制代码
https://gh.xxooo.cf/https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86_64

https://gh.zwy.one/https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86_64

https://github.limoruirui.com/https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86_64

3. docker pull镜像时网络超时的问题

问题如下: 由于网络的问题导致从官方拉取镜像超时。

解决方法: 使用 GitHub Container Registry 镜像

shell 复制代码
# 1. 从 GitHub Container Registry 拉取
sudo docker pull ghcr.io/rustdesk/rustdesk-server:latest

# 2. 重命名镜像
sudo docker tag ghcr.io/rustdesk/rustdesk-server:latest rustdesk/rustdesk-server:latest

# 3. 启动服务
cd /opt/rustdesk-server
sudo docker-compose up -d

结果如下:

四、后记

本次实战指南从远程控制的核心痛点出发,完整落地了基于 CentOS 7 + Docker 的 RustDesk 私有化服务器搭建全流程:我们从主流远程控制方案的对比分析切入,明确了自建服务器的核心优势;再到环境检查、Docker/Docker Compose 的安装配置、防火墙端口放行,最后完成 RustDesk 服务端部署、客户端配置及连接验证,甚至针对国内网络环境优化了镜像拉取、Docker Compose 下载等关键环节,还提供了可直接复用的一键部署脚本和高频问题解决方案。

通过本次实操,你已经掌握了私有化远程控制服务器的核心逻辑 ------ 不再依赖第三方中继节点,所有数据流转完全自主可控,既解决了商用工具免费版的功能限制、隐私泄露风险,也实现了跨平台(尤其是安卓设备)的稳定远程控制。无论是协助长辈操作手机、个人多设备协作,还是小型团队的远程运维,这套方案都能满足低成本、高私密、无限制的核心需求。

当然,本次内容仅覆盖了 CentOS 7 系统下的 Docker 部署场景,这只是 RustDesk 私有化部署的 "起点"。后续我们会围绕更丰富的使用场景持续补充内容:

  1. 多系统部署适配: 除 CentOS 外,还会讲解 Ubuntu/Debian、Windows 、OpenEuler、红帽等主流操作系统的 RustDesk 部署方案,覆盖物理机、容器化等不同部署形态;
  2. 无公网 IP 解决方案: 针对个人用户无公网 IP 的痛点,详解 FRP/NGROK 内网穿透、Tailscale 组网、路由器 DDNS + 端口映射等多种方案,让内网服务器也能被外网设备访问;
  3. 进阶优化与扩展: 包括 RustDesk 服务端性能调优(端口复用、资源限制、日志清理)、多节点负载均衡部署、访问权限精细化控制(黑白名单、密钥分级);
  4. 轻量化替代方案: 对比测试 "Tailscale/VPN + scrcpy" 的安卓直连方案,兼顾轻量化与低延迟,满足不同场景的性能需求;

技术的价值在于落地,而私有化部署的核心是 "自主可控"。如果你在本次实操中遇到任何问题(如端口放行、镜像拉取、客户端连接失败等),欢迎在评论区留言交流;也期待你分享自己的部署优化经验,我们会持续迭代内容,让更多人能低成本搭建属于自己的远程控制体系。

后续内容将尽快更新,敬请关注!

相关推荐
optimistic_chen2 小时前
【Docker入门】Docker原理和安装
linux·运维·服务器·docker·容器·命令行
北京盟通科技官方账号2 小时前
Docker 容器化部署 EtherNet/IP 协议栈(ESDK):Windows 与国产银河麒麟 V10 实测对比
网络·网络协议·tcp/ip·docker·国产系统·ethernet/ip·工业协议
AIGCExplore2 小时前
Docker环境配置步骤
docker·容器·eureka
zwjapple2 小时前
windows系统docker的mysql端口被占用解决方案
docker·云原生·eureka
CV_J9 小时前
安装kibana
java·elasticsearch·spring cloud·docker·容器
Wzx19801211 小时前
doker深学习
学习·docker
好奇心害死薛猫12 小时前
docker_tailscale
docker·容器
一只懒鱼a12 小时前
docker部署nacos (版本2.3.2)
运维·docker
王九思17 小时前
Podman 介绍
docker·云原生·kubernetes·podman