6.1 KiB
6.1 KiB
好的,根据我们排查的结果,我为你重新生成一份完整的、经过验证的部署文档。这份文档已经针对你遇到的持久化问题做了优化,确保密码不会因为容器重启而改变。
RustDesk 自建服务器完整部署文档(CentOS 9 / Docker Compose)
一、概述
本文档使用社区 lejianwen/rustdesk-server-s6 All-in-One 镜像,将 ID 服务器(hbbs)、中继服务器(hbbr)和 Web API 服务器整合到一个容器中,通过 Docker Compose 管理。特别针对数据持久化做了优化,避免重启后管理员密码丢失。
二、环境准备
2.1 开放防火墙端口
sudo firewall-cmd --permanent --add-port=21114-21119/tcp
sudo firewall-cmd --permanent --add-port=21116/udp
sudo firewall-cmd --reload
端口说明:
- 21114:Web 管理后台
- 21115:hbbs NAT 测试
- 21116:hbbs TCP 信令 / UDP 心跳
- 21117:hbbr TCP 中继
- 21118:hbbs WebSocket
- 21119:hbbr WebSocket
2.2 安装 Docker 和 Docker Compose 插件
curl -fsSL https://get.docker.com | bash
sudo systemctl enable --now docker
2.3 提高系统文件描述符限制(高并发必需)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "root soft nofile 65535" >> /etc/security/limits.conf
echo "root hard nofile 65535" >> /etc/security/limits.conf
修改后重启服务器使配置生效。
三、部署服务
3.1 创建项目目录
mkdir -p ~/rustdesk && cd ~/rustdesk
3.2 编写 docker-compose.yml
创建文件 docker-compose.yml,内容如下(请将 YOUR_SERVER_IP 替换为你的服务器内网或公网 IP):
networks:
rustdesk-net:
external: false
services:
rustdesk-server:
container_name: rustdesk-server
image: lejianwen/rustdesk-server-s6:latest
network_mode: "host"
environment:
- TZ=Asia/Shanghai
- RELAY=YOUR_SERVER_IP:21117
- ENCRYPTED_ONLY=1
- RUSTDESK_API_RUSTDESK_ID_SERVER=YOUR_SERVER_IP:21116
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=YOUR_SERVER_IP:21117
- RUSTDESK_API_RUSTDESK_API_SERVER=http://YOUR_SERVER_IP:21114
- RUSTDESK_API_RUSTDESK_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_LANG=zh-CN
- ALWAYS_USE_RELAY=N
- RUSTDESK_API_APP_TOKEN_EXPIRE=87600h
volumes:
# 持久化 hbbs/hbbr 的设备数据库和密钥
- ./data:/data
# 持久化 API 服务的用户数据库(解决密码重置问题)
- ./api-data:/app/data
restart: unless-stopped
ulimits:
nofile:
soft: 65535
hard: 65535
关键点:
volumes挂载了两个宿主机目录:
./data→ 容器/data:存放hbbs/hbbr的设备数据库(db_v2.sqlite3)和密钥(id_ed25519*)。./api-data→ 容器/app/data:存放 API 服务器的用户数据库(rustdeskapi.db),这是管理员密码持久化的关键。- 这样即使容器重建,所有数据都不会丢失,密码保持不变。
3.3 启动服务
docker compose up -d
3.4 获取关键信息
公钥(Key)
cat ./data/id_ed25519.pub
输出类似:D5Msl1fTdFv92qcguwTEhvNcghhjRLUp+8LAw6AxFlY=
管理员初始密码
docker compose logs | grep "Admin Password Is:"
输出类似:Admin Password Is: OXOxH4TJ
重要:首次启动后,请立即登录 Web 后台修改密码,防止忘记。
四、客户端配置
在所有需要连接此服务器的 RustDesk 客户端上:
- 打开设置 → 网络
- 填写:
- ID 服务器:
YOUR_SERVER_IP:21116 - 中继服务器:
YOUR_SERVER_IP:21117 - Key:粘贴上面获取的公钥
- API 服务器:
http://YOUR_SERVER_IP:21114(可选,用于地址簿同步)
- ID 服务器:
- 保存后,点击客户端主界面的“登录”,使用用户名
admin和上面获取的密码登录。
五、持久化说明
- 设备数据库:保存在
./data/db_v2.sqlite3 - API 用户数据库:保存在
./api-data/rustdeskapi.db - 密钥文件:保存在
./data/id_ed25519*
只要这两个宿主机目录不被删除,无论执行 docker compose down 还是重启服务器,所有数据(包括管理员密码、注册设备、地址簿)都会完整保留。
若需要备份或迁移,只需打包
./data和./api-data两个目录即可。
六、常用运维命令
| 操作 | 命令 |
|---|---|
| 查看日志 | docker compose logs -f |
| 重启服务(保留数据) | docker compose restart |
| 修改配置后更新 | docker compose up -d |
| 停止并删除容器 | docker compose down |
| 进入容器内部 | docker exec -it rustdesk-server /bin/sh |
七、故障排查
7.1 客户端 ID 连接失败,但 IP 直连正常
- 检查服务器防火墙是否开放 UDP 21116 端口。
- 查看容器日志:
docker compose logs | grep -i error - 确认客户端填写的 Key 与服务器
./data/id_ed25519.pub完全一致。
7.2 Web 后台无法登录
- 确认容器正常运行:
docker ps | grep rustdesk-server - 检查端口 21114 是否被占用:
ss -tlnp | grep 21114 - 若密码忘记,进入容器执行
/app/apimain reset-admin-pwd <新密码>重置。
7.3 重启后密码丢失
- 检查是否挂载了
./api-data:/app/data,且该目录下有rustdeskapi.db文件。 - 若未自动生成,请登录一次 Web 后台并修改密码,数据库会自动创建。
八、升级与迁移
升级镜像
docker compose pull
docker compose up -d
迁移到新服务器
- 打包
./data和./api-data目录。 - 新服务器按本文档部署好 Docker。
- 将两个目录复制到新服务器的项目目录下。
- 启动
docker compose up -d,所有数据保留,密码不变。
这份文档已经针对你遇到的问题做了修正,核心是两个持久化挂载点。按照这个步骤操作,以后无论怎么重启,管理员密码都不会再变了。如果有任何问题,随时反馈。