[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73256":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},73256,"rustdesk-api","lejianwen\u002Frustdesk-api","lejianwen","Custom Rustdesk Api Server, include web admin ,web client, web client v2 preview and oidc login","",null,"Go",2917,661,26,99,0,14,31,70,42,102.96,"MIT License",false,"master",true,[27,28,29,30,31,32,33],"rustdesk","rustdesk-api-server","rustdesk-server","rustdesk-web-admin","rustdesk-web-client","rustdesk-webclient","rustdesk-webclient-v2","2026-06-12 04:01:08","# RustDesk API\n\n[English Doc](README_EN.md)\n\n本项目使用 Go 实现了 RustDesk 的 API，并包含了 Web Admin 和 Web 客户端。\n\n\n\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgolang-1.22-blue\"\u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgin-v1.9.0-lightBlue\"\u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgorm-v1.25.7-green\"\u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fswag-v1.16.3-yellow\"\u002F>\n\u003Cimg src=\"https:\u002F\u002Fgoreportcard.com\u002Fbadge\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fv2\"\u002F>\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg\"\u002F>\n\u003C\u002Fdiv>\n\n## 搭配[lejianwen\u002Frustdesk-server]使用更佳。\n> [lejianwen\u002Frustdesk-server]fork自RustDesk Server官方仓库\n> 1. 解决了使用API链接超时问题\n> 2. 可以强制登录后才能发起链接\n> 3. 支持客户端websocket\n\n\n\n# 特性\n\n- PC端API\n    - 个人版API\n    - 登录\n    - 地址簿\n    - 群组\n    - 授权登录\n      - 支持`github`, `google` 和 `OIDC` 登录，\n      - 支持`web后台`授权登录\n      - 支持`LDAP`(AD和OpenLDAP已测试), 如果API Server配置了LDAP\n    - i18n\n- Web Admin\n    - 用户管理\n    - 设备管理\n    - 地址簿管理\n    - 标签管理\n    - 群组管理\n    - Oauth 管理\n    - 配置LDAP, 配置文件或者环境变量\n    - 登录日志\n    - 链接日志\n    - 文件传输日志\n    - 快速使用web client\n    - i18n\n    - 通过 web client 分享给游客\n    - server控制(一些官方的简单的指令 [WIKI](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fwiki\u002FRustdesk-Command))\n- Web Client\n    - 自动获取API server\n    - 自动获取ID服务器和KEY\n    - 自动获取地址簿\n    - 游客通过临时分享链接直接远程到设备\n- CLI\n    - 重置管理员密码\n\n## 功能\n\n\n### API 服务 \n基本实现了PC端基础的接口。支持Personal版本接口，可以通过配置文件`rustdesk.personal`或环境变量`RUSTDESK_API_RUSTDESK_PERSONAL`来控制是否启用\n\n\u003Ctable>\n    \u003Ctr>\n      \u003Ctd width=\"50%\" align=\"center\" colspan=\"2\">\u003Cb>登录\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd width=\"50%\" align=\"center\" colspan=\"2\">\u003Cimg src=\"docs\u002Fpc_login.png\">\u003C\u002Ftd>\n    \u003C\u002Ftr>\n     \u003Ctr>\n      \u003Ctd width=\"50%\" align=\"center\">\u003Cb>地址簿\u003C\u002Fb>\u003C\u002Ftd>\n      \u003Ctd width=\"50%\" align=\"center\">\u003Cb>群组\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd width=\"50%\" align=\"center\">\u003Cimg src=\"docs\u002Fpc_ab.png\">\u003C\u002Ftd>\n        \u003Ctd width=\"50%\" align=\"center\">\u003Cimg src=\"docs\u002Fpc_gr.png\">\u003C\u002Ftd>\n    \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### Web Admin:\n\n* 使用前后端分离，提供用户友好的管理界面，主要用来管理和展示。前端代码在[rustdesk-api-web](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api-web)\n\n* 后台访问地址是`http:\u002F\u002F\u003Cyour server>[:port]\u002F_admin\u002F`\n* 初次安装管理员为用户名为`admin`，密码将在控制台打印，可以通过[命令行](#CLI)更改密码\n\n  ![img.png](.\u002Fdocs\u002Finit_admin_pwd.png)\n\n1. 管理员界面\n   ![web_admin](docs\u002Fweb_admin.png)\n2. 普通用户界面\n   ![web_user](docs\u002Fweb_admin_user.png)\n\n3. 每个用户可以多个地址簿，也可以将地址簿共享给其他用户\n4. 分组可以自定义，方便管理，暂时支持两种类型: `共享组` 和 `普通组`\n5. 可以直接打开webclient，方便使用；也可以分享给游客，游客可以直接通过webclient远程到设备\n6. Oauth,支持了`Github`, `Google` 以及 `OIDC`, 需要创建一个`OAuth App`，然后配置到后台\n    - 对于`Google` 和 `Github`, `Issuer` 和 `Scopes`不需要填写.\n    - 对于`OIDC`, `Issuer`是必须的。`Scopes`是可选的，默认为 `openid,profile,email`. 确保可以获取 `sub`,`email` 和`preferred_username`\n    - `github oauth app`在`Settings`->`Developer settings`->`OAuth Apps`->`New OAuth App`\n      中创建,地址 [https:\u002F\u002Fgithub.com\u002Fsettings\u002Fdevelopers](https:\u002F\u002Fgithub.com\u002Fsettings\u002Fdevelopers)\n    - `Authorization callback URL`填写`http:\u002F\u002F\u003Cyour server[:port]>\u002Fapi\u002Foidc\u002Fcallback`\n      ，比如`http:\u002F\u002F127.0.0.1:21114\u002Fapi\u002Foidc\u002Fcallback`\n7. 登录日志\n8. 链接日志\n9. 文件传输日志\n10. server控制\n\n  - `简易模式`,已经界面化了一些简单的指令，可以直接在后台执行\n    ![rustdesk_command_simple](.\u002Fdocs\u002Frustdesk_command_simple.png)\n\n  - `高级模式`,直接在后台执行指令\n      * 可以官方指令\n      * 可以添加自定义指令\n      * 可以执行自定义指令\n\n \n11. **LDAP 支持**, 当在API Server上设置了LDAP(已测试AD和LDAP),可以通过LDAP中的用户信息进行登录 https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fissues\u002F114 ,如果LDAP验证失败，返回本地用户\n\n### Web Client:\n\n1. 如果已经登录了后台，web client将自动直接登录\n2. 如果没登录后台，点击右上角登录即可，api server已经自动配置好了\n3. 登录后，会自动同步ID服务器和KEY\n4. 登录后，会将地址簿自动保存到web client中，方便使用\n\n\n### 自动化文档: 使用 Swag 生成 API 文档，方便开发者理解和使用 API。\n\n1. 后台文档 `\u003Cyouer server[:port]>\u002Fadmin\u002Fswagger\u002Findex.html`\n2. PC端文档 `\u003Cyouer server[:port]>\u002Fswagger\u002Findex.html`\n   ![api_swag](docs\u002Fapi_swag.png)\n\n### CLI\n\n```bash\n# 查看帮助\n.\u002Fapimain -h\n```\n\n#### 重置管理员密码\n```bash\n.\u002Fapimain reset-admin-pwd \u003Cpwd>\n```\n\n## 安装与运行\n\n### 相关配置\n\n* [配置文件](.\u002Fconf\u002Fconfig.yaml)\n* 参考`conf\u002Fconfig.yaml`配置文件，修改相关配置。\n* 如果`gorm.type`是`sqlite`，则不需要配置mysql相关配置。\n* 语言如果不设置默认为`zh-CN`\n\n### 环境变量\n环境变量和配置文件`conf\u002Fconfig.yaml`中的配置一一对应，变量名前缀是`RUSTDESK_API`\n下面表格并未全部列出，可以参考`conf\u002Fconfig.yaml`中的配置。\n\n| 变量名                                                    | 说明                                                                             | 示例                           |\n|--------------------------------------------------------|--------------------------------------------------------------------------------|------------------------------|\n| TZ                                                     | 时区                                                                             | Asia\u002FShanghai                |\n| RUSTDESK_API_LANG                                      | 语言                                                                             | `en`,`zh-CN`                 |\n| RUSTDESK_API_APP_WEB_CLIENT                            | 是否启用web-client; 1:启用,0:不启用; 默认启用                                               | 1                            |\n| RUSTDESK_API_APP_REGISTER                              | 是否开启注册; `true`, `false`  默认`false`                                             | `false`                      |\n| RUSTDESK_API_APP_SHOW_SWAGGER                          | 是否可见swagger文档;`1`显示，`0`不显示，默认`0`不显示                                            | `1`                          |\n| RUSTDESK_API_APP_TOKEN_EXPIRE                          | token有效时长                                                                      | `168h`                       |\n| RUSTDESK_API_APP_DISABLE_PWD_LOGIN                     | 是否禁用密码登录;  `true`, `false`  默认`false`                                          | `false`                      |\n| RUSTDESK_API_APP_REGISTER_STATUS                       | 注册用户默认状态; 1 启用，2 禁用, 默认 1                                                      | `1`                          |\n| RUSTDESK_API_APP_CAPTCHA_THRESHOLD                     | 验证码触发次数; -1 不启用， 0 一直启用， >0 登录错误次数后启用 ;默认 `3`                                  | `3`                          |\n| RUSTDESK_API_APP_BAN_THRESHOLD                         | 封禁IP触发次数; 0 不启用, >0 登录错误次数后封禁IP; 默认 `0`                                        | `0`                          |\n| -----ADMIN配置-----                                      | ----------                                                                     | ----------                   |\n| RUSTDESK_API_ADMIN_TITLE                               | 后台标题                                                                           | `RustDesk Api Admin`         |\n| RUSTDESK_API_ADMIN_HELLO                               | 后台欢迎语，可以使用`html`                                                               |                              |\n| RUSTDESK_API_ADMIN_HELLO_FILE                          | 后台欢迎语文件，如果内容多，使用文件更方便。\u003Cbr>会覆盖`RUSTDESK_API_ADMIN_HELLO`                        | `.\u002Fconf\u002Fadmin\u002Fhello.html`    |\n| -----GIN配置-----                                        | ----------                                                                     | ----------                   |\n| RUSTDESK_API_GIN_TRUST_PROXY                           | 信任的代理IP列表，以`,`分割，默认信任所有                                                        | 192.168.1.2,192.168.1.3      |\n| -----GORM配置-----                                       | ----------                                                                     | ---------------------------  |\n| RUSTDESK_API_GORM_TYPE                                 | 数据库类型sqlite或者mysql，默认sqlite                                                    | sqlite                       |\n| RUSTDESK_API_GORM_MAX_IDLE_CONNS                       | 数据库最大空闲连接数                                                                     | 10                           |\n| RUSTDESK_API_GORM_MAX_OPEN_CONNS                       | 数据库最大打开连接数                                                                     | 100                          |\n| RUSTDESK_API_RUSTDESK_PERSONAL                         | 是否启用个人版API， 1:启用,0:不启用； 默认启用                                                   | 1                            |\n| -----MYSQL配置-----                                      | ----------                                                                     | ----------                   |\n| RUSTDESK_API_MYSQL_USERNAME                            | mysql用户名                                                                       | root                         |\n| RUSTDESK_API_MYSQL_PASSWORD                            | mysql密码                                                                        | 111111                       |\n| RUSTDESK_API_MYSQL_ADDR                                | mysql地址                                                                        | 192.168.1.66:3306            |\n| RUSTDESK_API_MYSQL_DBNAME                              | mysql数据库名                                                                      | rustdesk                     |\n| RUSTDESK_API_MYSQL_TLS                             | 是否启用TLS, 可选值: `true`, `false`, `skip-verify`, `custom` | `false`                      |\n| -----RUSTDESK配置-----                                   | ----------                                                                     | ----------                   |\n| RUSTDESK_API_RUSTDESK_ID_SERVER                        | Rustdesk的id服务器地址                                                               | 192.168.1.66:21116           |\n| RUSTDESK_API_RUSTDESK_RELAY_SERVER                     | Rustdesk的relay服务器地址                                                            | 192.168.1.66:21117           |\n| RUSTDESK_API_RUSTDESK_API_SERVER                       | Rustdesk的api服务器地址                                                              | http:\u002F\u002F192.168.1.66:21114    |\n| RUSTDESK_API_RUSTDESK_KEY                              | Rustdesk的key                                                                   | 123456789                    |\n| RUSTDESK_API_RUSTDESK_KEY_FILE                         | Rustdesk存放key的文件                                                               | `.\u002Fconf\u002Fdata\u002Fid_ed25519.pub` |\n| RUSTDESK_API_RUSTDESK_WEBCLIENT\u003Cbr\u002F>_MAGIC_QUERYONLINE | Web client v2 中是否启用新的在线状态查询方法; `1`:启用,`0`:不启用,默认不启用                            | `0`                          |\n| RUSTDESK_API_RUSTDESK_WS_HOST                          | 自定义Websocket Host                                                              | `wss:\u002F\u002F192.168.1.123:1234`   |\n| ----PROXY配置-----                                       | ----------                                                                     | ----------                   |\n| RUSTDESK_API_PROXY_ENABLE                              | 是否启用代理:`false`, `true`                                                         | `false`                      |\n| RUSTDESK_API_PROXY_HOST                                | 代理地址                                                                           | `http:\u002F\u002F127.0.0.1:1080`      |\n| ----JWT配置----                                          | --------                                                                       | --------                     |\n| RUSTDESK_API_JWT_KEY                                   | 自定义JWT KEY,为空则不启用JWT\u003Cbr\u002F>如果没使用`lejianwen\u002Frustdesk-server`中的`MUST_LOGIN`，建议设置为空 |                              |\n| RUSTDESK_API_JWT_EXPIRE_DURATION                       | JWT有效时间                                                                        | `168h`                       |\n\n\n### 运行\n\n#### docker运行\n\n1. 直接docker运行,配置可以通过挂载配置文件`\u002Fapp\u002Fconf\u002Fconfig.yaml`来修改,或者通过环境变量覆盖配置文件中的配置\n\n    ```bash\n    docker run -d --name rustdesk-api -p 21114:21114 \\\n    -v \u002Fdata\u002Frustdesk\u002Fapi:\u002Fapp\u002Fdata \\\n    -e TZ=Asia\u002FShanghai \\\n    -e RUSTDESK_API_LANG=zh-CN \\\n    -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \\\n    -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \\\n    -e RUSTDESK_API_RUSTDESK_API_SERVER=http:\u002F\u002F192.168.1.66:21114 \\\n    -e RUSTDESK_API_RUSTDESK_KEY=\u003Ckey> \\\n    lejianwen\u002Frustdesk-api\n    ```\n\n2. 使用`docker compose`，参考[WIKI](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fwiki)\n\n#### 下载release直接运行\n\n[下载地址](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Freleases)\n\n#### 源码安装\n\n1. 克隆仓库\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api.git\n   cd rustdesk-api\n   ```\n\n2. 安装依赖\n\n    ```bash\n    go mod tidy\n    #安装swag，如果不需要生成文档，可以不安装\n    go install github.com\u002Fswaggo\u002Fswag\u002Fcmd\u002Fswag@latest\n    ```\n\n3. 编译后台前端，前端代码在[rustdesk-api-web](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api-web)中\n   ```bash\n   cd resources\n   mkdir -p admin\n   git clone https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api-web\n   cd rustdesk-api-web\n   npm install\n   npm run build\n   cp -ar dist\u002F* ..\u002Fadmin\u002F\n   ```\n4. 运行\n    ```bash\n    #直接运行\n    go run cmd\u002Fapimain.go\n    #或者使用generate_api.go生成api并运行\n    go generate generate_api.go\n    ```\n   > 注意：使用 `go run` 或编译后的二进制时，当前目录下必须存在 `conf` 和 `resources`\n   > 目录。如果在其他目录运行，可通过 `-c` 和环境变量\n   > `RUSTDESK_API_GIN_RESOURCES_PATH` 指定绝对路径，例如：\n   > ```bash\n   > RUSTDESK_API_GIN_RESOURCES_PATH=\u002Fopt\u002Frustdesk-api\u002Fresources .\u002Fapimain -c \u002Fopt\u002Frustdesk-api\u002Fconf\u002Fconfig.yaml\n   > ```\n5. 编译，如果想自己编译,先cd到项目根目录，然后windows下直接运行`build.bat`,linux下运行`build.sh`,编译后会在`release`\n   目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。\n\n6. 打开浏览器访问`http:\u002F\u002F\u003Cyour server[:port]>\u002F_admin\u002F`，默认用户名密码为`admin`，请及时更改密码。\n\n\n#### 使用`lejianwen\u002Fserver-s6`镜像运行\n\n- 已解决链接超时问题\n- 可以强制登录后才能发起链接\n- github https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-server\n\n```yaml\n networks:\n   rustdesk-net:\n     external: false\n services:\n   rustdesk:\n     ports:\n       - 21114:21114\n       - 21115:21115\n       - 21116:21116\n       - 21116:21116\u002Fudp\n       - 21117:21117\n       - 21118:21118\n       - 21119:21119\n     image: lejianwen\u002Frustdesk-server-s6:latest\n     environment:\n       - RELAY=\u003Crelay_server[:port]>\n       - ENCRYPTED_ONLY=1\n       - MUST_LOGIN=N\n       - TZ=Asia\u002FShanghai\n       - RUSTDESK_API_RUSTDESK_ID_SERVER=\u003Cid_server[:21116]>\n       - RUSTDESK_API_RUSTDESK_RELAY_SERVER=\u003Crelay_server[:21117]>\n       - RUSTDESK_API_RUSTDESK_API_SERVER=http:\u002F\u002F\u003Capi_server[:21114]>\n       - RUSTDESK_API_KEY_FILE=\u002Fdata\u002Fid_ed25519.pub\n       - RUSTDESK_API_JWT_KEY=xxxxxx # jwt key\n     volumes:\n       - \u002Fdata\u002Frustdesk\u002Fserver:\u002Fdata\n       - \u002Fdata\u002Frustdesk\u002Fapi:\u002Fapp\u002Fdata #将数据库挂载\n     networks:\n       - rustdesk-net\n     restart: unless-stopped\n       \n```\n\n\n## 其他\n\n- [WIKI](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fwiki)\n- [链接超时问题](https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fissues\u002F92)\n- [修改客户端ID](https:\u002F\u002Fgithub.com\u002Fabdullah-erturk\u002FRustDesk-ID-Changer)\n- [webclient来源](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fkeyurbhole\u002Fflutter_web_desk)\n\n\n## 鸣谢\n\n感谢所有做过贡献的人!\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-api\u002Fgraphs\u002Fcontributors\">\n  \u003Cimg src=\"https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=lejianwen\u002Frustdesk-api\" \u002F>\n\u003C\u002Fa>\n\n## 感谢你的支持！如果这个项目对你有帮助，请点个⭐️鼓励一下，谢谢！\n\n[lejianwen\u002Frustdesk-server]: https:\u002F\u002Fgithub.com\u002Flejianwen\u002Frustdesk-server","该项目是一个自定义的 RustDesk API 服务器，提供了 Web 管理界面、Web 客户端及 OIDC 登录等功能。核心功能包括个人版API、用户和设备管理、地址簿与群组管理、支持多种认证方式（如GitHub、Google、OIDC和LDAP）以及日志记录等。技术上采用Go语言开发，并利用了Gin框架、Gorm ORM等现代工具来构建高效且易于维护的服务。它非常适合需要远程桌面解决方案的企业或个人使用，特别是在那些要求高度定制化和安全性的场景下。通过这个项目，用户可以获得一个更加灵活可控的RustDesk服务环境。",2,"2026-06-11 03:44:44","high_star"]