From b282c846fe29d688fe0d23f31c98243ffc2cfa0a Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Wed, 25 Jun 2025 13:21:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20NodePass?= =?UTF-8?q?Dash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/README.md | 1 + README.md | 1 + apps/nodepassdash/2.0.2/data.yml | 33 +++++++++++++++ apps/nodepassdash/2.0.2/docker-compose.yml | 23 +++++++++++ apps/nodepassdash/2.0.2/envs/default.env | 2 + apps/nodepassdash/2.0.2/envs/global.env | 2 + apps/nodepassdash/2.0.2/scripts/init.sh | 17 ++++++++ apps/nodepassdash/2.0.2/scripts/uninstall.sh | 10 +++++ apps/nodepassdash/2.0.2/scripts/upgrade.sh | 17 ++++++++ apps/nodepassdash/README.md | 41 +++++++++++++++++++ apps/nodepassdash/data.yml | 14 +++++++ apps/nodepassdash/logo.png | Bin 0 -> 16486 bytes apps/nodepassdash/logo.svg | 12 ++++++ 13 files changed, 173 insertions(+) create mode 100644 apps/nodepassdash/2.0.2/data.yml create mode 100644 apps/nodepassdash/2.0.2/docker-compose.yml create mode 100644 apps/nodepassdash/2.0.2/envs/default.env create mode 100644 apps/nodepassdash/2.0.2/envs/global.env create mode 100644 apps/nodepassdash/2.0.2/scripts/init.sh create mode 100644 apps/nodepassdash/2.0.2/scripts/uninstall.sh create mode 100644 apps/nodepassdash/2.0.2/scripts/upgrade.sh create mode 100644 apps/nodepassdash/README.md create mode 100644 apps/nodepassdash/data.yml create mode 100644 apps/nodepassdash/logo.png create mode 100644 apps/nodepassdash/logo.svg diff --git a/.github/README.md b/.github/README.md index ba063d12a..f3ca1b0c1 100644 --- a/.github/README.md +++ b/.github/README.md @@ -121,6 +121,7 @@ | 🟢 | | Nginx UI | https://nginxui.com/ | 全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置 | | | 🟢 | | NocoDB | https://nocodb.com/ | 无代码数据库平台 | | | 🟢 | | NodeBB | https://nodebb.org/ | 一个更适合现代网络的社会平台 | | +| 🟢 | | NodePassDash | https://github.com/NodePassProject/NodePassDash/ | 现代化的 NodePass 管理界面 | | | 🟢 | | Ollama | https://ollama.com/ | 一站式大模型部署平台 | | | 🟢 | | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | | | 🟢 | | Open Webui | https://openwebui.com/ | 用户友好的 AI 界面 | | diff --git a/README.md b/README.md index e24ca1022..16f58be87 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ | 🟢 | | Nginx UI | https://nginxui.com/ | 全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置 | | | 🟢 | | NocoDB | https://nocodb.com/ | 无代码数据库平台 | | | 🟢 | | NodeBB | https://nodebb.org/ | 一个更适合现代网络的社会平台 | | +| 🟢 | | NodePassDash | https://github.com/NodePassProject/NodePassDash/ | 现代化的 NodePass 管理界面 | | | 🟢 | | Ollama | https://ollama.com/ | 一站式大模型部署平台 | | | 🟢 | | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | | | 🟢 | | Open Webui | https://openwebui.com/ | 用户友好的 AI 界面 | | diff --git a/apps/nodepassdash/2.0.2/data.yml b/apps/nodepassdash/2.0.2/data.yml new file mode 100644 index 000000000..ad4bc5870 --- /dev/null +++ b/apps/nodepassdash/2.0.2/data.yml @@ -0,0 +1,33 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Network mode + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: "/home/nodepassdash" + edit: true + envKey: NODEPASSDASH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/apps/nodepassdash/2.0.2/docker-compose.yml b/apps/nodepassdash/2.0.2/docker-compose.yml new file mode 100644 index 000000000..7c8f507a0 --- /dev/null +++ b/apps/nodepassdash/2.0.2/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true + +services: + nodepassdash: + image: ghcr.io/nodepassproject/nodepassdash:2.0.2 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${NODEPASSDASH_ROOT_PATH}/logs:/app/logs + - ${NODEPASSDASH_ROOT_PATH}/public:/app/public + environment: + - TZ=Asia/Shanghai + - PORT=${PANEL_APP_PORT_HTTP} diff --git a/apps/nodepassdash/2.0.2/envs/default.env b/apps/nodepassdash/2.0.2/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/nodepassdash/2.0.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/nodepassdash/2.0.2/envs/global.env b/apps/nodepassdash/2.0.2/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/nodepassdash/2.0.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/nodepassdash/2.0.2/scripts/init.sh b/apps/nodepassdash/2.0.2/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/nodepassdash/2.0.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/nodepassdash/2.0.2/scripts/uninstall.sh b/apps/nodepassdash/2.0.2/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/nodepassdash/2.0.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/nodepassdash/2.0.2/scripts/upgrade.sh b/apps/nodepassdash/2.0.2/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/nodepassdash/2.0.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/nodepassdash/README.md b/apps/nodepassdash/README.md new file mode 100644 index 000000000..7d91e87f3 --- /dev/null +++ b/apps/nodepassdash/README.md @@ -0,0 +1,41 @@ +# NodePassDash + +NodePassDash是一个现代化的 NodePass 管理界面,基于 Go 后端 + Next.js 14、HeroUI 和 TypeScript 构建。提供实时隧道监控、流量统计和端点管理功能。 + +![NodePassDash](https://file.lifebus.top/imgs/nodepassdash_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 初始化 + +通过日志获取 + +## 特性 + +🚀 高性能 Go 后端: 完全重构的 Go 后端,性能提升 300%+,内存占用降低 60% + +🎯 实时监控: 通过 Server-Sent Events (SSE) 实现实时隧道状态更新 + +📊 流量统计: 可视化显示隧道流量数据和性能指标 + +🎨 现代UI: 基于 HeroUI 的响应式设计,支持深色/浅色主题 + +📱 移动适配: 完整的移动端响应式布局,支持各种设备访问 + +🐳 容器化: 开箱即用的 Docker 部署方案 + +🔧 命令行工具: 支持密码重置和自定义端口等管理功能 + +## 快捷操作 + +以下命令行均在容器中执行 + +### 密码重置 + +```shell +./nodepassdash --reset-pwd +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/nodepassdash/data.yml b/apps/nodepassdash/data.yml new file mode 100644 index 000000000..4ad377a81 --- /dev/null +++ b/apps/nodepassdash/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: nodepassdash + name: NodePassDash + tags: + - WebSite + - Local + shortDescZh: 现代化的 NodePass 管理界面 + shortDescEn: NodePass Dashboard + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/NodePassProject/NodePassDash/ + github: https://github.com/NodePassProject/NodePassDash/ + document: https://github.com/NodePassProject/NodePassDash/ diff --git a/apps/nodepassdash/logo.png b/apps/nodepassdash/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c0a9a7c04fdc4370ee92857bf02a468107b92e GIT binary patch literal 16486 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 literal 0 HcmV?d00001 diff --git a/apps/nodepassdash/logo.svg b/apps/nodepassdash/logo.svg new file mode 100644 index 000000000..af2372bf8 --- /dev/null +++ b/apps/nodepassdash/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + +