方案优势
– 三合一管理:单文件集成 `hbbs` + `hbbr` + `API服务`
– 密钥集中管控:所有服务共享同一密钥目录,消除配置不一致风险
– 跨节点扩展:多服务器统一密钥,客户端无缝切换
准备工作(所有操作需 root 权限)
1. 更新系统 & 安装基础工具
sudo -i # 切换 root 用户
apt update && apt upgrade -y
apt install -y curl vim ufw
2. 安装 Docker 与 Docker Compose
# 安装 Dockercurl -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注入 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存储用户数据,与密钥分离
如果需要开启注册功能,需在上面配置文件【API服务】-【environment】下添加如下代码:
- RUSTDESK_API_APP_REGISTER=true # 启用自助注册[3,6](@ref) # 可选开通注册邮件验证 - RUSTDESK_API_MAIL_ENABLED=true # SMTP 核心配置 - RUSTDESK_API_MAIL_SMTP_SERVER=smtp.gmail.com - RUSTDESK_API_MAIL_SMTP_PORT=587 - [email protected] - RUSTDESK_API_MAIL_SMTP_PASSWORD=your_app_password - [email protected] # 可选高级配置 - RUSTDESK_API_MAIL_TLS=true # 启用TLS加密 - RUSTDESK_API_MAIL_SUBJECT="RustDesk 账号验证"
配置项说明:
配置项 | 作用 | 必填 | 示例值 |
---|---|---|---|
MAIL_SMTP_SERVER |
SMTP 服务器地址 | ✓ | smtp.gmail.com |
MAIL_SMTP_PORT |
SMTP 端口 | ✓ | 587 |
MAIL_SMTP_USER |
邮箱账号 | ✓ | [email protected] |
MAIL_SMTP_PASSWORD |
邮箱密码/应用专用密码 | ✓ | xxxxxxxxxxxx |
MAIL_FROM_ADDRESS |
发件人地址 | ✓ | [email protected] |
MAIL_TLS /MAIL_SSL |
加密协议 | ✓ | true |
端口与加密协议:
服务商 | 推荐端口 | TLS/SSL 要求 |
---|---|---|
Gmail | 587 | TLS=true |
QQ邮箱 | 465 | SSL=true |
企业自建 SMTP | 25/587 | 根据服务器配置 |
- Gmail/QQ邮箱等需使用 应用专用密码(非邮箱登录密码),避免触发安全拦截。企业邮箱(如阿里云企业邮)可直接使用账号密码。
- 新用户注册时应收到验证邮件,未验证账号无法登录。未收到邮件请检查垃圾邮件箱,确认邮件发送方地址是否正确。
- 查看日志确认邮件发送状态:
docker compose logs rustdesk-api | grep "Mail"
,成功发送:输出 Sent verification email to [email protected];发送失败:显示 SMTP 错误详情(如认证失败、端口阻塞)。
服务启动与验证
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端口流量是否活跃 |