From bf8327319e5156d564c4826b388c4bf7ff906be3 Mon Sep 17 00:00:00 2001 From: okxlin Date: Thu, 7 Nov 2024 19:56:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0upsnap=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/upsnap/4.3/.env.sample | 12 ++++ apps/upsnap/4.3/data.yml | 85 ++++++++++++++++++++++++++ apps/upsnap/4.3/docker-compose.yml | 24 ++++++++ apps/upsnap/README.md | 15 +++++ apps/upsnap/data.yml | 19 ++++++ apps/upsnap/latest/.env.sample | 12 ++++ apps/upsnap/latest/data.yml | 85 ++++++++++++++++++++++++++ apps/upsnap/latest/docker-compose.yml | 24 ++++++++ apps/upsnap/logo.png | Bin 0 -> 5765 bytes 9 files changed, 276 insertions(+) create mode 100644 apps/upsnap/4.3/.env.sample create mode 100644 apps/upsnap/4.3/data.yml create mode 100644 apps/upsnap/4.3/docker-compose.yml create mode 100644 apps/upsnap/README.md create mode 100644 apps/upsnap/data.yml create mode 100644 apps/upsnap/latest/.env.sample create mode 100644 apps/upsnap/latest/data.yml create mode 100644 apps/upsnap/latest/docker-compose.yml create mode 100644 apps/upsnap/logo.png diff --git a/apps/upsnap/4.3/.env.sample b/apps/upsnap/4.3/.env.sample new file mode 100644 index 00000000..4b8d103d --- /dev/null +++ b/apps/upsnap/4.3/.env.sample @@ -0,0 +1,12 @@ +CONTAINER_NAME="upsnap" +DATA_PATH="./data" +DNS_SERVER_1="119.29.29.29" +DNS_SERVER_2="223.5.5.5" +LISTEN_ADDR="0.0.0.0" +PANEL_APP_PORT_HTTP=40318 +TIME_ZONE="Asia/Shanghai" +UPSNAP_INTERVAL="@every 10s" +UPSNAP_PING_PRIVILEGED="true" +UPSNAP_SCAN_RANGE="192.168.1.0/24" +UPSNAP_SCAN_TIMEOUT="500ms" +UPSNAP_WEBSITE_TITLE="Upsnap Dashboard" diff --git a/apps/upsnap/4.3/data.yml b/apps/upsnap/4.3/data.yml new file mode 100644 index 00000000..a01c48d5 --- /dev/null +++ b/apps/upsnap/4.3/data.yml @@ -0,0 +1,85 @@ +additionalProperties: + formFields: + - default: "40318" + disabled: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "0.0.0.0" + edit: true + envKey: LISTEN_ADDR + labelEn: Listening address + labelZh: 监听地址 + required: true + type: text + - default: "./data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: "@every 10s" + edit: true + envKey: UPSNAP_INTERVAL + labelEn: Scan Interval + labelZh: 扫描间隔 + required: true + type: text + - default: "192.168.1.0/24" + edit: true + envKey: UPSNAP_SCAN_RANGE + labelEn: Scan Range + labelZh: 扫描网段范围 + required: true + type: text + - default: "500ms" + edit: true + envKey: UPSNAP_SCAN_TIMEOUT + labelEn: Scan Timeout + labelZh: 扫描超时 + required: true + type: text + - default: "true" + edit: true + envKey: UPSNAP_PING_PRIVILEGED + labelEn: Ping Privileged + labelZh: 使用特权权限进行 Ping + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" + - default: "Upsnap Dashboard" + edit: true + envKey: UPSNAP_WEBSITE_TITLE + labelEn: Website Title + labelZh: 网站标题 + required: true + type: text + - default: "119.29.29.29" + edit: true + envKey: DNS_SERVER_1 + labelEn: DNS Server 1 + labelZh: DNS 服务器 1 + required: true + type: text + - default: "223.5.5.5" + edit: true + envKey: DNS_SERVER_2 + labelEn: DNS Server 2 + labelZh: DNS 服务器 2 + required: true + type: text diff --git a/apps/upsnap/4.3/docker-compose.yml b/apps/upsnap/4.3/docker-compose.yml new file mode 100644 index 00000000..bb0504b6 --- /dev/null +++ b/apps/upsnap/4.3/docker-compose.yml @@ -0,0 +1,24 @@ +services: + upsnap: + image: "seriousm4x/upsnap:4.3" + container_name: ${CONTAINER_NAME} + network_mode: host + restart: always + volumes: + - ${DATA_PATH}:/app/pb_data + environment: + - TZ=${TIME_ZONE} + - UPSNAP_INTERVAL=${UPSNAP_INTERVAL} + - UPSNAP_SCAN_RANGE=${UPSNAP_SCAN_RANGE} + - UPSNAP_SCAN_TIMEOUT=${UPSNAP_SCAN_TIMEOUT} + - UPSNAP_PING_PRIVILEGED=${UPSNAP_PING_PRIVILEGED} + - UPSNAP_WEBSITE_TITLE=${UPSNAP_WEBSITE_TITLE} + healthcheck: + test: curl -fs "http://localhost:${PANEL_APP_PORT_HTTP}/api/health" || exit 1 + interval: 10s + dns: + - ${DNS_SERVER_1} + - ${DNS_SERVER_2} + entrypoint: /bin/sh -c "./upsnap serve --http ${LISTEN_ADDR}:${PANEL_APP_PORT_HTTP}" + labels: + createdBy: "Apps" diff --git a/apps/upsnap/README.md b/apps/upsnap/README.md new file mode 100644 index 00000000..db4e7c18 --- /dev/null +++ b/apps/upsnap/README.md @@ -0,0 +1,15 @@ +# UpSnap + +**UpSnap** 是一款简单的 Wake on LAN Web 应用,使用 SvelteKit、Go 和 PocketBase 编写。 + +## ✨ 功能 + +- 🚀 一键设备唤醒仪表盘 +- ⏰ 通过 Cron 定时事件实现自动化 +- 🔌 自定义端口 Ping +- 🔍 通过网络扫描发现设备(需要 nmap) +- 👤 安全的用户管理 +- 🌐 支持 [多语言](https://github.com/seriousm4x/UpSnap/tree/master/frontend/src/lib/i18n) +- 🎨 多种主题 +- 🐳 支持 [Docker 镜像](https://github.com/seriousm4x/UpSnap/pkgs/container/upsnap),适用于 amd64、arm64、arm/v7、arm/v6 +- 🏠 可自托管 \ No newline at end of file diff --git a/apps/upsnap/data.yml b/apps/upsnap/data.yml new file mode 100644 index 00000000..2e5473b7 --- /dev/null +++ b/apps/upsnap/data.yml @@ -0,0 +1,19 @@ +name: UpSnap +tags: + - 实用工具 +title: 一个简单的唤醒网络应用程序 +description: 一个简单的唤醒网络应用程序 +additionalProperties: + key: upsnap + name: UpSnap + tags: + - Tool + shortDescZh: 一个简单的唤醒网络应用程序 + shortDescEn: A simple wake on lan web app + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/seriousm4x/UpSnap + github: https://github.com/seriousm4x/UpSnap + document: https://github.com/seriousm4x/UpSnap diff --git a/apps/upsnap/latest/.env.sample b/apps/upsnap/latest/.env.sample new file mode 100644 index 00000000..4b8d103d --- /dev/null +++ b/apps/upsnap/latest/.env.sample @@ -0,0 +1,12 @@ +CONTAINER_NAME="upsnap" +DATA_PATH="./data" +DNS_SERVER_1="119.29.29.29" +DNS_SERVER_2="223.5.5.5" +LISTEN_ADDR="0.0.0.0" +PANEL_APP_PORT_HTTP=40318 +TIME_ZONE="Asia/Shanghai" +UPSNAP_INTERVAL="@every 10s" +UPSNAP_PING_PRIVILEGED="true" +UPSNAP_SCAN_RANGE="192.168.1.0/24" +UPSNAP_SCAN_TIMEOUT="500ms" +UPSNAP_WEBSITE_TITLE="Upsnap Dashboard" diff --git a/apps/upsnap/latest/data.yml b/apps/upsnap/latest/data.yml new file mode 100644 index 00000000..a01c48d5 --- /dev/null +++ b/apps/upsnap/latest/data.yml @@ -0,0 +1,85 @@ +additionalProperties: + formFields: + - default: "40318" + disabled: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "0.0.0.0" + edit: true + envKey: LISTEN_ADDR + labelEn: Listening address + labelZh: 监听地址 + required: true + type: text + - default: "./data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: "@every 10s" + edit: true + envKey: UPSNAP_INTERVAL + labelEn: Scan Interval + labelZh: 扫描间隔 + required: true + type: text + - default: "192.168.1.0/24" + edit: true + envKey: UPSNAP_SCAN_RANGE + labelEn: Scan Range + labelZh: 扫描网段范围 + required: true + type: text + - default: "500ms" + edit: true + envKey: UPSNAP_SCAN_TIMEOUT + labelEn: Scan Timeout + labelZh: 扫描超时 + required: true + type: text + - default: "true" + edit: true + envKey: UPSNAP_PING_PRIVILEGED + labelEn: Ping Privileged + labelZh: 使用特权权限进行 Ping + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" + - default: "Upsnap Dashboard" + edit: true + envKey: UPSNAP_WEBSITE_TITLE + labelEn: Website Title + labelZh: 网站标题 + required: true + type: text + - default: "119.29.29.29" + edit: true + envKey: DNS_SERVER_1 + labelEn: DNS Server 1 + labelZh: DNS 服务器 1 + required: true + type: text + - default: "223.5.5.5" + edit: true + envKey: DNS_SERVER_2 + labelEn: DNS Server 2 + labelZh: DNS 服务器 2 + required: true + type: text diff --git a/apps/upsnap/latest/docker-compose.yml b/apps/upsnap/latest/docker-compose.yml new file mode 100644 index 00000000..876031bc --- /dev/null +++ b/apps/upsnap/latest/docker-compose.yml @@ -0,0 +1,24 @@ +services: + upsnap: + image: "seriousm4x/upsnap:latest" + container_name: ${CONTAINER_NAME} + network_mode: host + restart: always + volumes: + - ${DATA_PATH}:/app/pb_data + environment: + - TZ=${TIME_ZONE} + - UPSNAP_INTERVAL=${UPSNAP_INTERVAL} + - UPSNAP_SCAN_RANGE=${UPSNAP_SCAN_RANGE} + - UPSNAP_SCAN_TIMEOUT=${UPSNAP_SCAN_TIMEOUT} + - UPSNAP_PING_PRIVILEGED=${UPSNAP_PING_PRIVILEGED} + - UPSNAP_WEBSITE_TITLE=${UPSNAP_WEBSITE_TITLE} + healthcheck: + test: curl -fs "http://localhost:${PANEL_APP_PORT_HTTP}/api/health" || exit 1 + interval: 10s + dns: + - ${DNS_SERVER_1} + - ${DNS_SERVER_2} + entrypoint: /bin/sh -c "./upsnap serve --http ${LISTEN_ADDR}:${PANEL_APP_PORT_HTTP}" + labels: + createdBy: "Apps" diff --git a/apps/upsnap/logo.png b/apps/upsnap/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..69aff25213827e788780f525bc1a9041030e85ae GIT binary patch literal 5765 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