From 7f7310b2e6344a9feb88374bedad635a3e935fe1 Mon Sep 17 00:00:00 2001 From: okxlin Date: Sun, 4 Aug 2024 01:07:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0neko=E5=88=B0=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/neko/README.md | 33 +++ apps/neko/data.yml | 19 ++ apps/neko/latest/.env.sample | 37 +++ apps/neko/latest/data.yml | 316 +++++++++++++++++++++++ apps/neko/latest/data/Downloads/.gitkeep | 0 apps/neko/latest/docker-compose.yml | 52 ++++ apps/neko/latest/scripts/init.sh | 3 + apps/neko/logo.png | Bin 0 -> 2796 bytes 8 files changed, 460 insertions(+) create mode 100644 apps/neko/README.md create mode 100644 apps/neko/data.yml create mode 100644 apps/neko/latest/.env.sample create mode 100644 apps/neko/latest/data.yml create mode 100644 apps/neko/latest/data/Downloads/.gitkeep create mode 100644 apps/neko/latest/docker-compose.yml create mode 100644 apps/neko/latest/scripts/init.sh create mode 100644 apps/neko/logo.png diff --git a/apps/neko/README.md b/apps/neko/README.md new file mode 100644 index 00000000..95ea886e --- /dev/null +++ b/apps/neko/README.md @@ -0,0 +1,33 @@ +
+ + + +

+ + release + + + license + + + pulls + + + issues + + + issues + + + Chat on discord + + + build + +

+ +
+ +# n.eko + +欢迎使用 Neko,这是一个在 Docker 中运行并使用 WebRTC 技术的自托管虚拟浏览器。 \ No newline at end of file diff --git a/apps/neko/data.yml b/apps/neko/data.yml new file mode 100644 index 00000000..c0b22ef7 --- /dev/null +++ b/apps/neko/data.yml @@ -0,0 +1,19 @@ +name: Neko +tags: + - 实用工具 +title: 自托管虚拟浏览器 +description: 自托管虚拟浏览器 +additionalProperties: + key: neko + name: Neko + tags: + - Tool + shortDescZh: 自托管虚拟浏览器 + shortDescEn: A self-hosted virtual browser + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://neko.m1k1o.net + github: https://github.com/m1k1o/neko + document: https://neko.m1k1o.net diff --git a/apps/neko/latest/.env.sample b/apps/neko/latest/.env.sample new file mode 100644 index 00000000..6b88310b --- /dev/null +++ b/apps/neko/latest/.env.sample @@ -0,0 +1,37 @@ +CONTAINER_NAME="neko" +DOWNLOAD_PATH="./data/Downloads" +IMAGE_NAME="m1k1o/neko:firefox" +MEM_USE="2048m" +NEKO_AUDIO_BITRATE=196 +NEKO_AUDIO_CODEC="opus" +NEKO_BIND=8080 +NEKO_BROADCAST_AUTOSTART="false" +NEKO_BROADCAST_PIPELINE="" +NEKO_BROADCAST_URL="" +NEKO_CERT="" +NEKO_CONTROL_PROTECTION="false" +NEKO_CORS="" +NEKO_DEVICE="" +NEKO_DISPLAY="" +NEKO_EPR="52000-52100" +NEKO_FILE_TRANSFER_ENABLED="true" +NEKO_FILE_TRANSFER_PATH="/home/neko/Downloads" +NEKO_HWENC="none" +NEKO_ICELITE=1 +NEKO_ICESERVER="" +NEKO_ICESERVERS="" +NEKO_IMPLICIT_CONTROL="false" +NEKO_IPFETCH="" +NEKO_KEY="" +NEKO_LOCKS="" +NEKO_MAX_FPS=0 +NEKO_NAT1TO1="" +NEKO_PASSWORD="neko" +NEKO_PASSWORD_ADMIN="admin" +NEKO_PATH_PREFIX="" +NEKO_PROXY="false" +NEKO_SCREEN="1920x1080@30" +NEKO_STATIC="" +NEKO_VIDEO_BITRATE=3500 +NEKO_VIDEO_CODEC="vp8" +PANEL_APP_PORT_HTTP=40277 diff --git a/apps/neko/latest/data.yml b/apps/neko/latest/data.yml new file mode 100644 index 00000000..7be6c3cc --- /dev/null +++ b/apps/neko/latest/data.yml @@ -0,0 +1,316 @@ +additionalProperties: + formFields: + - default: "m1k1o/neko:firefox" + edit: true + envKey: IMAGE_NAME + labelEn: Image Name + labelZh: 镜像名称 + required: true + type: select + values: + - label: "m1k1o/neko:kde" + value: "m1k1o/neko:kde" + - label: "m1k1o/neko:chromium" + value: "m1k1o/neko:chromium" + - label: "m1k1o/neko:vivaldi" + value: "m1k1o/neko:vivaldi" + - label: "m1k1o/neko:microsoft-edge" + value: "m1k1o/neko:microsoft-edge" + - label: "m1k1o/neko:brave" + value: "m1k1o/neko:brave" + - label: "m1k1o/neko:tor-browser" + value: "m1k1o/neko:tor-browser" + - label: "m1k1o/neko:ungoogled-chromium" + value: "m1k1o/neko:ungoogled-chromium" + - label: "m1k1o/neko:google-chrome" + value: "m1k1o/neko:google-chrome" + - label: "m1k1o/neko:firefox" + value: "m1k1o/neko:firefox" + - label: "m1k1o/neko:vlc" + value: "m1k1o/neko:vlc" + - label: "m1k1o/neko:xfce" + value: "m1k1o/neko:xfce" + - label: "m1k1o/neko:base" + value: "m1k1o/neko:base" + - label: "m1k1o/neko:opera" + value: "m1k1o/neko:opera" + - label: "m1k1o/neko:vncviewer" + value: "m1k1o/neko:vncviewer" + - label: "m1k1o/neko:arm-firefox" + value: "m1k1o/neko:arm-firefox" + - label: "m1k1o/neko:arm-chromium" + value: "m1k1o/neko:arm-chromium" + - label: "m1k1o/neko:arm-base" + value: "m1k1o/neko:arm-base" + - default: "40277" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "1920x1080@30" + edit: true + envKey: NEKO_SCREEN + labelEn: Screen Resolution + labelZh: 屏幕分辨率 + required: true + type: text + - default: "neko" + edit: true + envKey: NEKO_PASSWORD + labelEn: User Password + labelZh: 用户密码 + required: true + type: password + - default: "admin" + edit: true + envKey: NEKO_PASSWORD_ADMIN + labelEn: Admin Password + labelZh: 管理员密码 + required: true + type: password + - default: "52000-52100" + edit: true + envKey: NEKO_EPR + labelEn: WebRTC UDP Port Range + labelZh: WebRTC UDP 端口范围 + required: true + type: text + - default: "1" + edit: true + envKey: NEKO_ICELITE + labelEn: ICELite Mode + labelZh: ICELite 模式 + required: true + type: number + - default: "2048m" + edit: true + envKey: MEM_USE + labelEn: Shared memory footprint (1gb) + labelZh: 共享内存占用 (1gb) + required: true + type: text + - default: "./data/Downloads" + edit: true + envKey: DOWNLOAD_PATH + labelEn: Download Path (Pay attention to folder permissions) + labelZh: 下载文件路径 (注意文件夹权限) + required: true + type: text + - default: "false" + edit: true + envKey: NEKO_CONTROL_PROTECTION + labelEn: Control Protection + labelZh: 控制保护 + required: true + type: select + values: + - label: "False" + value: "false" + - label: "True" + value: "true" + - default: "false" + edit: true + envKey: NEKO_IMPLICIT_CONTROL + labelEn: Implicit Control + labelZh: 隐式控制 + required: true + type: select + values: + - label: "False" + value: "false" + - label: "True" + value: "true" + - default: "" + edit: true + envKey: NEKO_LOCKS + labelEn: Locks + labelZh: 锁定 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_NAT1TO1 + labelEn: NAT1to1 IP + labelZh: NAT1to1 IP + required: false + type: text + - default: "" + edit: true + envKey: NEKO_IPFETCH + labelEn: IP Fetch URL + labelZh: IP 获取URL + required: false + type: text + - default: "" + edit: true + envKey: NEKO_ICESERVER + labelEn: ICE Server + labelZh: ICE 服务器 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_ICESERVERS + labelEn: ICE Servers + labelZh: ICE 服务器组 + required: false + type: text + - default: "vp8" + edit: true + envKey: NEKO_VIDEO_CODEC + labelEn: Video Codec + labelZh: 视频编解码器 + required: false + type: text + - default: "3500" + edit: true + envKey: NEKO_VIDEO_BITRATE + labelEn: Video Bitrate + labelZh: 视频比特率 + required: false + type: number + - default: "0" + edit: true + envKey: NEKO_MAX_FPS + labelEn: Max FPS + labelZh: 最大FPS + required: false + type: number + - default: "none" + edit: true + envKey: NEKO_HWENC + labelEn: Hardware Encoder + labelZh: 硬件编码器 + required: false + type: text + - default: "opus" + edit: true + envKey: NEKO_AUDIO_CODEC + labelEn: Audio Codec + labelZh: 音频编解码器 + required: false + type: text + - default: 196 + edit: true + envKey: NEKO_AUDIO_BITRATE + labelEn: Audio Bitrate + labelZh: 音频比特率 + required: false + type: number + - default: "" + edit: true + envKey: NEKO_BROADCAST_PIPELINE + labelEn: Broadcast Pipeline + labelZh: 广播管道 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_BROADCAST_URL + labelEn: Broadcast URL + labelZh: 广播URL + required: false + type: text + - default: "false" + edit: true + envKey: NEKO_BROADCAST_AUTOSTART + labelEn: Broadcast Autostart + labelZh: 广播自动启动 + required: true + type: select + values: + - label: "False" + value: "false" + - label: "True" + value: "true" + - default: "8080" + edit: true + envKey: NEKO_BIND + labelEn: Bind Address + labelZh: 绑定地址 + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: NEKO_CERT + labelEn: SSL Certificate Path + labelZh: SSL证书路径 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_KEY + labelEn: SSL Key Path + labelZh: SSL 密钥路径 + required: false + type: text + - default: "false" + edit: true + envKey: NEKO_PROXY + labelEn: Proxy Mode + labelZh: 代理模式 + required: true + type: select + values: + - label: "False" + value: "false" + - label: "True" + value: "true" + - default: "" + edit: true + envKey: NEKO_PATH_PREFIX + labelEn: Path Prefix + labelZh: 路径前缀 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_CORS + labelEn: CORS + labelZh: 跨域资源共享 + required: false + type: text + - default: "true" + edit: true + envKey: NEKO_FILE_TRANSFER_ENABLED + labelEn: File Transfer Enabled + labelZh: 文件传输已启用 + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" + - default: "/home/neko/Downloads" + disabled: true + envKey: NEKO_FILE_TRANSFER_PATH + labelEn: File Transfer Path + labelZh: 文件传输路径 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_DISPLAY + labelEn: Display + labelZh: 显示 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_DEVICE + labelEn: Device + labelZh: 设备 + required: false + type: text + - default: "" + edit: true + envKey: NEKO_STATIC + labelEn: Static Files Path + labelZh: 静态文件路径 + required: false + type: text diff --git a/apps/neko/latest/data/Downloads/.gitkeep b/apps/neko/latest/data/Downloads/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/neko/latest/docker-compose.yml b/apps/neko/latest/docker-compose.yml new file mode 100644 index 00000000..b8877fed --- /dev/null +++ b/apps/neko/latest/docker-compose.yml @@ -0,0 +1,52 @@ +services: + neko: + image: ${IMAGE_NAME} + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + shm_size: "${MEM_USE}" + ports: + - "${PANEL_APP_PORT_HTTP}:${NEKO_BIND}" + - "${NEKO_EPR}:${NEKO_EPR}/udp" + volumes: + - "${DOWNLOAD_PATH}:${NEKO_FILE_TRANSFER_PATH}" + environment: + - NEKO_SCREEN=${NEKO_SCREEN} + - NEKO_PASSWORD=${NEKO_PASSWORD} + - NEKO_PASSWORD_ADMIN=${NEKO_PASSWORD_ADMIN} + - NEKO_EPR=${NEKO_EPR} + - NEKO_ICELITE=${NEKO_ICELITE} + - NEKO_CONTROL_PROTECTION=${NEKO_CONTROL_PROTECTION} + - NEKO_IMPLICIT_CONTROL=${NEKO_IMPLICIT_CONTROL} + - NEKO_LOCKS=${NEKO_LOCKS} + - NEKO_NAT1TO1=${NEKO_NAT1TO1} + - NEKO_IPFETCH=${NEKO_IPFETCH} + - NEKO_ICESERVER=${NEKO_ICESERVER} + - NEKO_ICESERVERS=${NEKO_ICESERVERS} + - NEKO_VIDEO_CODEC=${NEKO_VIDEO_CODEC} + - NEKO_VIDEO_BITRATE=${NEKO_VIDEO_BITRATE} + - NEKO_MAX_FPS=${NEKO_MAX_FPS} + - NEKO_HWENC=${NEKO_HWENC} + - NEKO_AUDIO_CODEC=${NEKO_AUDIO_CODEC} + - NEKO_AUDIO_BITRATE=${NEKO_AUDIO_BITRATE} + - NEKO_BROADCAST_PIPELINE=${NEKO_BROADCAST_PIPELINE} + - NEKO_BROADCAST_URL=${NEKO_BROADCAST_URL} + - NEKO_BROADCAST_AUTOSTART=${NEKO_BROADCAST_AUTOSTART} + - NEKO_BIND=:${NEKO_BIND} + - NEKO_CERT=${NEKO_CERT} + - NEKO_KEY=${NEKO_KEY} + - NEKO_PROXY=${NEKO_PROXY} + - NEKO_PATH_PREFIX=${NEKO_PATH_PREFIX} + - NEKO_CORS=${NEKO_CORS} + - NEKO_FILE_TRANSFER_ENABLED=${NEKO_FILE_TRANSFER_ENABLED} + - NEKO_FILE_TRANSFER_PATH=${NEKO_FILE_TRANSFER_PATH} + - NEKO_DISPLAY=${NEKO_DISPLAY} + - NEKO_DEVICE=${NEKO_DEVICE} + - NEKO_STATIC=${NEKO_STATIC} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/neko/latest/scripts/init.sh b/apps/neko/latest/scripts/init.sh new file mode 100644 index 00000000..4e811c86 --- /dev/null +++ b/apps/neko/latest/scripts/init.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +chown -R 1000:1000 data \ No newline at end of file diff --git a/apps/neko/logo.png b/apps/neko/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e03ffda3af84bf6b2096f0d5f333b3a6340bf2f6 GIT binary patch literal 2796 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