wei/个人文档/rustdesk部署文档.md
2026-06-04 13:57:41 +08:00

6.1 KiB
Raw Permalink Blame History

好的,根据我们排查的结果,我为你重新生成一份完整的、经过验证的部署文档。这份文档已经针对你遇到的持久化问题做了优化,确保密码不会因为容器重启而改变。


RustDesk 自建服务器完整部署文档CentOS 9 / Docker Compose

一、概述

本文档使用社区 lejianwen/rustdesk-server-s6 All-in-One 镜像,将 ID 服务器hbbs、中继服务器hbbr和 Web API 服务器整合到一个容器中,通过 Docker Compose 管理。特别针对数据持久化做了优化,避免重启后管理员密码丢失。

二、环境准备

2.1 开放防火墙端口

sudo firewall-cmd --permanent --add-port=21114-21119/tcp
sudo firewall-cmd --permanent --add-port=21116/udp
sudo firewall-cmd --reload

端口说明:

  • 21114Web 管理后台
  • 21115hbbs NAT 测试
  • 21116hbbs TCP 信令 / UDP 心跳
  • 21117hbbr TCP 中继
  • 21118hbbs WebSocket
  • 21119hbbr WebSocket

2.2 安装 Docker 和 Docker Compose 插件

curl -fsSL https://get.docker.com | bash
sudo systemctl enable --now docker

2.3 提高系统文件描述符限制(高并发必需)

echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "root soft nofile 65535" >> /etc/security/limits.conf
echo "root hard nofile 65535" >> /etc/security/limits.conf

修改后重启服务器使配置生效。

三、部署服务

3.1 创建项目目录

mkdir -p ~/rustdesk && cd ~/rustdesk

3.2 编写 docker-compose.yml

创建文件 docker-compose.yml,内容如下(请将 YOUR_SERVER_IP 替换为你的服务器内网或公网 IP

networks:
  rustdesk-net:
    external: false

services:
  rustdesk-server:
    container_name: rustdesk-server
    image: lejianwen/rustdesk-server-s6:latest
    network_mode: "host"
    environment:
      - TZ=Asia/Shanghai
      - RELAY=YOUR_SERVER_IP:21117
      - ENCRYPTED_ONLY=1
      - RUSTDESK_API_RUSTDESK_ID_SERVER=YOUR_SERVER_IP:21116
      - RUSTDESK_API_RUSTDESK_RELAY_SERVER=YOUR_SERVER_IP:21117
      - RUSTDESK_API_RUSTDESK_API_SERVER=http://YOUR_SERVER_IP:21114
      - RUSTDESK_API_RUSTDESK_KEY_FILE=/data/id_ed25519.pub
      - RUSTDESK_API_LANG=zh-CN
      - ALWAYS_USE_RELAY=N
      - RUSTDESK_API_APP_TOKEN_EXPIRE=87600h
    volumes:
      # 持久化 hbbs/hbbr 的设备数据库和密钥
      - ./data:/data
      # 持久化 API 服务的用户数据库(解决密码重置问题)
      - ./api-data:/app/data
    restart: unless-stopped
    ulimits:
      nofile:
        soft: 65535
        hard: 65535

关键点

  • volumes 挂载了两个宿主机目录:
    • ./data → 容器 /data:存放 hbbs/hbbr 的设备数据库(db_v2.sqlite3)和密钥(id_ed25519*)。
    • ./api-data → 容器 /app/data:存放 API 服务器的用户数据库(rustdeskapi.db这是管理员密码持久化的关键
  • 这样即使容器重建,所有数据都不会丢失,密码保持不变。

3.3 启动服务

docker compose up -d

3.4 获取关键信息

公钥Key

cat ./data/id_ed25519.pub

输出类似:D5Msl1fTdFv92qcguwTEhvNcghhjRLUp+8LAw6AxFlY=

管理员初始密码

docker compose logs | grep "Admin Password Is:"

输出类似:Admin Password Is: OXOxH4TJ

重要:首次启动后,请立即登录 Web 后台修改密码,防止忘记。

四、客户端配置

在所有需要连接此服务器的 RustDesk 客户端上:

  1. 打开设置 → 网络
  2. 填写:
    • ID 服务器YOUR_SERVER_IP:21116
    • 中继服务器YOUR_SERVER_IP:21117
    • Key:粘贴上面获取的公钥
    • API 服务器http://YOUR_SERVER_IP:21114(可选,用于地址簿同步)
  3. 保存后,点击客户端主界面的“登录”,使用用户名 admin 和上面获取的密码登录。

五、持久化说明

  • 设备数据库:保存在 ./data/db_v2.sqlite3
  • API 用户数据库:保存在 ./api-data/rustdeskapi.db
  • 密钥文件:保存在 ./data/id_ed25519*

只要这两个宿主机目录不被删除,无论执行 docker compose down 还是重启服务器,所有数据(包括管理员密码、注册设备、地址簿)都会完整保留。

若需要备份或迁移,只需打包 ./data./api-data 两个目录即可。

六、常用运维命令

操作 命令
查看日志 docker compose logs -f
重启服务(保留数据) docker compose restart
修改配置后更新 docker compose up -d
停止并删除容器 docker compose down
进入容器内部 docker exec -it rustdesk-server /bin/sh

七、故障排查

7.1 客户端 ID 连接失败,但 IP 直连正常

  • 检查服务器防火墙是否开放 UDP 21116 端口。
  • 查看容器日志:docker compose logs | grep -i error
  • 确认客户端填写的 Key 与服务器 ./data/id_ed25519.pub 完全一致。

7.2 Web 后台无法登录

  • 确认容器正常运行:docker ps | grep rustdesk-server
  • 检查端口 21114 是否被占用:ss -tlnp | grep 21114
  • 若密码忘记,进入容器执行 /app/apimain reset-admin-pwd <新密码> 重置。

7.3 重启后密码丢失

  • 检查是否挂载了 ./api-data:/app/data,且该目录下有 rustdeskapi.db 文件。
  • 若未自动生成,请登录一次 Web 后台并修改密码,数据库会自动创建。

八、升级与迁移

升级镜像

docker compose pull
docker compose up -d

迁移到新服务器

  1. 打包 ./data./api-data 目录。
  2. 新服务器按本文档部署好 Docker。
  3. 将两个目录复制到新服务器的项目目录下。
  4. 启动 docker compose up -d,所有数据保留,密码不变。

这份文档已经针对你遇到的问题做了修正,核心是两个持久化挂载点。按照这个步骤操作,以后无论怎么重启,管理员密码都不会再变了。如果有任何问题,随时反馈。