{"id":26947470,"url":"https://github.com/lejianwen/rustdesk-api","last_synced_at":"2025-05-15T07:06:39.171Z","repository":{"id":256910623,"uuid":"856756179","full_name":"lejianwen/rustdesk-api","owner":"lejianwen","description":"Custom Rustdesk Api Server, include web admin ,web client, web client v2 preview and oidc login","archived":false,"fork":false,"pushed_at":"2025-05-08T03:37:08.000Z","size":17148,"stargazers_count":978,"open_issues_count":10,"forks_count":228,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-05-08T04:31:44.973Z","etag":null,"topics":["rustdesk","rustdesk-api-server","rustdesk-server","rustdesk-web-admin","rustdesk-web-client","rustdesk-webclient","rustdesk-webclient-v2"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lejianwen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-13T06:32:21.000Z","updated_at":"2025-05-08T03:37:12.000Z","dependencies_parsed_at":"2024-09-13T21:24:52.983Z","dependency_job_id":"cf1051b9-3ba9-46e1-a5fa-8337c92fa59b","html_url":"https://github.com/lejianwen/rustdesk-api","commit_stats":null,"previous_names":["lejianwen/rustdesk-api"],"tags_count":83,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lejianwen%2Frustdesk-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lejianwen%2Frustdesk-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lejianwen%2Frustdesk-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lejianwen%2Frustdesk-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lejianwen","download_url":"https://codeload.github.com/lejianwen/rustdesk-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254292042,"owners_count":22046426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rustdesk","rustdesk-api-server","rustdesk-server","rustdesk-web-admin","rustdesk-web-client","rustdesk-webclient","rustdesk-webclient-v2"],"created_at":"2025-04-02T20:19:21.222Z","updated_at":"2025-05-15T07:06:34.152Z","avatar_url":"https://github.com/lejianwen.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# RustDesk API\n\n[English Doc](README_EN.md)\n\n本项目使用 Go 实现了 RustDesk 的 API，并包含了 Web Admin 和 Web 客户端。RustDesk 是一个远程桌面软件，提供了自托管的解决方案。\n\n\u003cdiv align=center\u003e\n\u003cimg src=\"https://img.shields.io/badge/golang-1.22-blue\"/\u003e\n\u003cimg src=\"https://img.shields.io/badge/gin-v1.9.0-lightBlue\"/\u003e\n\u003cimg src=\"https://img.shields.io/badge/gorm-v1.25.7-green\"/\u003e\n\u003cimg src=\"https://img.shields.io/badge/swag-v1.16.3-yellow\"/\u003e\n\u003cimg src=\"https://goreportcard.com/badge/github.com/lejianwen/rustdesk-api/v2\"/\u003e\n\u003cimg src=\"https://github.com/lejianwen/rustdesk-api/actions/workflows/build.yml/badge.svg\"/\u003e\n\u003c/div\u003e\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://github.com/lejianwen/rustdesk-api/wiki/Rustdesk-Command))\n- Web Client\n    - 自动获取API server\n    - 自动获取ID服务器和KEY\n    - 自动获取地址簿\n    - 游客通过临时分享链接直接远程到设备\n    - v2 Preview\n- CLI\n    - 重置管理员密码\n\n## 功能\n\n\n### API 服务 \n基本实现了PC端基础的接口。支持Personal版本接口，可以通过配置文件`rustdesk.personal`或环境变量`RUSTDESK_API_RUSTDESK_PERSONAL`来控制是否启用\n\n\u003ctable\u003e\n    \u003ctr\u003e\n      \u003ctd width=\"50%\" align=\"center\" colspan=\"2\"\u003e\u003cb\u003e登录\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd width=\"50%\" align=\"center\" colspan=\"2\"\u003e\u003cimg src=\"docs/pc_login.png\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n      \u003ctd width=\"50%\" align=\"center\"\u003e\u003cb\u003e地址簿\u003c/b\u003e\u003c/td\u003e\n      \u003ctd width=\"50%\" align=\"center\"\u003e\u003cb\u003e群组\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd width=\"50%\" align=\"center\"\u003e\u003cimg src=\"docs/pc_ab.png\"\u003e\u003c/td\u003e\n        \u003ctd width=\"50%\" align=\"center\"\u003e\u003cimg src=\"docs/pc_gr.png\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Web Admin:\n\n* 使用前后端分离，提供用户友好的管理界面，主要用来管理和展示。前端代码在[rustdesk-api-web](https://github.com/lejianwen/rustdesk-api-web)\n\n* 后台访问地址是`http://\u003cyour server\u003e[:port]/_admin/`\n* 初次安装管理员为用户名为`admin`，密码将在控制台打印，可以通过[命令行](#CLI)更改密码\n\n  ![img.png](./docs/init_admin_pwd.png)\n\n1. 管理员界面\n   ![web_admin](docs/web_admin.png)\n2. 普通用户界面\n   ![web_user](docs/web_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`-\u003e`Developer settings`-\u003e`OAuth Apps`-\u003e`New OAuth App`\n      中创建,地址 [https://github.com/settings/developers](https://github.com/settings/developers)\n    - `Authorization callback URL`填写`http://\u003cyour server[:port]\u003e/api/oauth/callback`\n      ，比如`http://127.0.0.1:21114/api/oauth/callback`\n7. 登录日志\n8. 链接日志\n9. 文件传输日志\n10. server控制\n\n  - `简易模式`,已经界面化了一些简单的指令，可以直接在后台执行\n    ![rustdesk_command_simple](./docs/rustdesk_command_simple.png)\n\n  - `高级模式`,直接在后台执行指令\n      * 可以官方指令\n      * 可以添加自定义指令\n      * 可以执行自定义指令\n\n \n11. **LDAP 支持**, 当在API Server上设置了LDAP(已测试AD和LDAP),可以通过LDAP中的用户信息进行登录 https://github.com/lejianwen/rustdesk-api/issues/114 ,如果LDAP验证失败，返回本地用户\n\n### Web Client:\n\n1. 如果已经登录了后台，web client将自动直接登录\n2. 如果没登录后台，点击右上角登录即可，api server已经自动配置好了\n3. 登录后，会自动同步ID服务器和KEY\n4. 登录后，会将地址簿自动保存到web client中，方便使用\n5. 现已支持`v2 Preview`，访问路径是`/webclient2`\n   ![webclientv2](./docs/webclientv2.png)\n6. `v2 preview` 部署，参考[WIKI](https://github.com/lejianwen/rustdesk-api/wiki)\n\n\n### 自动化文档: 使用 Swag 生成 API 文档，方便开发者理解和使用 API。\n\n1. 后台文档 `\u003cyouer server[:port]\u003e/admin/swagger/index.html`\n2. PC端文档 `\u003cyouer server[:port]\u003e/swagger/index.html`\n   ![api_swag](docs/api_swag.png)\n\n### CLI\n\n```bash\n# 查看帮助\n./apimain -h\n```\n\n#### 重置管理员密码\n```bash\n./apimain reset-admin-pwd \u003cpwd\u003e\n```\n\n## 安装与运行\n\n### 相关配置\n\n* [配置文件](./conf/config.yaml)\n* 参考`conf/config.yaml`配置文件，修改相关配置。\n* 如果`gorm.type`是`sqlite`，则不需要配置mysql相关配置。\n* 语言如果不设置默认为`zh-CN`\n\n### 环境变量\n环境变量和配置文件`conf/config.yaml`中的配置一一对应，变量名前缀是`RUSTDESK_API`\n下面表格并未全部列出，可以参考`conf/config.yaml`中的配置。\n\n| 变量名                                                    | 说明                                                                             | 示例                           |\n|--------------------------------------------------------|--------------------------------------------------------------------------------|------------------------------|\n| TZ                                                     | 时区                                                                             | Asia/Shanghai                |\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| -----ADMIN配置-----                                      | ----------                                                                     | ----------                   |\n| RUSTDESK_API_ADMIN_TITLE                               | 后台标题                                                                           | `RustDesk Api Admin`         |\n| RUSTDESK_API_ADMIN_HELLO                               | 后台欢迎语，可以使用`html`                                                               |                              |\n| RUSTDESK_API_ADMIN_HELLO_FILE                          | 后台欢迎语文件，如果内容多，使用文件更方便。\u003cbr\u003e会覆盖`RUSTDESK_API_ADMIN_HELLO`                        | `./conf/admin/hello.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配置-----                                   | ----------                                                                     | ----------                   |\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://192.168.1.66:21114    |\n| RUSTDESK_API_RUSTDESK_KEY                              | Rustdesk的key                                                                   | 123456789                    |\n| RUSTDESK_API_RUSTDESK_KEY_FILE                         | Rustdesk存放key的文件                                                               | `./conf/data/id_ed25519.pub` |\n| RUSTDESK_API_RUSTDESK_WEBCLIENT\u003cbr/\u003e_MAGIC_QUERYONLINE | Web client v2 中是否启用新的在线状态查询方法; `1`:启用,`0`:不启用,默认不启用                            | `0`                          |\n| RUSTDESK_API_RUSTDESK_WS_HOST                          | 自定义Websocket Host                                                              | `wss://192.168.1.123:1234`   |\n| ----PROXY配置-----                                       | ----------                                                                     | ----------                   |\n| RUSTDESK_API_PROXY_ENABLE                              | 是否启用代理:`false`, `true`                                                         | `false`                      |\n| RUSTDESK_API_PROXY_HOST                                | 代理地址                                                                           | `http://127.0.0.1:1080`      |\n| ----JWT配置----                                          | --------                                                                       | --------                     |\n| RUSTDESK_API_JWT_KEY                                   | 自定义JWT KEY,为空则不启用JWT\u003cbr/\u003e如果没使用`lejianwen/rustdesk-server`中的`MUST_LOGIN`，建议设置为空 |                              |\n| RUSTDESK_API_JWT_EXPIRE_DURATION                       | JWT有效时间                                                                        | `168h`                       |\n\n\n### 运行\n\n#### docker运行\n\n1. 直接docker运行,配置可以通过挂载配置文件`/app/conf/config.yaml`来修改,或者通过环境变量覆盖配置文件中的配置\n\n    ```bash\n    docker run -d --name rustdesk-api -p 21114:21114 \\\n    -v /data/rustdesk/api:/app/data \\\n    -e TZ=Asia/Shanghai \\\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://192.168.1.66:21114 \\\n    -e RUSTDESK_API_RUSTDESK_KEY=\u003ckey\u003e \\\n    lejianwen/rustdesk-api\n    ```\n\n2. 使用`docker compose`，参考[WIKI](https://github.com/lejianwen/rustdesk-api/wiki)\n\n#### 下载release直接运行\n\n[下载地址](https://github.com/lejianwen/rustdesk-api/releases)\n\n#### 源码安装\n\n1. 克隆仓库\n   ```bash\n   git clone https://github.com/lejianwen/rustdesk-api.git\n   cd rustdesk-api\n   ```\n\n2. 安装依赖\n\n    ```bash\n    go mod tidy\n    #安装swag，如果不需要生成文档，可以不安装\n    go install github.com/swaggo/swag/cmd/swag@latest\n    ```\n\n3. 编译后台前端，前端代码在[rustdesk-api-web](https://github.com/lejianwen/rustdesk-api-web)中\n   ```bash\n   cd resources\n   mkdir -p admin\n   git clone https://github.com/lejianwen/rustdesk-api-web\n   cd rustdesk-api-web\n   npm install\n   npm run build\n   cp -ar dist/* ../admin/\n   ```\n4. 运行\n    ```bash\n    #直接运行\n    go run cmd/apimain.go\n    #或者使用generate_api.go生成api并运行\n    go generate generate_api.go\n    ```\n5. 编译，如果想自己编译,先cd到项目根目录，然后windows下直接运行`build.bat`,linux下运行`build.sh`,编译后会在`release`\n   目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。\n\n6. 打开浏览器访问`http://\u003cyour server[:port]\u003e/_admin/`，默认用户名密码为`admin`，请及时更改密码。\n\n\n#### 使用`lejianwen/server-s6`镜像运行\n\n- 已解决链接超时问题\n- 可以强制登录后才能发起链接\n- github https://github.com/lejianwen/rustdesk-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/udp\n       - 21117:21117\n       - 21118:21118\n       - 21119:21119\n     image: lejianwen/rustdesk-server-s6:latest\n     environment:\n       - RELAY=\u003crelay_server[:port]\u003e\n       - ENCRYPTED_ONLY=1\n       - MUST_LOGIN=N\n       - TZ=Asia/Shanghai\n       - RUSTDESK_API_RUSTDESK_ID_SERVER=\u003cid_server[:21116]\u003e\n       - RUSTDESK_API_RUSTDESK_RELAY_SERVER=\u003crelay_server[:21117]\u003e\n       - RUSTDESK_API_RUSTDESK_API_SERVER=http://\u003capi_server[:21114]\u003e\n       - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub\n       - RUSTDESK_API_JWT_KEY=xxxxxx # jwt key\n     volumes:\n       - /data/rustdesk/server:/data\n       - /data/rustdesk/api:/app/data #将数据库挂载\n     networks:\n       - rustdesk-net\n     restart: unless-stopped\n       \n```\n\n\n## 其他\n\n- [WIKI](https://github.com/lejianwen/rustdesk-api/wiki)\n- [链接超时问题](https://github.com/lejianwen/rustdesk-api/issues/92)\n- [修改客户端ID](https://github.com/abdullah-erturk/RustDesk-ID-Changer)\n- [webclient来源](https://hub.docker.com/r/keyurbhole/flutter_web_desk)\n\n\n## 鸣谢\n\n感谢所有做过贡献的人!\n\n\u003ca href=\"https://github.com/lejianwen/rustdesk-api/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=lejianwen/rustdesk-api\" /\u003e\n\u003c/a\u003e\n\n## 感谢你的支持！如果这个项目对你有帮助，请点个⭐️鼓励一下，谢谢！\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flejianwen%2Frustdesk-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flejianwen%2Frustdesk-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flejianwen%2Frustdesk-api/lists"}