From 5a62b3bc09fd2bf46b698b880afddb025f95abd7 Mon Sep 17 00:00:00 2001 From: okxlin Date: Thu, 31 Aug 2023 10:28:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0qbittorrent-vnc=E5=88=B0?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/qbittorrent-vnc/README.md | 94 ++++++++++++++++++ apps/qbittorrent-vnc/data.yml | 20 ++++ apps/qbittorrent-vnc/develop/.env.sample | 8 ++ apps/qbittorrent-vnc/develop/data.yml | 56 +++++++++++ .../develop/docker-compose.yml | 25 +++++ apps/qbittorrent-vnc/logo.png | Bin 0 -> 10157 bytes 6 files changed, 203 insertions(+) create mode 100644 apps/qbittorrent-vnc/README.md create mode 100644 apps/qbittorrent-vnc/data.yml create mode 100644 apps/qbittorrent-vnc/develop/.env.sample create mode 100644 apps/qbittorrent-vnc/develop/data.yml create mode 100644 apps/qbittorrent-vnc/develop/docker-compose.yml create mode 100644 apps/qbittorrent-vnc/logo.png diff --git a/apps/qbittorrent-vnc/README.md b/apps/qbittorrent-vnc/README.md new file mode 100644 index 00000000..f19e7f10 --- /dev/null +++ b/apps/qbittorrent-vnc/README.md @@ -0,0 +1,94 @@ +# 使用说明 + +- 访问链接协议`https` + +- 默认账户密码 +``` +username: kasm_user +password: password +``` + +- 假如重启出现异常 + +大概率可能是文件夹权限原因,需要将应用数据文件夹`data`赋予用户权限, + +终端运行以下命令,按需修改。 + +``` +chown -R 1000:1000 /opt/1panel/apps/local/qbittorrent-vnc/qbittorrent-vnc/data +``` + +# 原始相关 +*** + +**Kasm Workspaces is a docker container streaming platform for delivering browser-based access to desktops, applications, and web services.** + +## Live Demo + + +**Launch a real-time demo in a new browser window:** [Live Demo](https://app.kasmweb.com/#/cast/5361455650). + +](https://app.kasmweb.com/#/cast/5361455650) + +∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.* + +## Get Started + +Try out our no-cost Community Edition: [Download](https://kasmweb.com/downloads "Download"). + +Our Kasm Workspaces team has open-sourced our library of images ([Info](https://www.kasmweb.com/docs/latest/guide/custom_images.html "Image Info") & [Source Code](https://github.com/kasmtech/workspaces-images "Workspaces Images")). + +The web-native rendering is powered by our open-source project: [KasmVNC](https://github.com/kasmtech/KasmVNC "KasmVNC"). + +## About This Image + +This Image contains a browser-accessible version of [qBittorrent](https://www.qbittorrent.org/). + + + +## Environment Variables + +- `APP_ARGS` \- Additional arguments to pass to the application when launched. + +## Stand-alone Deployment + +This image was designed to run natively within Kasm Workspaces, but it can also be deployed stand-alone and accessed through a web browser. + +``` +sudo docker run --rm -it --shm-size=512m -p 6901:6901 -e VNC_PW=password kasmweb/qbittorrent:1.13.0 +``` + +The container is now accessible via a browser : [https://IP\_OF\_SERVER:6901](https://ip_of_server:6901/) + +- User : kasm_user +- Password: password + +**Please note that some functionality, such as audio, uploads, downloads, and microphone pass-through, is only available when using Kasm Workspaces for orchestration.** + +## Tags + +- 1.13.0 + + - Images are built and tagged with the Kasm Workspaces release version. +- 1.13.0-rolling + + - Rolling tags are images that are updated and built nightly to ensure your images are running the latest version. +- develop + + - The develop tag is for testing and provides no expectation of compatibility. + +## Additional Info + +- Source Code + + - [KasmVNC GitHub](https://github.com/kasmtech/KasmVNC "KasmVNC"): Open-Source VNC server: web-native, secure, high-performance. + - [Images GitHub](https://github.com/kasmtech/workspaces-images "Workspaces Images"): Library of Workspaces Docker images. + - [Core Images GitHub](https://github.com/kasmtech/workspaces-core-images "Core Images"): Library of core OS baselines for custom images. +- Workspaces Documentation + + - [Developer API](https://www.kasmweb.com/docs/latest/developers/developer_api.html "Developer API"): Integrate with your applications and workflows. + - [Workspaces](https://www.kasmweb.com/docs/latest/install.html "Installation"): Instructions for installing and configuring Kasm Workspaces. + - [Custom Images](https://www.kasmweb.com/docs/latest/how_to/building_images.html "Custom Images"): Info on configuring custom images and installing software. +- Reporting Issues + + - [Issue Tracker GitHub](https://github.com/kasmtech/workspaces-issues/issues "GitHub Support"): Community issue reporting. \ No newline at end of file diff --git a/apps/qbittorrent-vnc/data.yml b/apps/qbittorrent-vnc/data.yml new file mode 100644 index 00000000..7858e140 --- /dev/null +++ b/apps/qbittorrent-vnc/data.yml @@ -0,0 +1,20 @@ +name: qBittorrent-VNC +tags: + - 工具 +title: 适用于Kasm Workspaces 的 qBittorrent +type: 工具 +description: 适用于Kasm Workspaces 的 qBittorrent +additionalProperties: + key: qbittorrent-vnc + name: qBittorrent-VNC + tags: + - Tool + shortDescZh: 适用于Kasm Workspaces 的 qBittorrent + shortDescEn: qBittorrent for Kasm Workspaces + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://www.qbittorrent.org/ + github: https://github.com/qbittorrent/qBittorrent + document: http://wiki.qbittorrent.org/ diff --git a/apps/qbittorrent-vnc/develop/.env.sample b/apps/qbittorrent-vnc/develop/.env.sample new file mode 100644 index 00000000..b5a9c36a --- /dev/null +++ b/apps/qbittorrent-vnc/develop/.env.sample @@ -0,0 +1,8 @@ +CONTAINER_NAME="qbittorrent-vnc" +DOWNLOAD_PATH="./data/downloads" +#HTTP_USER="kasm_user" +HTTP_PWD="password" +MEM_USE="512m" +PANEL_APP_PORT_HTTP="40139" +PANEL_APP_PORT_HTTPS="40140" +PANEL_APP_PORT_PEER="40141" diff --git a/apps/qbittorrent-vnc/develop/data.yml b/apps/qbittorrent-vnc/develop/data.yml new file mode 100644 index 00000000..b39917f6 --- /dev/null +++ b/apps/qbittorrent-vnc/develop/data.yml @@ -0,0 +1,56 @@ +additionalProperties: + formFields: + - default: 40139 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port (Manual setup is required) + labelZh: 网页端口 (需要手动设置) + required: true + rule: paramPort + type: number + - default: 40140 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelEn: Web VNC Port + labelZh: Web VNC 端口 + required: true + rule: paramPort + type: number + - default: 40141 + edit: true + envKey: PANEL_APP_PORT_PEER + labelEn: Peer Port (Manual setup is required) + labelZh: BT端口 (需要手动设置) + required: true + rule: paramPort + type: number + - default: ./data/downloads + edit: true + envKey: DOWNLOAD_PATH + labelEn: Download folder path + labelZh: 下载文件夹路径 + required: true + type: text + - default: kasm_user + disabled: true + envKey: HTTP_USER + labelEn: http auth user + labelZh: HTTP 用户 + required: true + type: text + - default: password + edit: true + envKey: HTTP_PWD + labelEn: Access Password + labelZh: 访问密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "512m" + edit: true + envKey: MEM_USE + labelEn: Shared memory footprint (1gb) + labelZh: 共享内存占用(1gb) + required: true + type: text diff --git a/apps/qbittorrent-vnc/develop/docker-compose.yml b/apps/qbittorrent-vnc/develop/docker-compose.yml new file mode 100644 index 00000000..0336c307 --- /dev/null +++ b/apps/qbittorrent-vnc/develop/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3' +services: + qbittorrent-vnc: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTPS}:6901" + - "${PANEL_APP_PORT_PEER}:${PANEL_APP_PORT_PEER}" + - "${PANEL_APP_PORT_PEER}:${PANEL_APP_PORT_PEER}/udp" + - "${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP}" + volumes: + - "${DOWNLOAD_PATH}:/home/kasm-user/Downloads" + environment: + - VNC_PW=${HTTP_PWD} + shm_size: ${MEM_USE} + tty: true + image: kasmweb/qbittorrent:develop + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/qbittorrent-vnc/logo.png b/apps/qbittorrent-vnc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc6cf2473e3fe6c2e30e272ead428ee54bfd55e GIT binary patch literal 10157 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