lejianwen / rustdesk-api

Custom Rustdesk Api Server, include web admin and web client
33 stars 6 forks source link
rustdesk rustdesk-api-server rustdesk-server rustdesk-web-admin rustdesk-webclient

RustDesk API

English Doc

本项目使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。RustDesk 是一个远程桌面软件,提供了自托管的解决方案。

特性

使用前准备

Rustdesk

  1. PC客户端使用的是 1.3.0,经测试 1.2.6+ 都可以
  2. server端必须指定key,不能用自带的生成的key,否则可能链接不上或者超时

    hbbs -r <relay-server-ip[:port]> -k <key>
    hbbr -k <key>

    比如

    hbbs -r <relay-server-ip[:port]> -k abc1234567
    hbbr -k abc1234567

功能

API 服务: 基本实现了PC端基础的接口。支持Personal版本接口,可以通过配置文件rustdesk.personal或环境变量RUSTDESK_API_RUSTDESK_PERSONAL来控制是否启用

登录

pc_login

地址簿

pc_ab

群组,群组分为共享组普通组,共享组中所有人都能看到小组成员的设备,普通组只有管理员能看到所有小组成员的设备

pc_gr

Web Admin:

使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在rustdesk-api-web

后台访问地址是http://<your server>[:port]/_admin/初次安装管理员为用户名密码为admin admin,请即时更改密码

  1. 管理员界面 web_admin

  2. 普通用户界面 web_user 右上角也可以更改密码 web_resetpwd

  3. 分组可以自定义,方便管理,暂时支持两种类型: 共享组普通组 web_admin_gr

  4. 可以直接打开webclient,方便使用 web_webclient

  5. Oauth,暂时只支持了GithubGoogle, 需要创建一个OAuth App,然后配置到后台 web_admin_oauth

    • github oauth appSettings->Developer settings->OAuth Apps->New OAuth App 中创建,地址 https://github.com/settings/developers
    • Authorization callback URL填写http://<your server[:port]>/api/oauth/callback ,比如http://127.0.0.1:21114/api/oauth/callback

Web Client:

  1. 如果已经登录了后台,web client将自动直接登录
  2. 如果没登录后台,点击右上角登录即可,api server已经自动配置好了 webclient_conf
  3. 登录后,会自动同步ID服务器和KEY
  4. 登录后,会将地址簿自动保存到web client中,方便使用

自动化文档: 使用 Swag 生成 API 文档,方便开发者理解和使用 API。

  1. 后台文档 <youer server[:port]>/admin/swagger/index.html
  2. PC端文档 <youer server[:port]>/swagger/index.html api_swag

安装与运行

相关配置

gin:
  api-addr: "0.0.0.0:21114"
  mode: "release"
  resources-path: 'resources'
  trust-proxy: ""
gorm:
  type: "sqlite"
  max-idle-conns: 10
  max-open-conns: 100
mysql:
  username: "root"
  password: "111111"
  addr: "192.168.1.66:3308"
  dbname: "rustdesk"
rustdesk:
  id-server: "192.168.1.66:21116"
  relay-server: "192.168.1.66:21117"
  api-server: "http://192.168.1.66:21114"
  key: "123456789"
  personal: 1
变量名 说明 示例
TZ 时区 Asia/Shanghai
-----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配置----- --------------- ----------
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

安装步骤

docker运行

  1. 直接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_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=123456789 \
lejianwen/rustdesk-api
  1. 使用docker compose

    • 简单示例
    services:
      rustdesk-api:
       container_name: rustdesk-api
       environment:
         - TZ=Asia/Shanghai
         - RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116
         - RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117
         - RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114
         - RUSTDESK_API_RUSTDESK_KEY=123456789
       ports:
         - 21114:21114
       image: lejianwen/rustdesk-api
       volumes:
         - /data/rustdesk/api:/app/data #将数据库挂载出来方便备份
       networks:
         - rustdesk-net
       restart: unless-stopped
    • 根据rustdesk提供的示例加上自己的rustdesk-api
    networks:
     rustdesk-net:
       external: false
    services:
     hbbs:
       container_name: hbbs
       ports:
         - 21115:21115
         - 21116:21116 # 自定义 hbbs 映射端口
         - 21116:21116/udp # 自定义 hbbs 映射端口
         - 21118:21118 # web client 需要
       image: rustdesk/rustdesk-server
       command: hbbs -r <relay-server-ip[:port]> -k 123456789 # 填入个人域名或 IP + hbbr 暴露端口
       volumes:
         - /data/rustdesk/hbbs:/root # 自定义挂载目录
       networks:
         - rustdesk-net
       depends_on:
         - hbbr
       restart: unless-stopped
       deploy:
         resources:
           limits:
             memory: 64M
     hbbr:
       container_name: hbbr
       ports:
         - 21117:21117 # 自定义 hbbr 映射端口
       image: rustdesk/rustdesk-server
       command: hbbr -k 123456789
       #command: hbbr
       volumes:
         - /data/rustdesk/hbbr:/root # 自定义挂载目录
       networks:
         - rustdesk-net
       restart: unless-stopped
       deploy:
         resources:
           limits:
             memory: 64M
     rustdesk-api:
       container_name: rustdesk-api
       environment:
         - TZ=Asia/Shanghai
         - RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116
         - RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117
         - RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114
         - RUSTDESK_API_RUSTDESK_KEY=123456789
       ports:
         - 21114:21114
       image: lejianwen/rustdesk-api
       volumes:
         - /data/rustdesk/api:/app/data #将数据库挂载出来方便备份
       networks:
         - rustdesk-net
       restart: unless-stopped
    
    • 如果使用的是S6的镜像,会需要修改启动脚本,覆盖镜像中的/etc/s6-overlay/s6-rc.d/hbbr/run/etc/s6-overlay/s6-rc.d/hbbr/run

      1. 创建hbbr/run

        #!/command/with-contenv sh
        cd /data
        PARAMS=
        [ "${ENCRYPTED_ONLY}" = "1" ] && PARAMS="-k ${KEY}"
        /usr/bin/hbbr $PARAMS
      2. 创建hbbs/run

        #!/command/with-contenv sh
        sleep 2
        cd /data
        PARAMS=
        [ "${ENCRYPTED_ONLY}" = "1" ] && PARAMS="-k ${KEY}"
        /usr/bin/hbbs -r $RELAY $PARAMS
      3. 修改docker-compose.yml中的s6部分

        networks:
          rustdesk-net:
            external: false
        services:
          rustdesk-server:
            container_name: rustdesk-server
            ports:
              - 21115:21115
              - 21116:21116
              - 21116:21116/udp
              - 21117:21117
              - 21118:21118
              - 21119:21119
            image: rustdesk/rustdesk-server-s6:latest
            environment:
              - RELAY=192.168.1.66:21117
              - ENCRYPTED_ONLY=1
              - KEY=abc123456789
            volumes:
              - ./data:/data
              - ./hbbr/run:/etc/s6-overlay/s6-rc.d/hbbr/run
              - ./hbbs/run:/etc/s6-overlay/s6-rc.d/hbbs/run
            restart: unless-stopped
          rustdesk-api:
            container_name: rustdesk-api
            ports:
              - 21114:21114
            image: lejianwen/rustdesk-api
            environment:
              - TZ=Asia/Shanghai
              - RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116
              - RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117
              - RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114
              - RUSTDESK_API_RUSTDESK_KEY=abc123456789
            volumes:
              - /data/rustdesk/api:/app/data #将数据库挂载
            networks:
              - rustdesk-net
            restart: unless-stopped

下载release直接运行

下载地址release

源码安装

  1. 克隆仓库

    git clone https://github.com/lejianwen/rustdesk-api.git
    cd rustdesk-api
  2. 安装依赖

    go mod tidy
    #安装swag,如果不需要生成文档,可以不安装
    go install github.com/swaggo/swag/cmd/swag@latest
  3. 编译后台前端,前端代码在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/
  4. 运行

    #直接运行
    go run cmd/apimain.go
    #或者使用generate_api.go生成api并运行
    go generate generate_api.go
  5. 编译,如果想自己编译,先cd到项目根目录,然后windows下直接运行build.bat,linux下运行build.sh,编译后会在release 目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。

  6. 打开浏览器访问http://<your server[:port]>/_admin/,默认用户名密码为admin,请及时更改密码。

其他