diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..88dbd09 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,58 @@ +name: Docker Publish + +permissions: + contents: read + packages: write + +on: + workflow_dispatch: + push: + tags: + - "v*.*" + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + build-args: | + MAINTAINER=${{ github.repository_owner }} + BRANCH=${{ github.ref_name }} + SOURCE_COMMIT=${{ github.sha }} + context: . + platforms: | + linux/amd64 + linux/arm/v7 + linux/arm64 + file: ./Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile index 50a38fc..c5da823 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,18 @@ -FROM python:3.10.3-slim-bullseye +FROM python:3.10.3-alpine WORKDIR /rustdesk-api-server ADD . /rustdesk-api-server -RUN pip install pip -U -i https://mirrors.cloud.tencent.com/pypi/simple -RUN pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple -RUN pip config set install.trusted-host mirrors.cloud.tencent.com -RUN pip install -r requirements.txt - -VOLUME /rustdesk-api-server/db.sqlite3 - -ENV HOST 0.0.0.0 -ENV TZ=Asia/Shanghai \ - DEBIAN_FRONTEND=noninteractive +RUN set -ex \ + && pip install --no-cache-dir --disable-pip-version-check -r requirements.txt \ + && rm -rf /var/cache/apk/* \ + && cp -r ./db ./db_bak +ENV HOST=0.0.0.0 +ENV TZ=Asia/Shanghai ENV CSRF_TRUSTED_ORIGINS="" - EXPOSE 21114/tcp EXPOSE 21114/udp -RUN cd /rustdesk-api-server - - -ENTRYPOINT ["bash", "run.sh"] - +ENTRYPOINT ["sh", "run.sh"] diff --git a/README.md b/README.md index f091983..37ee8c5 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,147 @@ -## Rustdesk Api接口介绍 +# rustdesk-api-server +

- - - + 一个 python 实现的 Rustdesk API 接口,支持 WebUI 管理 +
+ + - +
+ +

-### 缘起 -看了市面上各类RustDesk WEB API版本,或多或少的存在一些问题,比如说,需要通过url注册、新版客户端某些接口不支持、无法方便的修改密码等不足,因此博采众长,撸一个自己喜欢的版本来用。在此要感谢论坛及github的各位朋友写的接口,省去了我抓包找接口的时间。 -![主页面](/images/front_main.png) +## 缘起 + +看了市面上各类 RustDesk WEB API 版本,或多或少的存在一些问题,比如说,需要通过url注册、新版客户端某些接口不支持、无法方便的修改密码等不足,因此博采众长,撸一个自己喜欢的版本来用。在此要感谢论坛及github的各位朋友写的接口,省去了我抓包找接口的时间。 + +![主页面](images/front_main.png) + +## 功能特点 -### 功能特点 - 支持前台网页自主注册和登录。 - 注册页与登录页: - - - - + +![Front Registration](images/front_reg.png) + +![Front Login](images/front_login.png) + - 支持前台展示设备信息,分为管理员版、用户版。 - 支持自定义别名(备注)。 - 支持后台管理。 - 支持彩色标签。 - - - + +![Rust Books](images/rust_books.png) + - 支持设备在线统计。 - 支持设备密码保存。 - 利用心跳接口自动管理token并保活。 - 支持分享设备给其他用户(本功能暂未实现)。 - - 后台主页: - -### 管理员设置 -当数据库中不存在账户时,第一个注册的账户直接获取超级管理员权限,之后注册账户为普通账户。 +后台主页: +![Admin Main](images/admin_main.png) -### 其他说明 -设备信息 -经测试,客户端会在非绿色版模式下,安装为服务的模式中,定时发送设备信息到api接口, -所以如果想要设备信息,需要安装rustdesk客户端并启动服务。 +## 安装 -### 连接速度慢 -新版本Key模式链接速度慢,可以在服务端启动服务时,不要带参数的-k,此时,客户端也不能配置key +### 开箱即用 +仅支持Windows,请前往 release 下载,无需安装环境,直接运行`启动.bat`即可。独立版截图: +![window独立绿色版](/images/windows_run.png) -### 获取方法 +### 代码运行 -#### 开箱即用版 - - Window独立打包版,无需安装环境,直接运行`启动.bat`即可。请前往release下载。仅支持windows - 独立版截图:![window独立绿色版](/images/windows_run.png) - - - -#### 代码版本 - -将代码克隆到本地后,请先安装依赖: -`pip install -r requirements.txt` - -确保依赖安装正确后,执行: -`python manage.py runserver 0.0.0.0:21114` 端口号请自行修改。 - -此时即可使用`http://本机IP:端口`的形式来访问啦。 - -支持Django3及Django4+ -注意,如果cengtos配置时,Django4会因为系统的sqlite3版本过低而出问题,请修改依赖库中的文件,路径: -`xxxx/Lib/site-packages/django/db/backends/sqlite3/base.py` (这是例子,根据情况自行查找包所在地址) - - -修改内容: +```bash +# 将代码克隆到本地 +git clone https://github.com/kingmo888/rustdesk-api-server.git +# 进入目录 +cd rustdesk-api-server +# 安装依赖 +pip install -r requirements.txt +# 确保依赖安装正确后,执行: +# 端口号请自行修改,建议保留21114为Rustdesk API默认端口 +python manage.py runserver 0.0.0.0:21114 ``` + +此时即可使用 `http://本机IP:端口` 的形式来访问。 + +**注意**:如果 CentOS 配置时,Django4 会因为系统的 sqlite3 版本过低而出问题,请修改依赖库中的文件。路径:`xxxx/Lib/site-packages/django/db/backends/sqlite3/base.py` (根据情况自行查找包所在地址),修改内容: +```python # from sqlite3 import dbapi2 as Database #(注释掉这行) from pysqlite3 import dbapi2 as Database # 启用pysqlite3 ``` -#### Docker方式 - -根目录执行命令: -`docker compose --compatibility up --build -d;` +### Docker 运行 +#### 自行构建 +```bash +git clone https://github.com/kingmo888/rustdesk-api-server.git +cd rustdesk-api-server +docker compose --compatibility up --build -d +``` 感谢热心网友 @ferocknew 提供。 -### 计划开发 +#### 预构建运行 -1、分享设备给其他已注册用户 +docker run 命令: - 说明:类似网盘url分享,url激活后可以获得某个或某组或某个标签下的设备 - 备注:其实web api作为中间件,可做的不多,更多功能还是需要修改客户端来实现,就不太值当了。 +```bash +docker run -d \ + --name rustdesk-api-server \ + -p 21114:21114 \ + -e HOST=0.0.0.0 \ + -e TZ=Asia/Shanghai \ + -e CSRF_TRUSTED_ORIGINS=http://yourdomain.com:21114 \ #修改CSRF_TRUSTED_ORIGINS为你的访问地址 + -v /yourpath/db:/rustdesk-api-server/db \ #修改/yourpath/db为你宿主机数据库挂载目录 + -v /etc/timezone:/etc/timezone:ro \ + -v /etc/localtime:/etc/localtime:ro \ + --network bridge \ + --restart unless-stopped \ + ghcr.io/kingmo888/rustdesk-api-server:master +``` -2、集成Web桌面形式 +docker-compose 方式: - 将大神的web桌面集成进来(待议) \ No newline at end of file +```yaml +version: "3.8" +services: + rustdesk-api-server: + container_name: rustdesk-api-server + image: ghcr.io/kingmo888/rustdesk-api-server:master + environment: + - HOST=0.0.0.0 + - TZ=Asia/Shanghai + - CSRF_TRUSTED_ORIGINS=http://yourdomain.com:21114 #修改CSRF_TRUSTED_ORIGINS为你的访问地址 + volumes: + - /yourpath/db:/rustdesk-api-server/db #修改/yourpath/db为你宿主机数据库挂载目录 + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + network_mode: bridge + ports: + - "21114:21114" + restart: unless-stopped +``` +## 使用问题 + +- 管理员设置 + + 当数据库中不存在账户时,第一个注册的账户直接获取超级管理员权限,之后注册账户为普通账户。 + +- 设备信息 + + 经测试,客户端会在非绿色版模式下,安装为服务的模式中,定时发送设备信息到api接口,所以如果想要设备信息,需要安装rustdesk客户端并启动服务。 + +- 连接速度慢 + + 新版本Key模式链接速度慢,可以在服务端启动服务时,不要带参数的-k,此时,客户端也不能配置key。 + +## 开发计划 + +- [ ] 分享设备给其他已注册用户 + + > 说明:类似网盘url分享,url激活后可以获得某个或某组或某个标签下的设备 + > 备注:其实web api作为中间件,可做的不多,更多功能还是需要修改客户端来实现,就不太值当了。 + +- [ ] 集成Web客户端形式 + + > 将大神的web客户端集成进来(待议) diff --git a/db.sqlite3 b/db/db.sqlite3 similarity index 100% rename from db.sqlite3 rename to db/db.sqlite3 diff --git a/docker-compose.yaml b/docker-compose.yaml index 2e64278..92ca442 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,10 +7,12 @@ services: environment: - HOST=0.0.0.0 - TZ=Asia/Shanghai - - CSRF_TRUSTED_ORIGINS= + - CSRF_TRUSTED_ORIGINS=http://yourdomain.com:21114 volumes: - - ./db.sqlite3:/rustdesk-api-server/db.sqlite3 + - /yourpath/db:/rustdesk-api-server/db - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro + network_mode: bridge ports: - "21114:21114" + restart: unless-stopped diff --git a/run.sh b/run.sh index e6f4efc..4bc0ac1 100644 --- a/run.sh +++ b/run.sh @@ -1,4 +1,10 @@ #!/bin/bash cd /rustdesk-api-server; + +if [ ! -e "./db/db.sqlite3" ]; then + cp "./db_bak/db.sqlite3" "./db/db.sqlite3" + echo "首次运行,初始化数据库" +fi + python manage.py runserver $HOST:21114; diff --git a/rustdesk_server_api/settings.py b/rustdesk_server_api/settings.py index c62e6f2..3604bfa 100644 --- a/rustdesk_server_api/settings.py +++ b/rustdesk_server_api/settings.py @@ -78,7 +78,7 @@ WSGI_APPLICATION = 'rustdesk_server_api.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + 'NAME': BASE_DIR / 'db/db.sqlite3', } }