侧边栏壁纸
  • 累计撰写 6 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

自建Rustdesk server+api

Admin
2025-12-27 / 0 评论 / 0 点赞 / 12 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

自建Rustdesk server+api

文件结构

rustdesk/
├── db/   #存放数据库
│   ├── db_v2.sqlite3
│   └── ...
├── secrets/ #key
│   ├── id_ed25519
│   └── id_ed25519.pub
└── docker-compose.yml

运行容器

  • 需完成后面的反代才能使用全域名访问

  • 本文以域名rustdesk.xxxx.com为例

mkdir -p /root/data/docker_data/rustdesk/ && cd /root/data/docker_data/rustdesk/ && mkdir db secrets && vim docker-compose.yml

docker-compose.yml

 networks:
   rustdesk-net:
     external: false
 services:
   rustdesk:
     image: lejianwen/rustdesk-server-s6:latest
     container_name: rustdesk
     environment:
       - RELAY=rustdesk.xxxx.com
       - ENCRYPTED_ONLY=1
       - MUST_LOGIN=N #是否必须登录
       - TZ=Asia/Shanghai
       - RUSTDESK_API_RUSTDESK_ID_SERVER=rustdesk.xxxx.com #21116
       - RUSTDESK_API_RUSTDESK_RELAY_SERVER=rustdesk.xxxx.com #21117
       - RUSTDESK_API_RUSTDESK_API_SERVER=rustdesk.xxxx.com #21114
       - RUSTDESK_API_JWT_KEY=xxxxxxxxxxxxx # jwt key
       - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
     ports:
       - 21114:21114
       - 21115:21115
       - 21116:21116
       - 21116:21116/udp
       - 21117:21117
       - 21118:21118
       - 21119:21119
     volumes:
       - ./db:/app/data #将数据库挂载
     networks:
       - rustdesk-net
     restart: unless-stopped
     secrets:
       - key_pub
       - key_priv
     logging:
       driver: "json-file"
       options:
         max-size: "10m"
         max-file: "5"

 secrets:
   key_pub:
     file: secrets/id_ed25519.pub
   key_priv:
     file: secrets/id_ed25519     

修改管理员密码


docker exec -it rustdesk /bin/sh

./apimain reset-admin-pwd {admin_password}

URL

需完成后面的反代才能使用全域名访问

  • 网页管理端:https://rustdesk.xxxx.com/_admin/
  • 网页远程:https://rustdesk.xxxx.com/webclient2/
  • id服务器、中继服务器:rustdesk.xxxx.com
  • api服务器:https://rustdesk.xxxx.com

反代示例

以nginx为例

宝塔、1panel可以照抄

server {
    server_name rustdesk.xxxx.com; 
    location / {
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:21114/;
    }

    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;
        proxy_read_timeout 120s;
    }

    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;
        proxy_read_timeout 120s;
    }

    listen 443 ssl ; 
    ssl_certificate /www/sites/rustdesk.xxxx.com/ssl/fullchain.pem; 
    ssl_certificate_key /www/sites/rustdesk.xxxx.com/ssl/privkey.pem; 

server {
    if ($host = rustdesk.xxxx.com) {
        return 301 https://$host$request_uri;
    } 
    server_name rustdesk.xxxx.com; 
    listen 80 ;
    return 404; 
}

客户端编译

可以使用https://r.vumstar.com/小工具完成大部分内容

  • 子模块太难搞
  • 不会修改隐藏被控端弹窗
  • 打开网页记得关静音!!!!!!

  • 需要使用GitHub 访问令牌(token) ,存在一定风险,也不需要开很多权限

    建议

    • 使用新号、小号
    • token用完即删除

补充:

删除客户端广告提示

仓库主目录,修改flutter\lib\desktop\pages\connection_page.dart

81-110行原代码

    setupServerWidget() => Flexible(
          child: Offstage(
            offstage: !(!_svcStopped.value &&
                stateGlobal.svcStatus.value == SvcStatus.ready &&
                _svcIsUsingPublicServer.value),
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Text(', ', style: TextStyle(fontSize: em)),
                Flexible(
                  child: InkWell(
                    onTap: onUsePublicServerGuide,
                    child: Row(
                      children: [
                        Flexible(
                          child: Text(
                            translate('setup_server_tip'),
                            style: TextStyle(
                                decoration: TextDecoration.underline,
                                fontSize: em),
                          ),
                        ),
                      ],
                    ),
                  ),
                )
              ],
            ),
          ),
        );

81-110行代码替换如下:

    Widget setupServerWidget() => Flexible(
       child: Offstage(
         offstage: !(!_svcStopped.value &&
             stateGlobal.svcStatus.value == SvcStatus.ready &&
             _svcIsUsingPublicServer.value),
         child: Row(
           crossAxisAlignment: CrossAxisAlignment.center,
           children: [], 
         ),
       ),
     );
0

评论区