学习是一种乐趣~
分享是一种美德~

RustDesk 私有化部署终极方案​

方案优势

三合一管理:单文件集成 `hbbs` + `hbbr` + `API服务`
密钥集中管控:所有服务共享同一密钥目录,消除配置不一致风险
跨节点扩展:多服务器统一密钥,客户端无缝切换

 

准备工作(所有操作需 root 权限)

1. 更新系统 & 安装基础工具
sudo -i # 切换 root 用户
apt update && apt upgrade -y
apt install -y curl vim ufw
2. 安装 Docker 与 Docker Compose
# 安装 Docker
curl -fsSL https://get.docker.com | sh

# 安装 Docker Compose 插件(官方推荐)
apt install -y docker-compose-plugin

# 验证安装
docker --version # 输出 Docker 版本
docker compose version # 输出 Compose 版本

 

配置防火墙(关键!)

ufw allow 21115:21119/tcp # TCP端口范围
ufw allow 21116/udp # UDP穿透核心端口
ufw allow 21114/tcp # API服务端口
ufw reload

 

密钥统一生成与管理​​

# 1. 生成ED25519密钥对(所有服务共用)
openssl genpkey -algorithm ed25519 -out id_ed25519
openssl pkey -in id_ed25519 -pubout -out id_ed25519.pub

# 2. 权限加固(防泄露)
chmod 644 id_ed25519*
mkdir -p ~/rustdesk/data
mv id_ed25519* ~/rustdesk/data/

# 3. 生成JWT密钥(API服务专用)
echo "JWT_SECRET=$(openssl rand -base64 32)" > ~/rustdesk/.env
chmod 600 ~/rustdesk/.env # 禁止提交到版本库

 

创建 Docker Compose 配置文件

1. 创建项目目录 & 配置文件
mkdir ~/rustdesk && cd ~/rustdesk
vim docker-compose.yml

2. 复制以下内容(已优化资源限制)

version: '3.8'

services:
  hbbs:
    image: rustdesk/rustdesk-server
    container_name: rustdesk-hbbs
    restart: unless-stopped
    command: hbbs -k _ -r 你的服务器公网IP:21117 # 替换为真实公网IP
    ports:
      - "21115:21115/tcp" # NAT类型检测
      - "21116:21116/tcp" # ID注册
      - "21116:21116/udp" # P2P穿透核心端口
    volumes:
      - ./data:/root # 密钥统一挂载

  hbbr:
    image: rustdesk/rustdesk-server
    container_name: rustdesk-hbbr
    restart: unless-stopped
    command: hbbr
    ports:
      - "21117:21117/tcp" # 中继数据传输
    volumes:
      - ./data:/root # 复用密钥目录

# API服务(支持Web管理后台)
  rustdesk-api:
    image: lejianwen/rustdesk-api:latest
    container_name: rustdesk-api
    restart: unless-stopped
    ports:
      - "21114:21114/tcp" # Web控制台端口
    environment:
      - RUSTDESK_API_RUSTDESK_ID_SERVER=hbbs:21116
      - RUSTDESK_API_RUSTDESK_KEY_FILE=/root/id_ed25519.pub
      - RUSTDESK_API_JWT_KEY=${JWT_SECRET} # 从.env注入
      # - RUSTDESK_API_APP_REGISTER=true # 启用自助注册[3,6](@ref)
      # - RUSTDESK_API_MAIL_ENABLED=true # 需配置 SMTP 发送验证邮件
      # 如需开启注册功能,则取消以上两行注释
    volumes:
      - ./data:/root # 密钥目录
      - ./api-data:/app/data # API独立数据卷
    depends_on:
      hbbs:
        condition: service_started # 仅依赖服务启动状态

​​重要提示​​:

​​你的服务器公网IP
-将 你的服务器公网IP 替换为服务器的 ​​公网 IP 或域名​​(如 123.123.123.123)
-国内服务器建议用 ​​IP 地址​​(避免域名解析延迟)
​​密钥三重统一​​:
-hbbs/hbbr/API服务均挂载 ./data:/root,确保读取相同密钥文件
-修正API服务的密钥路径为 /root/id_ed25519.pub(与原方案对齐)
​​数据隔离​​:API服务增加独立卷 ./api-data存储用户数据,与密钥分离

 

服务启动与验证​

1. 启动服务
cd ~/rustdesk
docker compose up -d
2. 检查状态
docker compose ps # 所有容器应为 "Up" 状态
3. 验证密钥一致性
docker exec rustdesk-hbbs cat /root/id_ed25519.pub
docker exec rustdesk-api cat /root/id_ed25519.pub # 应输出相同内容

如 rustdesk-hbbs 报错,缺少cat命令,可执行以下命令从宿主机复制文件进行查看

# 复制容器内文件到宿主机
docker cp rustdesk-hbbs:/root/id_ed25519.pub /tmp/
# 在宿主机查看
cat /tmp/id_ed25519.pub
4. 获取API管理员密码(首次登录必做)
docker logs rustdesk-api | grep "Admin password"

也可直接进入容器进行密码设置

# 进入容器
docker exec -it rustdesk-api sh
# 重置密码(将 new_password 替换为自定义密码)
./apimain reset-admin-pwd new_password

 

客户端配置(全平台通用)​

ID服务器:你的公网IP:21116
中继服务器:你的公网IP:21117
API服务器:http://你的公网IP:21114
Key:粘贴 id_ed25519.pub的内容
Web控制台:http://<服务器IP>:21114/_admin/ (默认账号 admin,密码为上面从容器日志获取或设置)

 

运维管理命令集​

# 停止服务
docker compose down

# 更新镜像
docker compose pull && docker compose up -d

# 查看实时日志
docker compose logs -f hbbs

# 备份数据
tar czvf rustdesk-backup.tar.gz ./data ./api-data

# 密钥轮换(90天一次)
openssl genpkey -algorithm ed25519 -out new_key; mv new_key ./data/id_ed25519; docker compose restart

 

故障排查速查表​

​现象​ ​排查命令​ ​解决方案​
客户端“未就绪” docker compose ps 检查容器状态,重启异常服务
ufw status 确认端口21116/udp已开放
API登录失败 docker exec rustdesk-api cat /root/id_ed25519.pub 验证密钥一致性
curl http://localhost:21114/api/health 检查API服务状态
P2P穿透失败 nload -m -i 100000 -o 100000 观察UDP 21116端口流量是否活跃

 

 

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
网站名称:CNBoy 四海部落
文章名称:《RustDesk 私有化部署终极方案​》
文章链接:https://cnboy.org/3378

本站资源仅供个人学习交流,不允许用于商业或违反国家法律法规之用途,否则法律问题自行承担。如有转载需注明文章来源。