wei/个人文档/rustdesk部署文档.md
2026-06-04 13:57:41 +08:00

184 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

好的,根据我们排查的结果,我为你重新生成一份完整的、经过验证的部署文档。这份文档已经针对你遇到的持久化问题做了优化,确保密码不会因为容器重启而改变。
---
# RustDesk 自建服务器完整部署文档CentOS 9 / Docker Compose
## 一、概述
本文档使用社区 `lejianwen/rustdesk-server-s6` All-in-One 镜像,将 ID 服务器hbbs、中继服务器hbbr和 Web API 服务器整合到一个容器中,通过 Docker Compose 管理。特别针对数据持久化做了优化,避免重启后管理员密码丢失。
## 二、环境准备
### 2.1 开放防火墙端口
```bash
sudo firewall-cmd --permanent --add-port=21114-21119/tcp
sudo firewall-cmd --permanent --add-port=21116/udp
sudo firewall-cmd --reload
```
> 端口说明:
> - 21114Web 管理后台
> - 21115hbbs NAT 测试
> - 21116hbbs TCP 信令 / UDP 心跳
> - 21117hbbr TCP 中继
> - 21118hbbs WebSocket
> - 21119hbbr WebSocket
### 2.2 安装 Docker 和 Docker Compose 插件
```bash
curl -fsSL https://get.docker.com | bash
sudo systemctl enable --now docker
```
### 2.3 提高系统文件描述符限制(高并发必需)
```bash
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 创建项目目录
```bash
mkdir -p ~/rustdesk && cd ~/rustdesk
```
### 3.2 编写 `docker-compose.yml`
创建文件 `docker-compose.yml`,内容如下(请将 `YOUR_SERVER_IP` 替换为你的服务器内网或公网 IP
```yaml
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 启动服务
```bash
docker compose up -d
```
### 3.4 获取关键信息
#### 公钥Key
```bash
cat ./data/id_ed25519.pub
```
输出类似:`D5Msl1fTdFv92qcguwTEhvNcghhjRLUp+8LAw6AxFlY=`
#### 管理员初始密码
```bash
docker compose logs | grep "Admin Password Is:"
```
输出类似:`Admin Password Is: OXOxH4TJ`
> **重要**:首次启动后,请立即登录 Web 后台修改密码,防止忘记。
## 四、客户端配置
在所有需要连接此服务器的 RustDesk 客户端上:
1. 打开设置 → 网络
2. 填写:
- **ID 服务器**`YOUR_SERVER_IP:21116`
- **中继服务器**`YOUR_SERVER_IP:21117`
- **Key**:粘贴上面获取的公钥
- **API 服务器**`http://YOUR_SERVER_IP:21114`(可选,用于地址簿同步)
3. 保存后,点击客户端主界面的“登录”,使用用户名 `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 后台并修改密码,数据库会自动创建。
## 八、升级与迁移
### 升级镜像
```bash
docker compose pull
docker compose up -d
```
### 迁移到新服务器
1. 打包 `./data``./api-data` 目录。
2. 新服务器按本文档部署好 Docker。
3. 将两个目录复制到新服务器的项目目录下。
4. 启动 `docker compose up -d`,所有数据保留,密码不变。
---
这份文档已经针对你遇到的问题做了修正,核心是**两个持久化挂载点**。按照这个步骤操作,以后无论怎么重启,管理员密码都不会再变了。如果有任何问题,随时反馈。