服务端运维(r730)
给管理员看的。服务端跑在 192.168.3.100(r730),目录 ~/jiuyue-remote。
结构
| 容器 | 作用 | 端口 |
|---|---|---|
| hbbs | 信号/注册服务。客户端靠它互相找到对方,也是 ID 的发放方。 | 21115、21116(tcp+udp)、21118 |
| hbbr | 中继。直连打不通时转发画面。 | 21117、21119 |
| rustdesk-peer-api | 读 hbbs 的 sqlite,输出已注册设备 ID 列表。 | 21120 |
| rustdesk-web | 本下载站 + 教程。 | 8099 |
数据目录:
~/jiuyue-remote/
├── data/hbbs/ ← 身份密钥 + 设备库(要备份的就是这个)
│ ├── id_ed25519 ← 私钥,丢了所有客户端都要重装
│ ├── id_ed25519.pub
│ └── db_v2.sqlite3 ← 设备注册表
├── data/hbbr/
├── website/ ← 本站内容 + downloads/
├── packaging/cache/ ← 官方客户端原始包缓存
├── .env ← RELAY_HOST / WEB_PORT
└── deploy.sh ← 一键部署,可重复执行
最重要的一件事:
data/hbbs/id_ed25519 这对密钥是整套系统的身份。
换机、重装、误删之后如果换了新密钥,所有已经发出去的客户端都会提示 Key 不匹配,必须重新发包。
所以备份它,并且迁移时一定带过去。
日常命令
先 ssh root123@192.168.3.100,然后 cd ~/jiuyue-remote。
有 docker compose 插件时
docker compose ps # 看状态
docker compose logs -f hbbs # 看日志
docker compose restart # 重启全部
docker compose pull && docker compose up -d # 升级镜像
没有插件时(r730 目前就是这种)
bash manage.sh ps # 看状态
bash manage.sh logs hbbs # 看日志
bash manage.sh restart # 重启全部
bash manage.sh stop / start
sudo bash deploy.sh # 重新部署 = 升级
deploy.sh 是幂等的,随时可以重跑:已有的密钥、数据库、已下载的安装包都不会动。
备份 / 恢复
备份
cd ~/jiuyue-remote
tar czf ~/jiuyue-backup-$(date +%F).tgz data
# 拷回本机保存一份
# scp root123@192.168.3.100:~/jiuyue-backup-*.tgz .
建议加到 crontab,每周一份:
0 3 * * 1 cd /home/root123/jiuyue-remote && tar czf /home/root123/jiuyue-backup-$(date +\%F).tgz data
恢复 / 换机
- 把部署包和备份拷到新机器
tar xzf jiuyue-backup-xxxx.tgz -C ~/jiuyue-remote/sudo bash deploy.sh(会发现 data/hbbs 已有密钥,原样保留)- 改路由器端口映射指向新机器
端口映射(外网能用的前提)
路由器上要把下面这些从公网转发到 192.168.3.100:
| 端口 | 协议 | 干什么的 |
|---|---|---|
| 21115 | TCP | NAT 类型检测 |
| 21116 | TCP + UDP 都要 | 注册与打洞 —— 漏了 UDP 是最常见的坑 |
| 21117 | TCP | 中继 |
| 21118 | TCP | 网页客户端(可选) |
| 21119 | TCP | 网页客户端中继(可选) |
21120(设备列表)和 8099(下载站)不要映射到公网,只在内网用。
从旧机器 192.168.3.106 迁过来时,记得把映射目标从 .106 改成 .100,否则外网还在往空机器上打。
域名与动态 IP
客户端连 yc.note2026.cn,这条 A 记录由 deploy/ddns.py
定时更新到当前公网 IP。凭证读本机已有文件(/root/.hook-wan-ddns.env 或
/root/.acme.sh/account.conf),不在仓库里。
手动跑一次:
sudo python3 /path/to/ddns.py # 自动探测公网 IP
sudo python3 /path/to/ddns.py 1.2.3.4 # 指定 IP
确认解析对不对:
dig +short yc.note2026.cn
curl -s https://api.ipify.org # 两个应该一致
重新打客户端包
官方出新版本,或者改了预置配置之后:
cd ~/jiuyue-remote
# 改版本号(可选)
sudo RUSTDESK_CLIENT_VER=1.4.9 FORCE_PACK=1 -E bash deploy.sh
原始 exe/apk 缓存在 packaging/cache/,重复打包不会重新下载。服务器连不上 GitHub 时,手动把文件丢进这个目录再跑即可。
出问题先看这几个
| 现象 | 查什么 |
|---|---|
| 大家都连不上 | bash manage.sh ps 看容器在不在;bash manage.sh logs hbbs 看报错 |
| 内网能连外网不能 | 路由器端口映射,尤其 21116/UDP |
| 提示 Key 不匹配 | cat data/hbbs/id_ed25519.pub 和客户端 RustDesk2.toml 里的 key 对比 |
| 全都走中继、服务器上行跑满 | docker stats hbbr;检查 ALWAYS_USE_RELAY 应为 N |
| 下载站 404 | ls website/downloads 看包在不在;不在就 FORCE_PACK=1 重跑 |
| 端口被占 | ss -tlnp | grep 2111;r730 上 80/1111/3333/8888/8896/8069 另有服务,别动 |