184 lines
6.1 KiB
Markdown
184 lines
6.1 KiB
Markdown
好的,根据我们排查的结果,我为你重新生成一份完整的、经过验证的部署文档。这份文档已经针对你遇到的持久化问题做了优化,确保密码不会因为容器重启而改变。
|
||
|
||
---
|
||
|
||
# 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
|
||
```
|
||
|
||
> 端口说明:
|
||
> - 21114:Web 管理后台
|
||
> - 21115:hbbs NAT 测试
|
||
> - 21116:hbbs TCP 信令 / UDP 心跳
|
||
> - 21117:hbbr TCP 中继
|
||
> - 21118:hbbs WebSocket
|
||
> - 21119:hbbr 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`,所有数据保留,密码不变。
|
||
|
||
---
|
||
|
||
这份文档已经针对你遇到的问题做了修正,核心是**两个持久化挂载点**。按照这个步骤操作,以后无论怎么重启,管理员密码都不会再变了。如果有任何问题,随时反馈。 |