Custom Rustdesk Api Server, include web admin ,web client, web client v2 preview and oidc login
Go
3,156
409 commits
updated Sep 29, 2025
本项目使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。
lejianwen/rustdesk-serverfork自RustDesk Server官方仓库
- 解决了使用API链接超时问题
- 可以强制登录后才能发起链接
- 支持客户端websocket
github, google 和 OIDC 登录,web后台授权登录LDAP(AD和OpenLDAP已测试), 如果API Server配置了LDAP基本实现了PC端基础的接口。支持Personal版本接口,可以通过配置文件rustdesk.personal或环境变量RUSTDESK_API_RUSTDESK_PERSONAL来控制是否启用
| 登录 | |
![]() | |
| 地址簿 | 群组 |
![]() | ![]() |
使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在rustdesk-api-web
后台访问地址是http://<your server>[:port]/_admin/
初次安装管理员为用户名为admin,密码将在控制台打印,可以通过命令行更改密码

管理员界面

普通用户界面

每个用户可以多个地址簿,也可以将地址簿共享给其他用户
分组可以自定义,方便管理,暂时支持两种类型: 共享组 和 普通组
可以直接打开webclient,方便使用;也可以分享给游客,游客可以直接通过webclient远程到设备
Oauth,支持了Github, Google 以及 OIDC, 需要创建一个OAuth App,然后配置到后台
Google 和 Github, Issuer 和 Scopes不需要填写.OIDC, Issuer是必须的。Scopes是可选的,默认为 openid,profile,email. 确保可以获取 sub,email 和preferred_usernamegithub oauth app在Settings->Developer settings->OAuth Apps->New OAuth App
中创建,地址 https://github.com/settings/developersAuthorization callback URL填写http://<your server[:port]>/api/oidc/callback
,比如http://127.0.0.1:21114/api/oidc/callback登录日志
链接日志
文件传输日志
server控制
简易模式,已经界面化了一些简单的指令,可以直接在后台执行

高级模式,直接在后台执行指令
<youer server[:port]>/admin/swagger/index.html<youer server[:port]>/swagger/index.html

# 查看帮助
./apimain -h
./apimain reset-admin-pwd <pwd>
conf/config.yaml配置文件,修改相关配置。gorm.type是sqlite,则不需要配置mysql相关配置。zh-CN环境变量和配置文件conf/config.yaml中的配置一一对应,变量名前缀是RUSTDESK_API
下面表格并未全部列出,可以参考conf/config.yaml中的配置。
| 变量名 | 说明 | 示例 |
|---|---|---|
| TZ | 时区 | Asia/Shanghai |
| RUSTDESK_API_LANG | 语言 | en,zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | 是否启用web-client; 1:启用,0:不启用; 默认启用 | 1 |
| RUSTDESK_API_APP_REGISTER | 是否开启注册; true, false 默认false | false |
| RUSTDESK_API_APP_SHOW_SWAGGER | 是否可见swagger文档;1显示,0不显示,默认0不显示 | 1 |
| RUSTDESK_API_APP_TOKEN_EXPIRE | token有效时长 | 168h |
| RUSTDESK_API_APP_DISABLE_PWD_LOGIN | 是否禁用密码登录; true, false 默认false | false |
| RUSTDESK_API_APP_REGISTER_STATUS | 注册用户默认状态; 1 启用,2 禁用, 默认 1 | 1 |
| RUSTDESK_API_APP_CAPTCHA_THRESHOLD | 验证码触发次数; -1 不启用, 0 一直启用, >0 登录错误次数后启用 ;默认 3 | 3 |
| RUSTDESK_API_APP_BAN_THRESHOLD | 封禁IP触发次数; 0 不启用, >0 登录错误次数后封禁IP; 默认 0 | 0 |
| -----ADMIN配置----- | ---------- | ---------- |
| RUSTDESK_API_ADMIN_TITLE | 后台标题 | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | 后台欢迎语,可以使用html | |
| RUSTDESK_API_ADMIN_HELLO_FILE | 后台欢迎语文件,如果内容多,使用文件更方便。 会覆盖 RUSTDESK_API_ADMIN_HELLO | ./conf/admin/hello.html |
| -----GIN配置----- | ---------- | ---------- |
| RUSTDESK_API_GIN_TRUST_PROXY | 信任的代理IP列表,以,分割,默认信任所有 | 192.168.1.2,192.168.1.3 |
| -----GORM配置----- | ---------- | --------------------------- |
| RUSTDESK_API_GORM_TYPE | 数据库类型sqlite或者mysql,默认sqlite | sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | 数据库最大空闲连接数 | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | 数据库最大打开连接数 | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | 是否启用个人版API, 1:启用,0:不启用; 默认启用 | 1 |
| -----MYSQL配置----- | ---------- | ---------- |
| RUSTDESK_API_MYSQL_USERNAME | mysql用户名 | root |
| RUSTDESK_API_MYSQL_PASSWORD | mysql密码 | 111111 |
| RUSTDESK_API_MYSQL_ADDR | mysql地址 | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | mysql数据库名 | rustdesk |
| RUSTDESK_API_MYSQL_TLS | 是否启用TLS, 可选值: true, false, skip-verify, custom | false |
| -----RUSTDESK配置----- | ---------- | ---------- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Rustdesk的id服务器地址 | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
| RUSTDESK_API_RUSTDESK_KEY_FILE | Rustdesk存放key的文件 | ./conf/data/id_ed25519.pub |
| RUSTDESK_API_RUSTDESK_WEBCLIENT _MAGIC_QUERYONLINE | Web client v2 中是否启用新的在线状态查询方法; 1:启用,0:不启用,默认不启用 | 0 |
| RUSTDESK_API_RUSTDESK_WS_HOST | 自定义Websocket Host | wss://192.168.1.123:1234 |
| ----PROXY配置----- | ---------- | ---------- |
| RUSTDESK_API_PROXY_ENABLE | 是否启用代理:false, true | false |
| RUSTDESK_API_PROXY_HOST | 代理地址 | http://127.0.0.1:1080 |
| ----JWT配置---- | -------- | -------- |
| RUSTDESK_API_JWT_KEY | 自定义JWT KEY,为空则不启用JWT 如果没使用 lejianwen/rustdesk-server中的MUST_LOGIN,建议设置为空 | |
| RUSTDESK_API_JWT_EXPIRE_DURATION | JWT有效时间 | 168h |
直接docker运行,配置可以通过挂载配置文件/app/conf/config.yaml来修改,或者通过环境变量覆盖配置文件中的配置
docker run -d --name rustdesk-api -p 21114:21114 \
-v /data/rustdesk/api:/app/data \
-e TZ=Asia/Shanghai \
-e RUSTDESK_API_LANG=zh-CN \
-e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \
-e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \
-e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \
-e RUSTDESK_API_RUSTDESK_KEY=<key> \
lejianwen/rustdesk-api
使用docker compose,参考WIKI
克隆仓库
git clone https://github.com/lejianwen/rustdesk-api.git
cd rustdesk-api
安装依赖
go mod tidy
#安装swag,如果不需要生成文档,可以不安装
go install github.com/swaggo/swag/cmd/swag@latest
编译后台前端,前端代码在rustdesk-api-web中
cd resources
mkdir -p admin
git clone https://github.com/lejianwen/rustdesk-api-web
cd rustdesk-api-web
npm install
npm run build
cp -ar dist/* ../admin/
运行
#直接运行
go run cmd/apimain.go
#或者使用generate_api.go生成api并运行
go generate generate_api.go
注意:使用
go run或编译后的二进制时,当前目录下必须存在conf和resources目录。如果在其他目录运行,可通过-c和环境变量RUSTDESK_API_GIN_RESOURCES_PATH指定绝对路径,例如:RUSTDESK_API_GIN_RESOURCES_PATH=/opt/rustdesk-api/resources ./apimain -c /opt/rustdesk-api/conf/config.yaml
编译,如果想自己编译,先cd到项目根目录,然后windows下直接运行build.bat,linux下运行build.sh,编译后会在release
目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。
打开浏览器访问http://<your server[:port]>/_admin/,默认用户名密码为admin,请及时更改密码。
lejianwen/server-s6镜像运行 networks:
rustdesk-net:
external: false
services:
rustdesk:
ports:
- 21114:21114
- 21115:21115
- 21116:21116
- 21116:21116/udp
- 21117:21117
- 21118:21118
- 21119:21119
image: lejianwen/rustdesk-server-s6:latest
environment:
- RELAY=<relay_server[:port]>
- ENCRYPTED_ONLY=1
- MUST_LOGIN=N
- TZ=Asia/Shanghai
- RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]>
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]>
- RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]>
- RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_JWT_KEY=xxxxxx # jwt key
volumes:
- /data/rustdesk/server:/data
- /data/rustdesk/api:/app/data #将数据库挂载
networks:
- rustdesk-net
restart: unless-stopped
感谢所有做过贡献的人!
Go module
Latest release
Releases this year
715 followers · starred Mar 2025
96 followers · starred Jun 2025
5 followers · starred Jun 2025
16 followers · starred Sep 2026
Custom Rustdesk Api Server, include web admin ,web client, web client v2 preview and oidc login
Go
3,156
409 commits
updated Sep 29, 2025
本项目使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。
lejianwen/rustdesk-serverfork自RustDesk Server官方仓库
- 解决了使用API链接超时问题
- 可以强制登录后才能发起链接
- 支持客户端websocket
github, google 和 OIDC 登录,web后台授权登录LDAP(AD和OpenLDAP已测试), 如果API Server配置了LDAP基本实现了PC端基础的接口。支持Personal版本接口,可以通过配置文件rustdesk.personal或环境变量RUSTDESK_API_RUSTDESK_PERSONAL来控制是否启用
| 登录 | |
![]() | |
| 地址簿 | 群组 |
![]() | ![]() |
使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在rustdesk-api-web
后台访问地址是http://<your server>[:port]/_admin/
初次安装管理员为用户名为admin,密码将在控制台打印,可以通过命令行更改密码

管理员界面

普通用户界面

每个用户可以多个地址簿,也可以将地址簿共享给其他用户
分组可以自定义,方便管理,暂时支持两种类型: 共享组 和 普通组
可以直接打开webclient,方便使用;也可以分享给游客,游客可以直接通过webclient远程到设备
Oauth,支持了Github, Google 以及 OIDC, 需要创建一个OAuth App,然后配置到后台
Google 和 Github, Issuer 和 Scopes不需要填写.OIDC, Issuer是必须的。Scopes是可选的,默认为 openid,profile,email. 确保可以获取 sub,email 和preferred_usernamegithub oauth app在Settings->Developer settings->OAuth Apps->New OAuth App
中创建,地址 https://github.com/settings/developersAuthorization callback URL填写http://<your server[:port]>/api/oidc/callback
,比如http://127.0.0.1:21114/api/oidc/callback登录日志
链接日志
文件传输日志
server控制
简易模式,已经界面化了一些简单的指令,可以直接在后台执行

高级模式,直接在后台执行指令
<youer server[:port]>/admin/swagger/index.html<youer server[:port]>/swagger/index.html

# 查看帮助
./apimain -h
./apimain reset-admin-pwd <pwd>
conf/config.yaml配置文件,修改相关配置。gorm.type是sqlite,则不需要配置mysql相关配置。zh-CN环境变量和配置文件conf/config.yaml中的配置一一对应,变量名前缀是RUSTDESK_API
下面表格并未全部列出,可以参考conf/config.yaml中的配置。
| 变量名 | 说明 | 示例 |
|---|---|---|
| TZ | 时区 | Asia/Shanghai |
| RUSTDESK_API_LANG | 语言 | en,zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | 是否启用web-client; 1:启用,0:不启用; 默认启用 | 1 |
| RUSTDESK_API_APP_REGISTER | 是否开启注册; true, false 默认false | false |
| RUSTDESK_API_APP_SHOW_SWAGGER | 是否可见swagger文档;1显示,0不显示,默认0不显示 | 1 |
| RUSTDESK_API_APP_TOKEN_EXPIRE | token有效时长 | 168h |
| RUSTDESK_API_APP_DISABLE_PWD_LOGIN | 是否禁用密码登录; true, false 默认false | false |
| RUSTDESK_API_APP_REGISTER_STATUS | 注册用户默认状态; 1 启用,2 禁用, 默认 1 | 1 |
| RUSTDESK_API_APP_CAPTCHA_THRESHOLD | 验证码触发次数; -1 不启用, 0 一直启用, >0 登录错误次数后启用 ;默认 3 | 3 |
| RUSTDESK_API_APP_BAN_THRESHOLD | 封禁IP触发次数; 0 不启用, >0 登录错误次数后封禁IP; 默认 0 | 0 |
| -----ADMIN配置----- | ---------- | ---------- |
| RUSTDESK_API_ADMIN_TITLE | 后台标题 | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | 后台欢迎语,可以使用html | |
| RUSTDESK_API_ADMIN_HELLO_FILE | 后台欢迎语文件,如果内容多,使用文件更方便。 会覆盖 RUSTDESK_API_ADMIN_HELLO | ./conf/admin/hello.html |
| -----GIN配置----- | ---------- | ---------- |
| RUSTDESK_API_GIN_TRUST_PROXY | 信任的代理IP列表,以,分割,默认信任所有 | 192.168.1.2,192.168.1.3 |
| -----GORM配置----- | ---------- | --------------------------- |
| RUSTDESK_API_GORM_TYPE | 数据库类型sqlite或者mysql,默认sqlite | sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | 数据库最大空闲连接数 | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | 数据库最大打开连接数 | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | 是否启用个人版API, 1:启用,0:不启用; 默认启用 | 1 |
| -----MYSQL配置----- | ---------- | ---------- |
| RUSTDESK_API_MYSQL_USERNAME | mysql用户名 | root |
| RUSTDESK_API_MYSQL_PASSWORD | mysql密码 | 111111 |
| RUSTDESK_API_MYSQL_ADDR | mysql地址 | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | mysql数据库名 | rustdesk |
| RUSTDESK_API_MYSQL_TLS | 是否启用TLS, 可选值: true, false, skip-verify, custom | false |
| -----RUSTDESK配置----- | ---------- | ---------- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Rustdesk的id服务器地址 | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
| RUSTDESK_API_RUSTDESK_KEY_FILE | Rustdesk存放key的文件 | ./conf/data/id_ed25519.pub |
| RUSTDESK_API_RUSTDESK_WEBCLIENT _MAGIC_QUERYONLINE | Web client v2 中是否启用新的在线状态查询方法; 1:启用,0:不启用,默认不启用 | 0 |
| RUSTDESK_API_RUSTDESK_WS_HOST | 自定义Websocket Host | wss://192.168.1.123:1234 |
| ----PROXY配置----- | ---------- | ---------- |
| RUSTDESK_API_PROXY_ENABLE | 是否启用代理:false, true | false |
| RUSTDESK_API_PROXY_HOST | 代理地址 | http://127.0.0.1:1080 |
| ----JWT配置---- | -------- | -------- |
| RUSTDESK_API_JWT_KEY | 自定义JWT KEY,为空则不启用JWT 如果没使用 lejianwen/rustdesk-server中的MUST_LOGIN,建议设置为空 | |
| RUSTDESK_API_JWT_EXPIRE_DURATION | JWT有效时间 | 168h |
直接docker运行,配置可以通过挂载配置文件/app/conf/config.yaml来修改,或者通过环境变量覆盖配置文件中的配置
docker run -d --name rustdesk-api -p 21114:21114 \
-v /data/rustdesk/api:/app/data \
-e TZ=Asia/Shanghai \
-e RUSTDESK_API_LANG=zh-CN \
-e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \
-e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \
-e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \
-e RUSTDESK_API_RUSTDESK_KEY=<key> \
lejianwen/rustdesk-api
使用docker compose,参考WIKI
克隆仓库
git clone https://github.com/lejianwen/rustdesk-api.git
cd rustdesk-api
安装依赖
go mod tidy
#安装swag,如果不需要生成文档,可以不安装
go install github.com/swaggo/swag/cmd/swag@latest
编译后台前端,前端代码在rustdesk-api-web中
cd resources
mkdir -p admin
git clone https://github.com/lejianwen/rustdesk-api-web
cd rustdesk-api-web
npm install
npm run build
cp -ar dist/* ../admin/
运行
#直接运行
go run cmd/apimain.go
#或者使用generate_api.go生成api并运行
go generate generate_api.go
注意:使用
go run或编译后的二进制时,当前目录下必须存在conf和resources目录。如果在其他目录运行,可通过-c和环境变量RUSTDESK_API_GIN_RESOURCES_PATH指定绝对路径,例如:RUSTDESK_API_GIN_RESOURCES_PATH=/opt/rustdesk-api/resources ./apimain -c /opt/rustdesk-api/conf/config.yaml
编译,如果想自己编译,先cd到项目根目录,然后windows下直接运行build.bat,linux下运行build.sh,编译后会在release
目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。
打开浏览器访问http://<your server[:port]>/_admin/,默认用户名密码为admin,请及时更改密码。
lejianwen/server-s6镜像运行 networks:
rustdesk-net:
external: false
services:
rustdesk:
ports:
- 21114:21114
- 21115:21115
- 21116:21116
- 21116:21116/udp
- 21117:21117
- 21118:21118
- 21119:21119
image: lejianwen/rustdesk-server-s6:latest
environment:
- RELAY=<relay_server[:port]>
- ENCRYPTED_ONLY=1
- MUST_LOGIN=N
- TZ=Asia/Shanghai
- RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]>
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]>
- RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]>
- RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_JWT_KEY=xxxxxx # jwt key
volumes:
- /data/rustdesk/server:/data
- /data/rustdesk/api:/app/data #将数据库挂载
networks:
- rustdesk-net
restart: unless-stopped
感谢所有做过贡献的人!
Go module
Latest release
Releases this year
715 followers · starred Mar 2025
96 followers · starred Jun 2025
5 followers · starred Jun 2025
16 followers · starred Sep 2026