Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions .github/workflows/web-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@ on:
- 'flutter/lib/**'
- 'flutter/assets/**'
- 'flutter/pubspec.*'
- 'Dockerfile.webclient'
- 'deploy/docker/webclient/Dockerfile'
- '.github/workflows/web-docker.yml'
- '.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff'
push:
tags: ['*']
workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/rustdesk-webclient
IMAGE_NAME: rophy/rustdesk-webclient

jobs:
test:
Expand Down Expand Up @@ -51,7 +50,6 @@ jobs:
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -62,19 +60,18 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
- name: Log in to Docker Hub
if: startsWith(github.ref, 'refs/tags/')
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
images: ${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
Expand All @@ -83,9 +80,18 @@ jobs:
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile.webclient
file: deploy/docker/webclient/Dockerfile
push: ${{ startsWith(github.ref, 'refs/tags/') }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Update Docker Hub description
if: startsWith(github.ref, 'refs/tags/')
uses: peter-evans/dockerhub-description@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: ${{ env.IMAGE_NAME }}
readme-filepath: deploy/docker/webclient/README.md
File renamed without changes.
42 changes: 42 additions & 0 deletions deploy/docker/webclient/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# RustDesk Web Client

OSS-compatible web client for [RustDesk](https://rustdesk.com) remote desktop, built from the official Flutter web source with patches for hbbs/hbbr (non-Pro) servers.

## Quick Start

```bash
docker run -d -p 8080:80 \
-e RUSTDESK_HOST=wss://your-server.com/hbbs \
-e RUSTDESK_RELAY=wss://your-server.com/hbbr \
-e RUSTDESK_KEY=your-public-key \
rophy/rustdesk-webclient
```

Then open http://localhost:8080 in a browser.

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `RUSTDESK_HOST` | Yes | WebSocket URL of the rendezvous server (hbbs) |
| `RUSTDESK_RELAY` | No | WebSocket URL of the relay server (hbbr). Defaults to `RUSTDESK_HOST` |
| `RUSTDESK_KEY` | No | Server public key |
| `RUSTDESK_API` | No | API server URL (only for Server Pro) |

## With Reverse Proxy

When running behind a reverse proxy (nginx, Istio, etc.) that terminates TLS:

```bash
docker run -d -p 8080:80 \
-e RUSTDESK_HOST=wss://rustdesk.example.com/hbbs \
-e RUSTDESK_RELAY=wss://rustdesk.example.com/hbbr \
-e RUSTDESK_KEY=your-public-key \
rophy/rustdesk-webclient
```

The proxy should route `/hbbs` to hbbs port 21118 and `/hbbr` to hbbr port 21119 with WebSocket upgrade support.

## Source

Built from [rophy/rustdesk](https://github.com/rophy/rustdesk) using [`deploy/docker/webclient/Dockerfile`](https://github.com/rophy/rustdesk/blob/master/deploy/docker/webclient/Dockerfile).
Loading