首先,这个项目并不是为了替代Rustdesk-server-pro而开发的。它是根据我们的需求开发的,用于与Rustdesk一起使用。
因此,不提供任何保证、支持、担保或责任。
其目标用途是作为一个crate包含在rustdesk-server中。
由于rustdesk-server是在AGPL-3.0下发布的,本项目也在AGPL-3.0下发布。这就是你能看到它的原因!
欢迎使用和修改它,但别忘了公开你的修改。
api-server项目是Rustdesk的一个基本API服务器实现。Rustdesk是一款开源远程控制软件。这个实现使用Rust语言编写,利用Rocket框架。整个REST API使用rocket_okapi进行文档化。启动服务器后,它会在/api/doc提供Rapidoc模块,允许可视化和测试各种API路由。服务器配置为监听21114端口。它设计为使用与Rustdesk-server或Rustdesk-server-pro数据库兼容的SQLite3数据库。
服务器目前正在开发中,尚未准备好用于生产环境。
本服务器根据GNU Affero通用公共许可证3.0版(AGPL-3.0)的条款分发。
服务器使用Rocket作为Web框架。服务器设计为模块化和可扩展的。服务器分为三个主要部分:
api模块包含API路由和API逻辑。它是100%的Rust代码,使用Rocket框架。webconsole模块包含Web控制台。它是一个使用TypeScript编写的单页Vue.js应用程序。API是使用Swagger codegen为Axios TypeScript从OpenAPI自动生成的。你可以在/ui访问Web控制台。你可以在webconsole目录中找到代码。openapi模块包含OpenAPI文档。它是使用rocket_okapi生成的。你可以在/api/doc访问Rapidoc模块。服务器包含使用用户名和密码进行基本认证的支持。密码在存储到数据库之前会使用bcrypt进行哈希处理。此外,类似于Rustdesk-server-pro,它支持使用与OAuth2兼容的第三方提供商进行认证。目前,只有Github和Dex(作为自定义提供商)可用。要添加新的提供商,你必须实现OAuthProvider和OAuthProviderFactory特性。你可以查看github_provider.rs和dex_provider.rs文件作为示例。
首次启动服务器时,它将创建一个默认用户,用户名为admin,密码为Hello,world!。首次登录Web控制台后,你可以更改密码。
默认管理员用户创建时用户名为admin,密码为Hello,world!。首次登录Web控制台后,你可以更改密码。
我们的自定义客户端存储在S3存储桶中。S3配置存储在s3config.toml文件中。服务器为客户端下载生成签名URL。URL有效期为5分钟。服务器在以下位置生成下载链接:
/api/software/client-download-link/<key>用于客户端下载
服务器需要一个oauth2.toml配置文件才能运行。默认情况下,它应位于./oauth2.toml,尽管可以使用OAUTH2_CONFIG_FILE环境变量修改此位置。将OAUTH2_CREATE_USER变量设置为1可以在首次OAuth2登录时自动创建用户。用户使用Rustdesk ID和随机密码创建,密码会显示在服务器日志中。
服务器还需要一个s3config.toml配置文件才能运行。默认情况下,它应位于./s3config.toml,尽管可以使用S3_CONFIG_FILE环境变量修改此位置。S3配置文件用于配置服务器的S3存储。
如果你不提供这两个文件,服务器将在工作目录中为你创建它们。
服务器设计为使用OpenAPI完全文档化。文档使用rocket_okapi生成。服务器在/api/doc提供Rapidoc模块,允许可视化和测试各种API路由。
显然,没有任何测试可能的Rapidoc服务器部署在https://sctg-development.github.io/api-server/
TypeScript客户端API是使用swagger-codegen.sh自动生成的
Web控制台可在/ui访问,它正在开发中,尚未准备好用于生产环境。
它是未来api-server Web控制台的雏形。
选择的框架是Vue.js。API是使用Swagger codegen为Axios TypeScript从OpenAPI自动生成的。请注意,codegen尚未准备好用于生产环境,需要进行一些修改。
要在服务器运行后重新生成API代码,请运行以下命令(需要Docker运行):
./swagger-codegen.sh
要启动UI开发服务器,请运行以下命令:
sqlite3 db_v2.sqlite3 <<EOF
INSERT OR IGNORE INTO peer (guid, id, uuid, pk, created_at, "user", status, note, region, strategy, info, last_online) VALUES
(x'018f255622f77778a006702ca5c23715', 'TESTUSER', randomblob(16), randomblob(16), '1901-01-01 12:00:00', randomblob(16), 0, '', NULL, randomblob(16), '{}', '1901-01-01 12:00:00');
EOF
cargo build
cd webconsole && npm ci && npm run devserver &
cd ..
VITE_DEVELOPMENT="http://localhost:5173" target/debug/api-server
这将在端口5173上启动一个nodejs UI开发服务器。api-server将请求代理到UI开发服务器,而不是提供嵌入式静态文件。在http://localhost:21114/ui访问开发UI。
每次修改代码时,服务器将自动重建并重新加载UI开发服务器。
服务器可以作为独立服务器运行。要运行服务器,请执行以下命令:
在开发模式下:
DATABASE_URL=sqlite://$(pwd)/db_v2.sqlite3 cargo run --release
在生产模式下:
api-server --help
运行SCTGDesk API服务器
用法: api-server [OPTIONS]
选项:
--address <ADDRESS> 设置服务器地址 [默认: 127.0.0.1]
--port <PORT> 设置服务器端口 [默认: 21114]
--log_level <LOG_LEVEL> 设置服务器日志级别 [默认: debug]
--secret_key <SECRET_KEY> 设置服务器密钥 [默认: wJq+s/xvwZjmMX3ev0p4gQTs9Ej5wt0brsk3ZGhoBTg=]
-h, --help 打印帮助
-V, --version 打印版本
首先,你需要安装Rust工具链。你可以按照https://www.rust-lang.org/tools/install的说明进行安装。
你还需要安装SQLite3开发库。在Ubuntu上,你可以使用以下命令安装它们:
sudo apt install libsqlite3-dev
在MacOS上:
brew install sqlite3
在Windows上:
choco install sqlite
你还需要nodejs和npm来构建Web控制台。你可以按照https://nodejs.org/en/download/的说明进行安装。
要在*nix上构建服务器,请执行以下命令:
DATABASE_URL=sqlite://$(pwd)/db_v2.sqlite3 && cargo build --release
要在Windows上构建服务器,请执行以下命令:
set "DATABASE_URL=sqlite://%CD%/db_v2.sqlite3" && cargo build --release --target x86_64-pc-windows-msvc
服务器可以与Rustdesk-server集成,你可以通过修改Rustdesk-server的main.rs文件轻松集成它:
use api_server::build_rocket;
#[rocket::main]
async fn start_rocket() -> ResultType<()> {
let port = get_arg_or("port", RENDEZVOUS_PORT.to_string()).parse::<i32>()?;
let figment = rocket::Config::figment()
.merge(("address", "0.0.0.0"))
.merge(("port", port-2))
.merge(("log_level", LogLevel::Debug))
.merge(("secret_key", "wJq+s/xvwZjmMX3ev0p4gQTs9Ej5wt0brsk3ZGhoBTg="))
.merge(("limits", Limits::new().limit("json", 2.mebibytes())));
let _rocket = build_rocket(figment).await.ignite().await?.launch().await?;
Ok(())
}
并在main函数中:
let rocket_thread = thread::spawn(|| {
let _ = start_rocket();
});
RendezvousServer::start(port, serial, &get_arg("key"), rmem)?;
let _ = rocket_thread.join();
Ok(())
你可以查看api-server main.rs获取一个可用的集成示例。
如果你想要一个可直接使用的与Rustdesk-Server集成的服务器,你可以使用我自己的服务器api-server。二进制文件可在发布页面获取。二进制文件适用于Linux Ubuntu 22.04LTS amd64和arm64。
用户登录:
curl -X POST "http://127.0.0.1:21114/api/login" \
-H "accept: application/json"\
-H "content-type: application/json" \
-d '{"username":"admin","password":"Hello,world!","id":"string","uuid":"string"}'
# 注意响应中的Bearer令牌
创建用户:
curl -X POST "http://127.0.0.1:21114/api/user" \
-H "accept: application/json"\
-H "authorization: Bearer viZ2ArJutFtKsg0DDC1TiV-87uSRQqGBZXAoCeHrFHc"\
-H "content-type: application/json" \
-d '{"name":"testuser","password":"test","confirm-password":"test","email":"string","is_admin":false,"group_name":"Default"}'
使用Rapidoc在http://127.0.0.1:21114/api/doc测试API