# rustdesk_api
**Repository Path**: Joker_JH/rustdesk_api
## Basic Information
- **Project Name**: rustdesk_api
- **Description**: 个人练手rustdesk_api
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-10-15
- **Last Updated**: 2026-01-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# RustDesk API Server
[English](./README_EN.md) | 中文
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
[](https://www.djangoproject.com/)
[](https://www.docker.com/)
一个功能完善的 RustDesk API 服务器,提供客户端认证、设备管理、地址簿管理、审计日志等功能。
---
## 📖 目录
- [特性](#特性)
- [系统架构](#系统架构)
- [快速开始](#快速开始)
- [环境要求](#环境要求)
- [Docker 部署(推荐)](#docker-部署推荐)
- [手动部署](#手动部署)
- [配置说明](#配置说明)
- [API 文档](#api-文档)
- [客户端 API](#客户端-api)
- [Web 管理 API](#web-管理-api)
- [数据库模型](#数据库模型)
- [开发指南](#开发指南)
- [常见问题](#常见问题)
- [贡献指南](#贡献指南)
- [许可证](#许可证)
## ✨ 特性
### 核心功能
- 🔐 **用户认证系统** - 支持用户注册、登录、令牌管理
- 💓 **心跳检测** - 实时监控客户端在线状态
- 📊 **系统信息收集** - 自动收集并存储客户端系统信息
- 🏷️ **设备标签管理** - 支持设备分组和标签管理
- 📒 **地址簿管理** - 支持个人和共享地址簿
- 📝 **审计日志** - 记录连接和文件传输日志
- 🌐 **多语言支持** - 支持中文和英文界面
- 🎨 **Web 管理界面** - 提供友好的 Web 管理后台
### 技术特性
- 🚀 **高性能** - 基于 Django + Gunicorn,支持多进程多线程
- 🐳 **容器化部署** - 完整的 Docker 支持
- 💾 **多数据库支持** - 支持 SQLite、MySQL、PostgreSQL
- 🔧 **灵活配置** - 通过环境变量轻松配置
- 📱 **跨平台** - 支持 Windows、macOS、Linux
## 🏗️ 系统架构
```
rustdesk_api/
├── apps/
│ ├── client_apis/ # 客户端 API 接口
│ │ ├── views.py # 核心 API 视图
│ │ ├── view_ab.py # 地址簿 API
│ │ └── view_audit.py # 审计日志 API
│ ├── web/ # Web 管理界面
│ │ ├── view_auth.py # 认证视图
│ │ ├── view_home.py # 主页视图
│ │ ├── view_user.py # 用户管理
│ │ └── view_personal.py # 地址簿管理
│ ├── db/ # 数据库模型和服务
│ │ ├── models.py # 数据模型定义
│ │ └── service.py # 数据库服务层
│ ├── commands/ # 管理命令
│ └── common/ # 公共中间件
├── common/ # 公共工具
│ ├── db_config.py # 数据库配置
│ ├── env.py # 环境变量管理
│ ├── logging_config.py # 日志配置
│ └── utils.py # 工具函数
├── static/ # 静态文件
├── templates/ # 模板文件
└── rustdesk_api/ # Django 项目配置
```
## 🚀 快速开始
### 环境要求
- Python 3.13+
- Docker & Docker Compose(容器化部署)
- SQLite / MySQL / PostgreSQL(数据库)
### Docker 部署(推荐)
1. **克隆项目**
```bash
git clone https://github.com/yourusername/rustdesk_api.git
cd rustdesk_api
```
2. **启动服务**
```bash
docker-compose up -d
```
3. **访问服务**
- API 服务: `http://localhost:21114`
- Web 管理: `http://localhost:21114/web/`
服务将自动完成数据库迁移和初始化。
### 手动部署
1. **克隆项目**
```bash
git clone https://github.com/yourusername/rustdesk_api.git
cd rustdesk_api
```
2. **创建虚拟环境**
```bash
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
```
3. **安装依赖**
```bash
pip install -r requirements.txt
```
4. **配置环境变量**
```bash
# 创建 .env 文件或设置环境变量
export DATABASE=sqlite3
export DEBUG=False
export WORKERS=4
export THREADS=8
```
5. **数据库迁移**
```bash
python manage.py migrate
python manage.py collectstatic --noinput
```
6. **创建管理员账户**
```bash
python manage.py createsuperuser
```
7. **启动服务**
```bash
# 开发环境
python manage.py runserver 0.0.0.0:21114
# 生产环境
./start.sh
```
## ⚙️ 配置说明
### 环境变量
| 变量名 | 说明 | 默认值 | 可选值 |
|-------------------|--------------|-----------------|----------------------------------|
| `DATABASE` | 数据库类型 | `sqlite3` | `sqlite3`, `mysql`, `postgresql` |
| `DEBUG` | 调试模式 | `False` | `True`, `False` |
| `HOST` | 监听地址 | `0.0.0.0` | 任何有效 IP |
| `PORT` | 监听端口 | `21114` | 1-65535 |
| `WORKERS` | Gunicorn 进程数 | `4` | 建议 2-8 |
| `THREADS` | 每进程线程数 | `8` | 建议 2-16 |
| `SESSION_TIMEOUT` | 会话超时时间(秒) | `3600` | 任何正整数 |
| `TZ` | 时区 | `Asia/Shanghai` | 标准时区名称 |
### 数据库配置
#### SQLite(默认)
```bash
export DATABASE=sqlite3
```
数据文件位于 `./data/db.sqlite3`
#### MySQL
```bash
export DATABASE=mysql
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=rustdesk
export MYSQL_PASSWORD=yourpassword
export MYSQL_DATABASE=rustdesk_api
```
#### PostgreSQL
```bash
export DATABASE=postgresql
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_USER=rustdesk
export POSTGRES_PASSWORD=yourpassword
export POSTGRES_DB=rustdesk_api
```
## 📡 API 文档
### 客户端 API
#### 认证相关
**登录**
```http
POST /api/client/login
Content-Type: application/json
{
"username": "user",
"password": "pass",
"uuid": "device-uuid"
}
```
**登出**
```http
POST /api/client/logout
Authorization: Bearer
```
**获取当前用户**
```http
GET /api/client/currentUser
Authorization: Bearer
```
#### 设备管理
**心跳检测**
```http
POST /api/client/heartbeat
Authorization: Bearer
{
"uuid": "device-uuid",
"peer_id": "peer-id",
"ver": "1.2.3"
}
```
**系统信息上报**
```http
POST /api/client/sysinfo
Authorization: Bearer
{
"uuid": "device-uuid",
"peer_id": "peer-id",
"cpu": "Intel Core i7",
"memory": "16GB",
"os": "Windows 11",
"device_name": "MyComputer",
"username": "user",
"version": "1.2.3"
}
```
**获取设备列表**
```http
GET /api/client/peers
Authorization: Bearer
```
#### 地址簿管理
**获取地址簿列表**
```http
GET /api/client/ab
Authorization: Bearer
```
**获取个人地址簿**
```http
GET /api/client/ab/personal
Authorization: Bearer
```
**添加设备到地址簿**
```http
POST /api/client/ab/peer/add/{guid}
Authorization: Bearer
{
"peer_id": "peer-id",
"alias": "device-alias"
}
```
**更新设备信息**
```http
PUT /api/client/ab/peer/update/{guid}
Authorization: Bearer
{
"peer_id": "peer-id",
"alias": "new-alias"
}
```
**删除设备**
```http
DELETE /api/client/ab/peer/{guid}?peer_id={peer_id}
Authorization: Bearer
```
**获取标签列表**
```http
GET /api/client/ab/tags/{guid}
Authorization: Bearer
```
**添加/更新标签**
```http
POST /api/client/ab/tag/add/{guid}
Authorization: Bearer
{
"name": "tag-name",
"color": "#FF0000"
}
```
**重命名标签**
```http
PUT /api/client/ab/tag/rename/{guid}
Authorization: Bearer
{
"old_name": "old-tag",
"new_name": "new-tag"
}
```
#### 审计日志
**获取连接日志**
```http
GET /api/client/audit/conn
Authorization: Bearer
```
**获取文件传输日志**
```http
GET /api/client/audit/file
Authorization: Bearer
```
### Web 管理 API
#### 认证
```http
POST /web/login
GET /web/logout
```
#### 设备管理
```http
GET /web/home # 首页
POST /web/device/rename-alias # 重命名设备
GET /web/device/detail # 设备详情
POST /web/device/update # 更新设备
GET /web/device/statuses # 设备状态
```
#### 用户管理
```http
POST /web/user/create # 创建用户
POST /web/user/update # 更新用户
POST /web/user/reset-password # 重置密码
POST /web/user/delete # 删除用户
```
#### 地址簿管理
```http
GET /web/personal/list # 地址簿列表
POST /web/personal/create # 创建地址簿
POST /web/personal/delete # 删除地址簿
POST /web/personal/rename # 重命名地址簿
GET /web/personal/detail # 地址簿详情
POST /web/personal/add-device # 添加设备
POST /web/personal/remove-device # 移除设备
POST /web/personal/update-alias # 更新别名
POST /web/personal/update-tags # 更新标签
```
## 💾 数据库模型
### 核心模型
| 模型 | 说明 |
|-----------------|-----------------|
| `User` | 用户账户(Django 内置) |
| `Token` | 用户认证令牌 |
| `HeartBeat` | 客户端心跳记录 |
| `PeerInfo` | 客户端系统信息 |
| `Personal` | 地址簿 |
| `Tag` | 设备标签 |
| `ClientTags` | 设备标签关联 |
| `Alias` | 设备别名 |
| `LoginClient` | 登录客户端记录 |
| `Log` | 操作日志 |
| `AutidConnLog` | 连接审计日志 |
| `AuditFileLog` | 文件传输审计日志 |
| `UserPrefile` | 用户配置 |
| `UserPersonal` | 用户地址簿关联 |
| `PeerPersonal` | 设备地址簿关联 |
| `SharePersonal` | 地址簿分享记录 |
| `UserConfig` | 用户配置项 |
### 数据库关系
```
User (用户)
├─→ Token (令牌)
├─→ Personal (地址簿)
├─→ ClientTags (设备标签)
├─→ LoginClient (登录客户端)
└─→ UserConfig (用户配置)
PeerInfo (设备信息)
├─→ HeartBeat (心跳)
├─→ PeerPersonal (地址簿关联)
├─→ Alias (别名)
├─→ AutidConnLog (连接日志)
└─→ AuditFileLog (文件日志)
Personal (地址簿)
├─→ UserPersonal (用户关联)
├─→ PeerPersonal (设备关联)
└─→ SharePersonal (分享记录)
```
## 🔧 开发指南
### 本地开发
1. **启用调试模式**
```bash
export DEBUG=True
```
2. **运行开发服务器**
```bash
python manage.py runserver
```
3. **访问调试工具**
访问 `http://localhost:8000/__debug__/` 查看 Django Debug Toolbar
### 创建管理命令
在 `apps/commands/management/commands/` 目录下创建新命令:
```python
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = '命令描述'
def handle(self, *args, **options):
# 命令逻辑
pass
```
运行命令:
```bash
python manage.py your_command
```
### 数据库迁移
```bash
# 创建迁移文件
python manage.py makemigrations
# 应用迁移
python manage.py migrate
# 查看迁移状态
python manage.py showmigrations
```
### 代码规范
- 使用 reStructuredText 格式编写函数注释
- 遵循 PEP 8 代码规范
- 确保跨平台兼容性(Windows、macOS、Linux)
## ❓ 常见问题
### 1. 数据库锁定错误
**问题**: SQLite 出现数据库锁定错误
**解决方案**:
- 使用 MySQL 或 PostgreSQL
- 减少并发写入操作
- 调整 `WORKERS` 和 `THREADS` 参数
### 2. 会话过期问题
**问题**: 用户频繁需要重新登录
**解决方案**:
```bash
# 增加会话超时时间(秒)
export SESSION_TIMEOUT=86400 # 24小时
```
### 3. 跨域问题
**问题**: Web 管理界面无法访问 API
**解决方案**:
- 确保使用相同的域名和端口
- 配置 CORS 中间件(如需要)
### 4. Docker 容器无法启动
**问题**: Docker 容器启动失败
**解决方案**:
```bash
# 查看日志
docker logs rustdesk_api
# 重新构建
docker-compose down
docker-compose up --build
```
### 5. 静态文件无法加载
**问题**: CSS/JS 文件 404
**解决方案**:
```bash
# 重新收集静态文件
python manage.py collectstatic --noinput
```
## 🤝 贡献指南
我们欢迎任何形式的贡献!
### 贡献流程
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
### 开发规范
- 编写清晰的提交信息
- 添加必要的测试
- 更新相关文档
- 确保代码通过 linting 检查
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🙏 致谢
- [RustDesk](https://github.com/rustdesk/rustdesk) - 优秀的远程桌面软件
- [Django](https://www.djangoproject.com/) - 强大的 Web 框架
- 所有贡献者
## 📮 联系方式
- 作者: 御风
- Issues: [GitHub Issues](https://github.com/JokerYF/rustdesk_api/issues)
---
Made with ❤️ by 御风
[English](./README_EN.md) | 中文