mirror of
https://github.com/rustdesk/rustdesk-server.git
synced 2025-07-01 15:25:29 +00:00
classic image support
This commit is contained in:
parent
e4b2fc15b6
commit
104fb00d88
106
.github/workflows/build.yaml
vendored
106
.github/workflows/build.yaml
vendored
@ -2,7 +2,8 @@ name: build
|
|||||||
|
|
||||||
# ------------- NOTE
|
# ------------- NOTE
|
||||||
# please setup some secrets before running this workflow:
|
# please setup some secrets before running this workflow:
|
||||||
# DOCKER_IMAGE should be the target image name on docker hub (e.g. "rustdesk/rustdesk-server" )
|
# DOCKER_IMAGE should be the target image name on docker hub (e.g. "rustdesk/rustdesk-server-s6" )
|
||||||
|
# DOCKER_IMAGE_CLASSIC should be the target image name on docker hub for the old build (e.g. "rustdesk/rustdesk-server" )
|
||||||
# DOCKER_USERNAME is the username you normally use to login at https://hub.docker.com/
|
# DOCKER_USERNAME is the username you normally use to login at https://hub.docker.com/
|
||||||
# DOCKER_PASSWORD is a token you should create under "account settings / security" with read/write access
|
# DOCKER_PASSWORD is a token you should create under "account settings / security" with read/write access
|
||||||
|
|
||||||
@ -15,10 +16,11 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
LATEST_TAG: devel
|
LATEST_TAG: latest
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
# binary build
|
||||||
build:
|
build:
|
||||||
|
|
||||||
name: Build - ${{ matrix.job.name }}
|
name: Build - ${{ matrix.job.name }}
|
||||||
@ -64,7 +66,7 @@ jobs:
|
|||||||
target/${{ matrix.job.target }}/release/hbbs
|
target/${{ matrix.job.target }}/release/hbbs
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
|
# github (draft) release with all binaries
|
||||||
release:
|
release:
|
||||||
|
|
||||||
name: Github release
|
name: Github release
|
||||||
@ -110,7 +112,7 @@ jobs:
|
|||||||
armv7/*
|
armv7/*
|
||||||
i386/*
|
i386/*
|
||||||
|
|
||||||
|
# docker build and push of single-arch images
|
||||||
docker:
|
docker:
|
||||||
|
|
||||||
name: Docker push - ${{ matrix.job.name }}
|
name: Docker push - ${{ matrix.job.name }}
|
||||||
@ -158,6 +160,14 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
images: registry.hub.docker.com/${{ secrets.DOCKER_IMAGE }}
|
images: registry.hub.docker.com/${{ secrets.DOCKER_IMAGE }}
|
||||||
|
|
||||||
|
- name: Get git tag
|
||||||
|
id: vars
|
||||||
|
run: |
|
||||||
|
T=${GITHUB_REF#refs/*/}
|
||||||
|
M=${T%%.*}
|
||||||
|
echo "GIT_TAG=$T" >> $GITHUB_ENV
|
||||||
|
echo "MAJOR_TAG=$M" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
@ -166,10 +176,11 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }}
|
${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }}
|
||||||
${{ secrets.DOCKER_IMAGE }}:${{ github.ref_name }}-${{ matrix.job.name }}
|
${{ secrets.DOCKER_IMAGE }}:${{ env.GIT_TAG }}-${{ matrix.job.name }}
|
||||||
|
${{ secrets.DOCKER_IMAGE }}:${{ env.MAJOR_TAG }}-${{ matrix.job.name }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
|
||||||
|
# docker build and push of multiarch images
|
||||||
docker-manifest:
|
docker-manifest:
|
||||||
|
|
||||||
name: Docker manifest
|
name: Docker manifest
|
||||||
@ -185,6 +196,31 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Get git tag
|
||||||
|
id: vars
|
||||||
|
run: |
|
||||||
|
T=${GITHUB_REF#refs/*/}
|
||||||
|
M=${T%%.*}
|
||||||
|
echo "GIT_TAG=$T" >> $GITHUB_ENV
|
||||||
|
echo "MAJOR_TAG=$M" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
# manifest for :1.2.3 tag
|
||||||
|
- name: Create and push manifest
|
||||||
|
uses: Noelware/docker-manifest-action@master
|
||||||
|
with:
|
||||||
|
base-image: ${{ secrets.DOCKER_IMAGE }}:${{ env.GIT_TAG }}
|
||||||
|
extra-images: ${{ secrets.DOCKER_IMAGE }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_IMAGE }}:${{ env.GIT_TAG }}-arm64v8,${{ secrets.DOCKER_IMAGE }}:${{ env.GIT_TAG }}-armv7,${{ secrets.DOCKER_IMAGE }}:${{ env.GIT_TAG }}-i386
|
||||||
|
push: true
|
||||||
|
|
||||||
|
# manifest for :1 tag (major release)
|
||||||
|
- name: Create and push manifest
|
||||||
|
uses: Noelware/docker-manifest-action@master
|
||||||
|
with:
|
||||||
|
base-image: ${{ secrets.DOCKER_IMAGE }}:${{ env.MAJOR_TAG }}
|
||||||
|
extra-images: ${{ secrets.DOCKER_IMAGE }}:${{ env.MAJOR_TAG }}-amd64,${{ secrets.DOCKER_IMAGE }}:${{ env.MAJOR_TAG }}-arm64v8,${{ secrets.DOCKER_IMAGE }}:${{ env.MAJOR_TAG }}-armv7,${{ secrets.DOCKER_IMAGE }}:${{ env.MAJOR_TAG }}-i386
|
||||||
|
push: true
|
||||||
|
|
||||||
|
# manifest for :latest tag
|
||||||
- name: Create and push manifest
|
- name: Create and push manifest
|
||||||
uses: Noelware/docker-manifest-action@master
|
uses: Noelware/docker-manifest-action@master
|
||||||
with:
|
with:
|
||||||
@ -198,3 +234,61 @@ jobs:
|
|||||||
base-image: ${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}
|
base-image: ${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}
|
||||||
extra-images: ${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-arm64v8,${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-armv7,${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-i386
|
extra-images: ${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-arm64v8,${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-armv7,${{ secrets.DOCKER_IMAGE }}:${{ env.LATEST_TAG }}-i386
|
||||||
push: true
|
push: true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# docker build and push of classic images
|
||||||
|
docker-classic:
|
||||||
|
|
||||||
|
name: Docker push classic - ${{ matrix.job.name }}
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
job:
|
||||||
|
- { name: "amd64", docker_platform: "linux/amd64", tag: "latest" }
|
||||||
|
- { name: "arm64v8", docker_platform: "linux/arm64", tag: "latest-arm64v8" }
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Download binaries
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: binaries-${{ matrix.job.name }}
|
||||||
|
path: docker-classic/
|
||||||
|
|
||||||
|
- name: Make binaries executable
|
||||||
|
run: chmod -v a+x docker-classic/hbb*
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: registry.hub.docker.com/${{ secrets.DOCKER_IMAGE_CLASSIC }}
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: "./docker-classic"
|
||||||
|
platforms: ${{ matrix.job.docker_platform }}
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
${{ secrets.DOCKER_IMAGE_CLASSIC }}:${{ matrix.job.tag }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
146
README.md
146
README.md
@ -1,7 +1,7 @@
|
|||||||
[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
|
|
||||||
|
|
||||||
# RustDesk Server Program
|
# RustDesk Server Program
|
||||||
|
|
||||||
|
[](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml)
|
||||||
|
|
||||||
[**Download**](https://github.com/rustdesk/rustdesk-server/releases)
|
[**Download**](https://github.com/rustdesk/rustdesk-server/releases)
|
||||||
|
|
||||||
[**Manual**](https://rustdesk.com/docs/en/self-host/)
|
[**Manual**](https://rustdesk.com/docs/en/self-host/)
|
||||||
@ -10,18 +10,152 @@
|
|||||||
|
|
||||||
Self-host your own RustDesk server, it is free and open source.
|
Self-host your own RustDesk server, it is free and open source.
|
||||||
|
|
||||||
|
## How to build manually
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo build --release
|
cargo build --release
|
||||||
```
|
```
|
||||||
|
|
||||||
Two executables will be generated in target/release.
|
Two executables will be generated in target/release.
|
||||||
- hbbs - RustDesk ID/Rendezvous server
|
|
||||||
- hbbr - RustDesk relay server
|
- hbbs - RustDesk ID/Rendezvous server
|
||||||
|
- hbbr - RustDesk relay server
|
||||||
|
|
||||||
|
You can find updated binaries on the [releases](https://github.com/rustdesk/rustdesk-server/releases) page.
|
||||||
|
|
||||||
If you wanna develop your own server, [rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) might be a better and simpler start for you than this repo.
|
If you wanna develop your own server, [rustdesk-server-demo](https://github.com/rustdesk/rustdesk-server-demo) might be a better and simpler start for you than this repo.
|
||||||
|
|
||||||
## docker-compose
|
## Docker images
|
||||||
|
|
||||||
If you have Docker and would like to use it, an included `docker-compose.yml` file is included. Edit line 16 to point to your relay server (the one listening on port 21117). You can also edit the volume lines (L18 and L33) if you need.
|
Docker images are automatically generated and published on every github release. We have 2 kind of images.
|
||||||
|
|
||||||
|
### Classic image
|
||||||
|
|
||||||
|
These images are build against `ubuntu-20.04` with the only addition of the binaries (both hbbr and hbbs). They're available on [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server/) with these tags:
|
||||||
|
|
||||||
|
| architecture | image:tag |
|
||||||
|
| --- | --- |
|
||||||
|
| amd64 | `rustdesk/rustdesk-server:latest` |
|
||||||
|
| arm64v8 | `rustdesk/rustdesk-server:latest-arm64v8` |
|
||||||
|
|
||||||
|
You can start these images directly with `docker run` with these commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v "$PWD:/root" -d rustdesk/rustdesk-server:latest hbbs -r <relay-server-ip[:port]>
|
||||||
|
docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD:/root" -d rustdesk/rustdesk-server:latest hbbr
|
||||||
|
```
|
||||||
|
|
||||||
|
The `relay-server-ip` parameter is the IP address (or dns name) of the server running these containers. The **optional** `port` parameter has to be used if you use a port different than **21117** for `hbbr`.
|
||||||
|
|
||||||
|
You can also use docker-compose, using this configuration as a template:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
networks:
|
||||||
|
rustdesk-net:
|
||||||
|
external: false
|
||||||
|
|
||||||
|
services:
|
||||||
|
hbbs:
|
||||||
|
container_name: hbbs
|
||||||
|
ports:
|
||||||
|
- 21115:21115
|
||||||
|
- 21116:21116
|
||||||
|
- 21116:21116/udp
|
||||||
|
- 21118:21118
|
||||||
|
image: rustdesk/rustdesk-server:latest
|
||||||
|
command: hbbs -r rustdesk.example.com:21117
|
||||||
|
volumes:
|
||||||
|
- ./hbbs:/root
|
||||||
|
networks:
|
||||||
|
- rustdesk-net
|
||||||
|
depends_on:
|
||||||
|
- hbbr
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
hbbr:
|
||||||
|
container_name: hbbr
|
||||||
|
ports:
|
||||||
|
- 21117:21117
|
||||||
|
- 21119:21119
|
||||||
|
image: rustdesk/rustdesk-server:latest
|
||||||
|
command: hbbr
|
||||||
|
volumes:
|
||||||
|
- ./hbbr:/root
|
||||||
|
networks:
|
||||||
|
- rustdesk-net
|
||||||
|
restart: unless-stopped
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit line 16 to point to your relay server (the one listening on port 21117). You can also edit the volume lines (L18 and L33) if you need.
|
||||||
|
|
||||||
(docker-compose credit goes to @lukebarone and @QuiGonLeong)
|
(docker-compose credit goes to @lukebarone and @QuiGonLeong)
|
||||||
|
|
||||||
|
## S6-overlay based images
|
||||||
|
|
||||||
|
These images are build against `busybox:stable` with the addition of the binaries (both hbbr and hbbs) and [S6-overlay](https://github.com/just-containers/s6-overlay). They're available on [Docker hub](https://hub.docker.com/r/rustdesk/rustdesk-server-36/) with these tags:
|
||||||
|
|
||||||
|
| architecture | version | image:tag |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| multiarch | latest | `rustdesk/rustdesk-server-s6:latest` |
|
||||||
|
| amd64 | latest | `rustdesk/rustdesk-server-s6:latest-amd64` |
|
||||||
|
| i386 | latest | `rustdesk/rustdesk-server-s6:latest-i386` |
|
||||||
|
| arm64v8 | latest | `rustdesk/rustdesk-server-s6:latest-arm64v8` |
|
||||||
|
| armv7 | latest | `rustdesk/rustdesk-server-s6:latest-armv7` |
|
||||||
|
| multiarch | 2 | `rustdesk/rustdesk-server-s6:2` |
|
||||||
|
| amd64 | 2 | `rustdesk/rustdesk-server-s6:2-amd64` |
|
||||||
|
| i386 | 2 | `rustdesk/rustdesk-server-s6:2-i386` |
|
||||||
|
| arm64v8 | 2 | `rustdesk/rustdesk-server-s6:2-arm64v8` |
|
||||||
|
| armv7 | 2 | `rustdesk/rustdesk-server-s6:2-armv7` |
|
||||||
|
| multiarch | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0` |
|
||||||
|
| amd64 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-amd64` |
|
||||||
|
| i386 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-i386` |
|
||||||
|
| arm64v8 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-arm64v8` |
|
||||||
|
| armv7 | 2.0.0 | `rustdesk/rustdesk-server-s6:2.0.0-armv7` |
|
||||||
|
|
||||||
|
You're strongly encuraged to use the `multiarch` image either with the `major version` or `latest` tag.
|
||||||
|
|
||||||
|
The S6-overlay acts as a supervisor and keeps both process running, so with this image there's no need to have two separate running containers.
|
||||||
|
|
||||||
|
You can start these images directly with `docker run` with this command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --name rustdesk-server \
|
||||||
|
-p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
|
||||||
|
-p 21117:21117 -p 21118:21118 -p 21119:21119 \
|
||||||
|
-e "RELAY=rustdeskrelay.example.com" \
|
||||||
|
-e "ENCRYPTED_ONLY=1" \
|
||||||
|
-v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
Or you can use a docker-compose file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
rustdesk-server:
|
||||||
|
container_name: rustdesk-server
|
||||||
|
ports:
|
||||||
|
- 21115:21115
|
||||||
|
- 21116:21116
|
||||||
|
- 21116:21116/udp
|
||||||
|
- 21117:21117
|
||||||
|
- 21118:21118
|
||||||
|
- 21119:21119
|
||||||
|
image: rustdesk/rustdesk-server-s6:latest
|
||||||
|
environment:
|
||||||
|
- "RELAY=rustdesk.example.com:21117"
|
||||||
|
- "ENCRYPTED_ONLY=1"
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
restart: unless-stopped
|
||||||
|
```
|
||||||
|
|
||||||
|
We use these environment variables:
|
||||||
|
|
||||||
|
| variable | optional | description |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| RELAY | no | the IP address/DNS name of the machine running this container |
|
||||||
|
| ENCRYPTED_ONLY | yes | if set to **"1"** unencrypted connection will not be accepted |
|
||||||
|
4
docker-classic/Dockerfile
Executable file
4
docker-classic/Dockerfile
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
FROM ubuntu:20.04
|
||||||
|
COPY hbbs /usr/bin/hbbs
|
||||||
|
COPY hbbr /usr/bin/hbbr
|
||||||
|
WORKDIR /root
|
Loading…
x
Reference in New Issue
Block a user