RustDesk 自建服务器部署与 GitHub OAuth 配置

本文档指导如何在 Linux 服务器上使用 Docker Compose 部署 RustDesk 自建服务器,并通过 GitHub OAuth 实现用户认证,无需手动创建 oauth2.toml 配置文件。配置包括 rustdesk/rustdesk-server-s6lejianwen/rustdesk-api,总内存限制为 300MB,使用 common-network 网络。

前提条件

  1. 服务器环境
    • 系统:Linux(如 Ubuntu)。
    • 已安装 Docker 和 Docker Compose。
    • 公网 IP 或域名。
  2. 端口要求
    • TCP:21114, 21115, 21116, 21117, 21118, 21119
    • UDP:21116
  3. GitHub OAuth 应用
    • 在 GitHub 创建 OAuth 应用(Settings > Developer settings > OAuth Apps > New OAuth App):
      • Application name:例如 RustDesk OAuth
      • Homepage URLhttp://your-domain-or-ip:21114(或 HTTPS)。
      • Authorization callback URLhttp://your-domain-or-ip:21114/oauth/callback(或 HTTPS)。
    • 记录 Client IDClient Secret
  4. 替换变量
    • your-domain-or-ip:服务器公网 IP 或域名(例如 192.168.1.100example.com)。
    • your-api-token:自定义 API 密钥(例如 my-secret-token)。
    • your-client-id, your-client-secret:GitHub OAuth 应用的凭据。

部署步骤

1. 创建 Docker 网络和数据目录

# 创建网络
docker network create common-network

# 创建数据目录并设置权限
mkdir -p /docker-volumes/rustdesk/data/hbbs /data/rustdesk/api
chmod -R 777 /docker-volumes/rustdesk/data/hbbs /data/rustdesk/api

2. 配置 Docker Compose

创建 /opt/rustdesk/docker-compose.yml

version: '2.1'

services:
  rustdesk:
    container_name: rustdesk-server
    image: rustdesk/rustdesk-server-s6:latest
    ports:
      - "21115:21115"
      - "21116:21116"
      - "21116:21116/udp"
      - "21117:21117"
      - "21118:21118"
      - "21119:21119"
    environment:
      - RELAY=your-domain-or-ip:21117
      - ENCRYPTED_ONLY=1
    volumes:
      - /docker-volumes/rustdesk/data/hbbs:/data
    restart: always
    mem_limit: 250M
    networks:
      - common-network

  rustdesk-api:
    container_name: rustdesk-api
    image: lejianwen/rustdesk-api
    ports:
      - "21114:21114"
    environment:
      - TZ=Asia/Shanghai
      - RUSTDESK_API_RUSTDESK_ID_SERVER=your-domain-or-ip:21116
      - RUSTDESK_API_RUSTDESK_RELAY_SERVER=your-domain-or-ip:21117
      - RUSTDESK_API_RUSTDESK_API_SERVER=http://your-domain-or-ip:21114
      - RUSTDESK_API_RUSTDESK_KEY=your-api-token
      - OAUTH_GITHUB_ENABLED=true
      - OAUTH_GITHUB_CLIENT_ID=your-client-id
      - OAUTH_GITHUB_CLIENT_SECRET=your-client-secret
      - OAUTH_GITHUB_REDIRECT_URI=http://your-domain-or-ip:21114/oauth/callback
    volumes:
      - /data/rustdesk/api:/app/data
    restart: unless-stopped
    mem_limit: 50M
    networks:
      - common-network

networks:
  common-network:
    external: true

替换以下变量

  • your-domain-or-ip:服务器公网 IP 或域名。
  • your-api-token:自定义 API 密钥。
  • your-client-id, your-client-secret:GitHub OAuth 凭据。

3. 开放防火墙端口

确保防火墙和云服务商安全组开放以下端口:

ufw allow 21114/tcp
ufw allow 21115/tcp
ufw allow 21116/tcp
ufw allow 21116/udp
ufw allow 21117/tcp
ufw allow 21118/tcp
ufw allow 21119/tcp

4. 启动服务

cd /opt/rustdesk
docker-compose up -d

5. 验证服务

  • 检查容器状态
    docker ps
    
  • 确认网络
    docker network inspect common-network
    
    确保 rustdesk-serverrustdesk-api 在列表中。
  • 验证内存
    docker stats
    
    确保 rustdesk 不超 250MB,rustdesk-api 不超 50MB。

6. 配置 GitHub OAuth

方法 1:通过环境变量(首选)

docker-compose.yml 已包含以下环境变量,lejianwen/rustdesk-api 应自动启用 GitHub OAuth:

  • OAUTH_GITHUB_ENABLED=true
  • OAUTH_GITHUB_CLIENT_ID=your-client-id
  • OAUTH_GITHUB_CLIENT_SECRET=your-client-secret
  • OAUTH_GITHUB_REDIRECT_URI=http://your-domain-or-ip:21114/oauth/callback

方法 2:通过 Web 界面

如果环境变量无效:

  1. 访问 http://your-domain-or-ip:21114
  2. 登录管理面板(检查 docker logs rustdesk-api 获取初始凭据)。
  3. 在设置中配置 OAuth:
    • Provider:GitHub
    • Client IDyour-client-id
    • Client Secretyour-client-secret
    • Redirect URIhttp://your-domain-or-ip:21114/oauth/callback
  4. 保存并测试登录。

方法 3:手动配置文件(备用)

如果以上方法失败:

vim /data/rustdesk/api/oauth2.toml

添加:

[github]
enabled = true
client_id = "your-client-id"
client_secret = "your-client-secret"
redirect_uri = "http://your-domain-or-ip:21114/oauth/callback"

重启 API:

docker-compose restart rustdesk-api

7. 配置 RustDesk 客户端

  1. 获取公钥
    cat /docker-volumes/rustdesk/data/hbbs/id_ed25519.pub
    
  2. 打开 RustDesk 客户端,进入“网络”设置:
    • ID 服务器your-domain-or-ip:21116
    • 密钥:粘贴公钥
    • API 服务器http://your-domain-or-ip:21114
  3. 测试连接。

8. 测试 OAuth

  • 访问 http://your-domain-or-ip:21114
  • 点击 GitHub 登录,验证是否跳转到 GitHub 并认证成功。

注意事项

  • HTTPS(推荐):
    • 配置 Nginx 和 SSL:
      apt install nginx certbot python3-certbot-nginx
      certbot --nginx -d your-domain.com
      
    • 示例 Nginx 配置:
      server {
          listen 443 ssl;
          server_name your-domain.com;
          ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
          location / {
              proxy_pass http://localhost:21114;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }
      
    • 更新 RUSTDESK_API_RUSTDESK_API_SERVEROAUTH_GITHUB_REDIRECT_URI 为 HTTPS。
  • 内存
    • 总内存 300MB 可能限制并发连接,监控日志:
      docker logs rustdesk-server
      docker logs rustdesk-api
      
    • 若不稳定,调整分配(如 rustdesk: 260M, rustdesk-api: 40M)。
  • 权限
    • 确保路径可写:
      chown -R 1000:1000 /docker-volumes/rustdesk/data/hbbs /data/rustdesk/api
      
  • 端口冲突
    • 确认端口未被占用:
      netstat -tuln | grep 2111
      

常见问题

  • OAuth 失败
    • 验证 Client ID, Client Secret, redirect_uri
    • 检查日志:docker logs rustdesk-api
    • 确保 21114 可访问。
  • 连接失败
    • 验证公钥、ID 服务器地址、端口。
    • 检查网络:docker network inspect common-network
  • 内存不足
    • 调整内存分配或增加总内存。

参考资源