利用Github Actions 实现自动构建内置服务器和key和API服务的Rustdesk客户端教程

利用Github Actions 实现自动构建内置服务器和key和API服务的Rustdesk客户端教程

RustDesk 是一个开源的远程桌面应用,允许用户自建服务器,以替代 TeamViewer 等远程控制软件。为了方便自建服务的用户快速使用Rustdesk,构建内置自己服务器和key的RustDesk 客户端便成为了广大互联网爱好者的需求。

默认情况下,RustDesk 依赖 hbb_common 作为其基础库,并默认连接到官方服务器。如果你希望使用自己的服务器,则需要修改 hbb_common 代码并让 rustdesk 指向你修改后的 hbb_common 仓库。

本教程将介绍如何利用Github Actions 实现自动构建内置你服务器和key的Rustdesk客户端。

1. 准备工作

在开始之前,请确保你已经安装了 Git,并且拥有一个 GitHub 账户。建议你对 Git 的基本使用有一定了解,以便顺利完成后续操作。

2. Fork Rustdesk仓库

  • rustdesk/hbb_common
  • rustdesk/rustdesk

2.1 拉取 Fork 后的代码

请注意,替换仓库地址为你fork后的仓库地址,而不是直接复制我下面的命令:

1
2
3
4
5
6
# 可选:如果需要使用代理
# git config --global http.proxy http://127.0.0.1:10808
# git config --global https.proxy http://127.0.0.1:10808
# 拉取仓库代码到本地 请替换为你fork后的仓库地址
git clone https://github.com/用户名/hbb_common.git
git clone https://github.com/用户名/rustdesk.git

3. 修改 hbb_common代码

打开 hbb_common 仓库下的 src/config.rs文件,修改 101-102 行 的默认服务器和密钥为你自己的服务器和密钥。

3.1 推送修改后的代码

1
2
3
4
5
6
# 将修改的代码添加到暂存区
git add.
# 将代码提交到本地仓库
git commit -m "修改默认的服务器和 key"
# 将本地仓库代码推送到远程仓库 如果你没有登录过GitHub会要求你登录github
git push

3.2 查看最新提交的 commit ID

1
git log --oneline

我这里提交后的commit id是b8d80ca,可用于后续验证rustdesk服务器和key是否修改成功。

4. 修改 rustdesk 仓库代码

我们切换到克隆下来的rustdesk代码目录下,按照下面的方式修改子模块地址并更新。

4.1 更新 .gitmodules

打开并编辑 .gitmodules 文件,将 url 替换为你Fork后的 hbb_common 仓库地址。

比如fork后的仓库地址是https://github.com/test/hbb_common 则将 https://github.com/rustdesk/hbb_common地址换为前面这个地址即可,记住是hbb_common的地址,而不是rustdesk仓库的地址。

4.2 更新子模块

将上面修改好的代码保存,执行下面的命令更新子模块到最新的commit id:

1
2
3
git submodule init
git submodule sync
git submodule update --remote

4.3 提交并推送代码

1
2
3
git add.
git commit -m "修改子模块仓库地址"
git push

4.4 确认 Commit ID 更新

代码推送完毕后,进入你Fork 后的 rustdesk 仓库的 libs 目录下,查看 hbb_common 后面的 commit id,确保它是3.2提到的b8d80ca(这个值每个人的是不同的),否则请回到上面的步骤重新检查是否遗漏了了某个操作。

4.5 修改 API 接口地址(需自建API服务,项目地址:https://github.com/lejianwen/rustdesk-api)

打开 rustdesk/src/common.rs 文件,在第 947 行左右找到 API 接口地址的配置项,将其修改为你自己的 API 接口地址。修改完成后,按照以下步骤提交修改:

1
2
3
git add .
git commit -m "修改 API 接口地址"
git push

另外API如果使用SSL协议反代,以下是配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
server {
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
listen [::]:80;

server_name xx.com;
index index.php index.html index.htm default.php default.htm default.html;

access_log /www/sites/xx.com/log/access.log main;
error_log /www/sites/xx.com/log/error.log;

root /usr/share/nginx/html/stop;

# SSL 证书
ssl_certificate /www/sites/xx.com/ssl/fullchain.pem;
ssl_certificate_key /www/sites/xx.com/ssl/privkey.pem;

ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

add_header Strict-Transport-Security "max-age=31536000";

# HTTP 强制跳转 HTTPS
# Let's Encrypt 验证目录
location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}

# RustDesk WebSocket 代理(ID)
location /ws/id {
proxy_pass http://127.0.0.1:21118;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# RustDesk WebSocket 代理(Relay)
location /ws/relay {
proxy_pass http://127.0.0.1:21119;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

include /www/sites/xx.com/proxy/*.conf;

error_page 497 https://$host$request_uri;
proxy_set_header X-Forwarded-Proto https;

include /www/sites/xx.com/proxy/*.conf;
}

server {
listen 80;
server_name xx.xx.com;

if ($host = xx.xx.com) {
return 301 https://$host$request_uri;
}

return 404;
}

5. 触发 GitHub Action 构建

5.1 创建 Tag

在本地 rustdesk 仓库中创建一个新 tag,例如 1.3.9,请使用 固定格式 (如 1.3.9 或 v1.3.9),以便于自动匹配构建规则。

1
git tag -a 1.3.9 -m "修改内置服务器和 key"

5.2 触发 GitHub Actions 构建

在 rustdesk 仓库中,进入 Actions 页面,点击下面图中的按钮启用自动构建。启用后回到本地rustdesk代码中使用下面的命令将tag推送到Github后将自动开始构建。

1
git push --tags

5.3 下载构建好的客户端

Tag推送完毕后会出现下面的构建进度。

等待 Action 执行完成后(时间比较长,一个半小时左右才能全部构建完成),进入 Releases 页面,即可下载构建好的客户端并使用。