- 🔐 用户认证系统 - 支持用户注册、登录、令牌管理
- 💓 心跳检测 - 实时监控客户端在线状态
- 📊 系统信息收集 - 自动收集并存储客户端系统信息
- 🏷️ 设备标签管理 - 支持设备分组和标签管理
- 📒 地址簿管理 - 支持个人和共享地址簿
- 📝 审计日志 - 记录连接和文件传输日志
- 🌐 多语言支持 - 支持中文和英文界面
- 🎨 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(数据库)
- 克隆项目
git clone https://github.com/yourusername/rustdesk_api.git
cd rustdesk_api- 启动服务
docker-compose up -d- 访问服务
- API 服务:
http://localhost:21114 - Web 管理:
http://localhost:21114/web/
服务将自动完成数据库迁移和初始化。
- 克隆项目
git clone https://github.com/yourusername/rustdesk_api.git
cd rustdesk_api- 创建虚拟环境
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate- 安装依赖
pip install -r requirements.txt- 配置环境变量
# 创建 .env 文件或设置环境变量
export DATABASE=sqlite3
export DEBUG=False
export WORKERS=4
export THREADS=8- 数据库迁移
python manage.py migrate
python manage.py collectstatic --noinput- 创建管理员账户
python manage.py createsuperuser- 启动服务
# 开发环境
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 |
标准时区名称 |
export DATABASE=sqlite3数据文件位于 ./data/db.sqlite3
export DATABASE=mysql
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=rustdesk
export MYSQL_PASSWORD=yourpassword
export MYSQL_DATABASE=rustdesk_apiexport DATABASE=postgresql
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_USER=rustdesk
export POSTGRES_PASSWORD=yourpassword
export POSTGRES_DB=rustdesk_api登录
POST /api/client/login
Content-Type: application/json
{
"username": "user",
"password": "pass",
"uuid": "device-uuid"
}登出
POST /api/client/logout
Authorization: Bearer <token>获取当前用户
GET /api/client/currentUser
Authorization: Bearer <token>心跳检测
POST /api/client/heartbeat
Authorization: Bearer <token>
{
"uuid": "device-uuid",
"peer_id": "peer-id",
"ver": "1.2.3"
}系统信息上报
POST /api/client/sysinfo
Authorization: Bearer <token>
{
"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"
}获取设备列表
GET /api/client/peers
Authorization: Bearer <token>获取地址簿列表
GET /api/client/ab
Authorization: Bearer <token>获取个人地址簿
GET /api/client/ab/personal
Authorization: Bearer <token>添加设备到地址簿
POST /api/client/ab/peer/add/{guid}
Authorization: Bearer <token>
{
"peer_id": "peer-id",
"alias": "device-alias"
}更新设备信息
PUT /api/client/ab/peer/update/{guid}
Authorization: Bearer <token>
{
"peer_id": "peer-id",
"alias": "new-alias"
}删除设备
DELETE /api/client/ab/peer/{guid}?peer_id={peer_id}
Authorization: Bearer <token>获取标签列表
GET /api/client/ab/tags/{guid}
Authorization: Bearer <token>添加/更新标签
POST /api/client/ab/tag/add/{guid}
Authorization: Bearer <token>
{
"name": "tag-name",
"color": "#FF0000"
}重命名标签
PUT /api/client/ab/tag/rename/{guid}
Authorization: Bearer <token>
{
"old_name": "old-tag",
"new_name": "new-tag"
}获取连接日志
GET /api/client/audit/conn
Authorization: Bearer <token>获取文件传输日志
GET /api/client/audit/file
Authorization: Bearer <token>POST /web/login
GET /web/logoutGET /web/home # 首页
POST /web/device/rename-alias # 重命名设备
GET /web/device/detail # 设备详情
POST /web/device/update # 更新设备
GET /web/device/statuses # 设备状态POST /web/user/create # 创建用户
POST /web/user/update # 更新用户
POST /web/user/reset-password # 重置密码
POST /web/user/delete # 删除用户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 (分享记录)
- 启用调试模式
export DEBUG=True- 运行开发服务器
python manage.py runserver- 访问调试工具
访问 http://localhost:8000/__debug__/ 查看 Django Debug Toolbar
在 apps/commands/management/commands/ 目录下创建新命令:
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = '命令描述'
def handle(self, *args, **options):
# 命令逻辑
pass运行命令:
python manage.py your_command# 创建迁移文件
python manage.py makemigrations
# 应用迁移
python manage.py migrate
# 查看迁移状态
python manage.py showmigrations- 使用 reStructuredText 格式编写函数注释
- 遵循 PEP 8 代码规范
- 确保跨平台兼容性(Windows、macOS、Linux)
问题: SQLite 出现数据库锁定错误
解决方案:
- 使用 MySQL 或 PostgreSQL
- 减少并发写入操作
- 调整
WORKERS和THREADS参数
问题: 用户频繁需要重新登录
解决方案:
# 增加会话超时时间(秒)
export SESSION_TIMEOUT=86400 # 24小时问题: Web 管理界面无法访问 API
解决方案:
- 确保使用相同的域名和端口
- 配置 CORS 中间件(如需要)
问题: Docker 容器启动失败
解决方案:
# 查看日志
docker logs rustdesk_api
# 重新构建
docker-compose down
docker-compose up --build问题: CSS/JS 文件 404
解决方案:
# 重新收集静态文件
python manage.py collectstatic --noinput我们欢迎任何形式的贡献!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- 编写清晰的提交信息
- 添加必要的测试
- 更新相关文档
- 确保代码通过 linting 检查
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 作者: 御风
- Issues: GitHub Issues
Made with ❤️ by 御风
English | 中文