飘在云端

东西南北,海角天涯

· 备查 · · 14次浏览

rustdesk 开源版自建部署 API 后端

环境:
Nginx v1.27.4
Ubuntu v22.04.5 LTS
Docker version 26.1.3
Rustdesk Server OSS v1.1.14
Rustdesk windows exe 客户端 v1.2.7 /v 1.3.8

前面的文章 https://www.0z.gs/memo/rustdesk.html 提到了官方的 API 服务是需要付费订阅计划才可以
并且有且只有年付计划,9.9 美元 * 12 = 118.8 美元,按照此时此刻汇率 7.2634 计算,一年得花 862.8919 元
并且由于服务器在国外,面临一些网络风险,国际出口拥堵、被墙、线路质量、UDP 封锁等等不可抗拒因素

所以当然是自力更生,看看有没有第三方的开源项目,这里以之前提到的这个项目为例,部署一个自用

GitHub 项目地址
https://github.com/lantongxue/rustdesk-api-server-pro/

发现 readme 文档的说明有些不适配,修改了一下

这里使用 docker 方案部署

  1. 创建配置文件,并根据自己的需要修改自定义内容,主要是配置文件路径、签名密钥 signKey、 api 端口 port,如果不要自动化注册收发验证邮件、修改密码,smtpConfig 这个邮局配置弄不弄无所谓,

     cat > /example/opt/server.yaml <<EOF
     signKey: "HtsglnQeimfgAmnwDOAXkDBLimHjoNkI" # 这里填写 32 位长度的随机字符作为签名密钥
     debugMode: true
     db:
       driver: "sqlite"
       dsn: "./server.db"
       timeZone: "Asia/Shanghai" # 设置时区
       showSql: false
    
     httpConfig:
       printRequestLog: true
       port: "127.0.0.1:1111" # 自定义 API 后端的端口,这里不直接对公网暴露端口,而是使用反向代理统一管理
    
     smtpConfig:
       host: "127.0.0.1"
       port: 587
       username: "admin@example.com" 
       password: "example"
       encryption: "tls" # 不需要加密则填写 none,如果是 ssl 加密则为 ssl,这里我使用了 tls
       from: "example@example.com"
    
     jobsConfig:
       deviceCheckJob:
         duration: 30
     EOF
    
  2. 运行容器,这里修改下,因为我按文档没走通,发现如果使用桥接模式自定义映射端口,一直无法访问容器内的端口,折腾很久一直没法解决这个问题,只能简单粗暴一把梭,直接指定 host 模式,就可以访问容器内的端口了,这里自己指定 -v 参数后面的宿主机配置文件路径,就是第一步创建的那个配置文件路径
    另外,自己修改里面的创建的管理员用户名和密码 ADMIN_USERADMIN_PASS
    这里特别说明一下,无论是通过环境变量设置/或者 CLI 创建的第一个管理员,是无法通过前端 UI 或者 CLI 命令行删除的,且第一个管理员也无法修改用户名,只能删除容器重新部署才能删除首次创建的管理员账户,所以用户名不要乱设置(不过重新部署也不是很麻烦),等待开发者后续更新删除接口,或者自己去修改 sqlite 格式的 server.db 数据库文件,改用户名信息

请输入图片描述
请输入图片描述

    docker run \
    --name rustdesk-api-server-pro \
    --network host \
    -d \
    -e ADMIN_USER=admin \
    -e ADMIN_PASS=admin \
    -e TZ=Asia/Shanghai \
    -v /example/opt/server.yaml:/app/server.yaml \
    ghcr.io/lantongxue/rustdesk-api-server-pro:latest

也可以不在 docker 命令行设置环境变量设置管理员信息,容器运行后使用提供的 CLI 增加管理员

docker exec -it rustdesk-api-server-pro sh

进入容器内部后执行命令,exampleUsername 为用户名,examplePassword 为密码,--admin 参数表示该用户权限为管理员

./rustdesk-api-server-pro user add exampleUsername examplePassword --admin

启动后,我们再使用前端服务器作为统一对外管理暴露公网端口和 Https 证书部署
这里以 Nginx v1.27.4 为例,进行反向代理
参考配置如下

    #PROXY-START /api for rustdesk client
    location ^~ /api
    {
        proxy_pass http://127.0.0.1:1111;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_http_version 1.1;
        # proxy_hide_header Upgrade;

        add_header X-Cache $upstream_cache_status;
    }
    #PROXY-END/

    #PROXY-START /admin for web-ui
    location ^~ /admin
    {
        proxy_pass http://127.0.0.1:1111/admin;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_http_version 1.1;
        # proxy_hide_header Upgrade;

        add_header X-Cache $upstream_cache_status;
    }
    #PROXY-END/

然后复制容器里面的已构建好的前端 UI 到宿主机的 Nginx 反向代理的目录,自行修改宿主机的实际反向代理目录路径

docker cp rustdesk-api-server-pro:/app/dist /usr/share/nginx/html
  • rustdesk 客户端如何填写
    rustdesk 客户端 → 设置 → 网络 → API 服务器,填写你的 API 后端域名/IP,因为已经反向代理了,所以无需填写端口
    https://rustdeskapi.example.com
    ID 和 中继服务器对于单服务器部署而言,都是同一个意思,可以只填写 ID 服务器,中继服务器为空会默认使用 ID 服务器的值,API 服务器也同理,在单服务器部署场景下,只有 2 项必填,KEY 和 ID 服务器(中继和 API 服务器缺省使用 ID 服务器的值)

但这里我踩了个 BUG,有空可以提个 issue 给项目上游
在 Windows 7 下,rustdesk 客户端无法使用 https 加密的 API 后端,会在账户界面点击登录按钮后,还没输入时直接触发闪退,应该是 Windwos 7 缺少了一些 Win10 + 新增的 Windows API 导出函数,所以直接闪退了
使用 VxKex 项目来扩展 Windows 7 的系统函数解决这个问题

Win 7 API extensions
https://www.alipan.com/s/wsrsZj7HbLD
提取码 fj08

安装之后,对 Rustdesk 客户端右键,选择属性,选择 VxKex 标签页,启用如下选项

  • 选择为此程序启用 VxKex NEXT
  • 报告其他版本的 Windwos:Windows 10

如果创建了 rustdesk 快捷方式,可能需要对快捷方式再次设置一次 VxKex
设置之后可以保留 https 加密使用 API,如果不使用 vxkex,只能降级牺牲安全性,使用 http 明文通讯,改为
http://rustdeskapi.example.com

在 Windwos 10+ 的系统使用 https 的 API 后端无此问题

请输入图片描述

鸣谢

https://github.com/lantongxue/rustdesk-api-server-pro
https://github.com/rustdesk/rustdesk
评论 (0条)