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 00000000..e03ffda3 Binary files /dev/null and b/apps/neko/logo.png differ