RustDesk 自建服务器部署与 GitHub OAuth 配置
本文档指导如何在 Linux 服务器上使用 Docker Compose 部署 RustDesk 自建服务器,并通过 GitHub OAuth 实现用户认证,无需手动创建 oauth2.toml
配置文件。配置包括 rustdesk/rustdesk-server-s6
和 lejianwen/rustdesk-api
,总内存限制为 300MB,使用 common-network
网络。
前提条件
- 服务器环境:
- 系统:Linux(如 Ubuntu)。
- 已安装 Docker 和 Docker Compose。
- 公网 IP 或域名。
- 端口要求:
- TCP:21114, 21115, 21116, 21117, 21118, 21119
- UDP:21116
- GitHub OAuth 应用:
- 在 GitHub 创建 OAuth 应用(Settings > Developer settings > OAuth Apps > New OAuth App):
- Application name:例如
RustDesk OAuth
。 - Homepage URL:
http://your-domain-or-ip:21114
(或 HTTPS)。 - Authorization callback URL:
http://your-domain-or-ip:21114/oauth/callback
(或 HTTPS)。
- Application name:例如
- 记录
Client ID
和Client Secret
。
- 在 GitHub 创建 OAuth 应用(Settings > Developer settings > OAuth Apps > New OAuth App):
- 替换变量:
your-domain-or-ip
:服务器公网 IP 或域名(例如192.168.1.100
或example.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-server
和rustdesk-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 界面
如果环境变量无效:
- 访问
http://your-domain-or-ip:21114
。 - 登录管理面板(检查
docker logs rustdesk-api
获取初始凭据)。 - 在设置中配置 OAuth:
- Provider:GitHub
- Client ID:
your-client-id
- Client Secret:
your-client-secret
- Redirect URI:
http://your-domain-or-ip:21114/oauth/callback
- 保存并测试登录。
方法 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 客户端
- 获取公钥:
cat /docker-volumes/rustdesk/data/hbbs/id_ed25519.pub
- 打开 RustDesk 客户端,进入“网络”设置:
- ID 服务器:
your-domain-or-ip:21116
- 密钥:粘贴公钥
- API 服务器:
http://your-domain-or-ip:21114
- ID 服务器:
- 测试连接。
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_SERVER
和OAUTH_GITHUB_REDIRECT_URI
为 HTTPS。
- 配置 Nginx 和 SSL:
- 内存:
- 总内存 300MB 可能限制并发连接,监控日志:
docker logs rustdesk-server docker logs rustdesk-api
- 若不稳定,调整分配(如
rustdesk: 260M
,rustdesk-api: 40M
)。
- 总内存 300MB 可能限制并发连接,监控日志:
- 权限:
- 确保路径可写:
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
。
- 内存不足:
- 调整内存分配或增加总内存。