介绍rustdesk

rustdesk远程桌面软件,开箱即用,无需任何配置。您完全掌控数据,不用担心安全问题。

服务端本地部署.数据安全可控.

客户端支持 Windows Mac Android linux 平台.

官方仓库: https://github.com/rustdesk/rustdesk

前言

要求

  1. 需要有服务器

  2. 需要有frp 内网穿透服务.

  3. 服务器安装有1panel或者宝塔

  4. 服务器已安装docker

教程

部署服务端

使用docker compose 部署

请根据注释自行替换为你的服务器ip ,volumes数据地址根据自己需求更改,默认是官方的。

参数提示:

RELAY=<relay_server[:port]> #中继服务器:21117
MUST_LOGIN=N #默认为N,设置为Y 则必须登录才能链接
RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]> #ID服务器
RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]> #中继服务器
RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]> #API服务器
RUSTDESK_API_JWT_KEY=xxxxxx #随便设置个字符串
/data/rustdesk/server #查看 key

 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=你的服务器ip:21117  #中继服务器
       - ENCRYPTED_ONLY=1 
       - MUST_LOGIN=Y  #默认为N,设置为Y 则必须登录才能链接
       - TZ=Asia/Shanghai
       - RUSTDESK_API_RUSTDESK_ID_SERVER=你的服务器ip:21116  #ID服务器
       - RUSTDESK_API_RUSTDESK_RELAY_SERVER=你的服务器ip:21117  #中继服务器
       - RUSTDESK_API_RUSTDESK_API_SERVER=你的服务器ip:21118  #API服务器
       - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
       - RUSTDESK_API_JWT_KEY=xxxxxxxx   #随便设置个字符串
     volumes:
       - /home/yueliang/docker/rustdesk/server:/data   #将数据库挂载 自行更改
       - /home/yueliang/docker/rustdesk/api:/app/data #将数据库挂载 自行更改
     networks:
       - rustdesk-net
     restart: unless-stopped

注意:

如果是云服务器一定要把对应端口防火墙打开。

如果是本地服务器 + 用frp内网穿透的需要把对应端口映射出来。并把docker compose 端口替换为你映射的端口。frp说明文档地址:https://gofrp.org/zh-cn/docs/examples/stcp/

保存好ip和端口信息还有key值,编译客户端需要。

将docker compose 文件保存到服务器合适的位置。最好用一个文件夹来统一管理docker 所有项目,再把docker compose 文件放一起方便管理减少沉没成本。

配置完成后,打开终端 CD 到存放 docker compose 文件的文件夹。

比如我的地址是 /home/yueliang/docker/rustdesk 那么就在终端输入 cd /home/yueliang/docker/rustdesk以此类推

在终端输入 sudo docker compose up -d

结果与图中一样就成功部署服务端了。

可以在1panel或者宝塔查看,如图

云服务器现在可以直接在浏览器输入 服务器ip:21114 打开web网页服务了

frp内网穿透可以输入映射后的ip + 端口。 详情见frp说明文档地址:https://gofrp.org/zh-cn/docs/examples/stcp/

登录账号是 admin

密码需要进入容器终端 ./apimain reset-admin-pwd 你的密码

就可以进入

在服务端设置如同配置

客户端编译

1 仓库创建

  • 注册登录github,进入rustdesk页面,点击Fork,默认选项,创建分支。

  • 进入自己创建分支仓库,点击 libs ,再点击 hbb_common@d6dd7ae

  • 进入官方hbb_common仓库,再点击 Fork,默认选项,创建分支。

  • 到此完成仓库创建

2 环境配置

电脑下载安装git,下载地址Git ,全部默认下一步安装完成。

安装 vs code ,下载地址vs code ,全部默认下一步安装完成。 本地任意目录创建文件夹,用vs code 打开。并在目录右键打开终端。

返回桌面,右键打开 Open Git Bash here

把下面命令替换为自己的信息,在终端输入。

#配置 Git 的用户名和邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱"
 
#生成密钥(一直回车直至这个界面)
ssh-keygen -t rsa -C "邮箱"
 
#查看公钥
cat ~/.ssh/id_rsa.pub

打开 github 设置中的 SSH and GPG keys 。点击 New SSH key ,将终端公钥填入key。

打开新的Windows终端或者git bash,运行如下代码,测试是否可以成功链接gtihub,终端询问是否继续连接,输入Yes回车确认,出现这个提示,就意味着我们通过SSH方式,可以正常连接gtihub 。 注意如果链接失败检查是否开代理。

#测试连接github
ssh -T git@github.com

环境配置完成

3 拉取并修改源码

返回vs code,复制我们fork的rustdesk项目SSH地址,终端输入如下命令+SSH地址,将RustDesk源码仓库克隆到本地。

git clone --recurse-submodules <SSH地址> #--recurse-submodules参数,递归克隆子模块

输入如下命令,进入主仓库目

cd RestDesk

修改子模块路径

修改主目录下.gitmodules文件,将原作者的子模块 URL 替换为我们 Fork的 地址,修改替换如下内容:

[submodule "libs/hbb_common"]
	path = libs/hbb_common
	url = <替换为我们fork的hbb_common项目地址>

同步子模块地址

git submodule sync

提交修改后的代码,并推送到主仓库:

git add .gitmodules
git commit -m "更新所有子模块地址至我的Fork(备注内容)"
git push origin <主仓库分支名,默认master>

修改ID/中继服务器⭐️⭐️⭐️⭐️⭐️

进入子模块文件夹⭐️

cd libs/hbb_common

配置子模块并创建新分支

git checkout -b <新建分支名,我的是yueliang>

修改子模块源码⭐️

libs\hbb_common\src\config.rs #修改该文件的108-114行,分别是服务器及KEY还有端口

提交修改后的代码,并推送到子模块仓库:⭐️

git add .
git commit -m "改为自己的ID/中继服务器"
git push origin <新建的分支名>  # 推送分支到我们子模块Fork

返回主仓库主目录:⭐️

cd ../..

更新子模块的 Commit ID:⭐️

git add libs/hbb_common  # 提交子模块的新 Commit
git commit -m "更新修改后的子模块"
git push origin <主仓库分支名,我的是master>

修改替换API地址

仓库主目录,修改如下文件:

rustdesk\src\common.rs #1024行替换API地址 找不到就 Ctrl + F 查找https://admin.rustdesk.com

提交修改并推送到主仓库:

git add .
git commit -m "修改替换API地址"
git push origin <主仓库分支名,默认master>

删除客户端广告提示

仓库主目录,修改如下文件:

flutter\lib\desktop\pages\connection_page.dart
 
#将81到110行代码替换如下:
    Widget setupServerWidget() => Flexible(
       child: Offstage(
         offstage: !(!_svcStopped.value &&
             stateGlobal.svcStatus.value == SvcStatus.ready &&
             _svcIsUsingPublicServer.value),
         child: Row(
           crossAxisAlignment: CrossAxisAlignment.center,
           children: [], 
         ),
       ),
     );

提交修改并推送到主仓库:

git add .
git commit -m "修改删除客户端广告"
git push origin <主仓库分支名,默认master>

4 github的actions编译

进入自己的github主仓库,如图操作。即可自动编译。等待即可。

FRP我的配置参考

################   start   ##############
#rustdesk 中继服务器
[[proxies]]
name = "14766"
type = "tcp"
localIP = "127.0.0.1"
localPort = 21117
remotePort = 14766

#rustdesk Id服务器
[[proxies]]
name = "17314"
type = "tcp"
localIP = "127.0.0.1"
localPort = 21116
remotePort = 17314
[[proxies]]
name = "17314_udp"
type = "udp"
localIP = "127.0.0.1"
localPort = 21116
remotePort = 17314

#21118 (TCP): 用于支持网页客户端。
#WS_RENDEZVOUS_PORT: i32 = 21118; 改 18137
[[proxies]]
name = "18137"
type = "tcp"
localIP = "127.0.0.1"
localPort = 21118
remotePort = 18137

#21119 (TCP): 用于支持网页客户端。
#WS_RELAY_PORT: i32 = 21119; 改 17082
[[proxies]]
name = "17082"
type = "tcp"
localIP = "127.0.0.1"
localPort = 21119
remotePort = 17082
################   end    ##############