九月远程 图文教程
管理员
← 返回教程目录

服务端运维(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

恢复 / 换机

  1. 把部署包和备份拷到新机器
  2. tar xzf jiuyue-backup-xxxx.tgz -C ~/jiuyue-remote/
  3. sudo bash deploy.sh(会发现 data/hbbs 已有密钥,原样保留)
  4. 改路由器端口映射指向新机器

端口映射(外网能用的前提)

路由器上要把下面这些从公网转发到 192.168.3.100

端口协议干什么的
21115TCPNAT 类型检测
21116TCP + UDP 都要注册与打洞 —— 漏了 UDP 是最常见的坑
21117TCP中继
21118TCP网页客户端(可选)
21119TCP网页客户端中继(可选)
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
下载站 404ls website/downloads 看包在不在;不在就 FORCE_PACK=1 重跑
端口被占ss -tlnp | grep 2111;r730 上 80/1111/3333/8888/8896/8069 另有服务,别动