rustdesk-api-server/README.md
2024-01-24 16:46:35 +08:00

183 lines
6.7 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-api-server
[The English explanation is available by clicking here.](https://github.com/kingmo888/rustdesk-api-server/blob/master/README_EN.md)
<p align="center">
<i>一个 python 实现的 Rustdesk API 接口,支持 WebUI 管理</i>
<br/>
<img src ="https://img.shields.io/badge/Version-1.4.4-blueviolet.svg"/>
<img src ="https://img.shields.io/badge/Python-3.7|3.8|3.9|3.10|3.11-blue.svg" />
<img src ="https://img.shields.io/badge/Django-3.2+|4.x-yelow.svg" />
<br/>
<img src ="https://img.shields.io/badge/Platform-Windows|Linux-green.svg"/>
<img src ="https://img.shields.io/badge/Docker-arm|arm64|amd64-blue.svg" />
</p>
## 缘起
看了市面上各类 RustDesk WEB API 版本或多或少的存在一些问题比如说需要通过url注册、新版客户端某些接口不支持、无法方便的修改密码等不足因此博采众长撸一个自己喜欢的版本来用。在此要感谢论坛及github的各位朋友写的接口省去了我抓包找接口的时间。
![主页面](images/front_main.png)
## 功能特点
- 支持前台网页自主注册和登录。
- 注册页与登录页:
![Front Registration](images/front_reg.png)
![Front Login](images/front_login.png)
- 支持前台展示设备信息,分为管理员版、用户版。
- 支持自定义别名(备注)。
- 支持后台管理。
- 支持彩色标签。
![Rust Books](images/rust_books.png)
- 支持设备在线统计。
- 支持设备密码保存。
- 利用心跳接口自动管理token并保活。
- 支持分享设备给其他用户。
![Rust Share](images/share.png)
- 支持web控制端目前仅支持非SSL模式见下面使用问题说明
![Rust Share](images/webui.png)
后台主页:
![Admin Main](images/admin_main.png)
## 安装
### 方法1开箱即用
仅支持Windows请前往 release 下载,无需安装环境,直接运行`启动.bat`即可。 截图:
![window直接运行版](/images/windows_run.png)
### 方法2代码运行
```bash
# 将代码克隆到本地
git clone https://github.com/kingmo888/rustdesk-api-server.git
# 进入目录
cd rustdesk-api-server
# 安装依赖
pip install -r requirements.txt
# 确保依赖安装正确后,执行:
# 端口号请自行修改建议保留21114为Rustdesk API默认端口
python manage.py runserver 0.0.0.0:21114
```
此时即可使用 `http://本机IP:端口` 的形式来访问。
**注意**:如果 CentOS 配置时Django4 会因为系统的 sqlite3 版本过低而出问题,请修改依赖库中的文件。路径:`xxxx/Lib/site-packages/django/db/backends/sqlite3/base.py` (根据情况自行查找包所在地址),修改内容:
```python
# from sqlite3 import dbapi2 as Database #(注释掉这行)
from pysqlite3 import dbapi2 as Database # 启用pysqlite3
```
### 方法3Docker 运行
#### Docker方法1自行构建
```bash
git clone https://github.com/kingmo888/rustdesk-api-server.git
cd rustdesk-api-server
docker compose --compatibility up --build -d
```
感谢热心网友 @ferocknew 提供。
#### Docker方法2预构建运行
docker run 命令:
```bash
docker run -d \
--name rustdesk-api-server \
-p 21114:21114 \
-e CSRF_TRUSTED_ORIGINS=http://yourdomain.com:21114 \ #防跨域信任来源,可选
-e ID_SERVER=yourdomain.com \ #Web控制端使用的ID服务器
-v /yourpath/db:/rustdesk-api-server/db \ #修改/yourpath/db为你宿主机数据库挂载目录
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
--network bridge \
--restart unless-stopped \
ghcr.io/kingmo888/rustdesk-api-server:latest
```
docker-compose 方式:
```yaml
version: "3.8"
services:
rustdesk-api-server:
container_name: rustdesk-api-server
image: ghcr.io/kingmo888/rustdesk-api-server:latest
environment:
- CSRF_TRUSTED_ORIGINS=http://yourdomain.com:21114 #防跨域信任来源,可选
- ID_SERVER=yourdomain.com #Web控制端使用的ID服务器
volumes:
- /yourpath/db:/rustdesk-api-server/db #修改/yourpath/db为你宿主机数据库挂载目录
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
network_mode: bridge
ports:
- "21114:21114"
restart: unless-stopped
```
## 环境变量
| 变量名 | 参考值 | 备注 |
| ---- | ------- | ----------- |
| `HOST` | 默认 `0.0.0.0` | 绑定服务的IP |
| `TZ` | 默认 `Asia/Shanghai`,可选 | 时区 |
| `SECRET_KEY` | 可选,自定义一串随机字符 | 程序加密秘钥 |
| `CSRF_TRUSTED_ORIGINS` | 可选,默认关闭验证;<br>如需开启填写你的访问地址 `http://yourdomain.com:21114` <br>**如需关闭验证请删除此变量,而不是留空** | 防跨域信任来源 |
| `ID_SERVER` | 可选默认为和API服务器同主机。<br>可自定义如 `yourdomain.com` | Web控制端使用的ID服务器 |
| `DEBUG` | 可选,默认 `False` | 调试模式 |
## 使用问题
- 管理员设置
当数据库中不存在账户时,第一个注册的账户直接获取超级管理员权限,之后注册账户为普通账户。
- 设备信息
经测试客户端会在非绿色版模式下安装为服务的模式中定时发送设备信息到api接口所以如果想要设备信息需要安装rustdesk客户端并启动服务。
- 连接速度慢
新版本Key模式链接速度慢可以在服务端启动服务时不要带参数的-k此时客户端也不能配置key。
- Web控制端配置
- 设置ID_SERVER环境变量或修改rustdesk_server_api/settings.py文件中ID_SERVER配置项将ID服务器/中继服务器IP或域名填上。
- Web控制端一直转圈
- 检查ID服务器填写是否正确
- Web控制端目前仅支持非SSL模式若webui为https访问请将s去掉否则ws连不上一直转圈。如https://domain.com/webui改为http://domain.com/webui
- 后台操作登录或登出时CSRF验证失败. 请求被中断.
这种操作大概率是docker配置+nginx反代+SSL的组合要注意修改CSRF_TRUSTED_ORIGINS如果是ssl那就是https开头否则就是http。
## 开发计划
- [x] 分享设备给其他已注册用户v1.3+
> 说明类似网盘url分享url激活后可以获得某个或某组或某个标签下的设备
> 备注其实web api作为中间件可做的不多更多功能还是需要修改客户端来实现就不太值当了。
- [x] 集成Web客户端形式v1.4+
> 将大神的web客户端集成进来已集成。 [来源](https://www.52pojie.cn/thread-1708319-1-1.html)
## 其他相关工具
- [可以修改客户端ID的CMD脚本](https://github.com/abdullah-erturk/RustDesk-ID-Changer)
- [rustdesk](https://github.com/rustdesk/rustdesk)
- [rustdesk-server](https://github.com/rustdesk/rustdesk-server)