From 2a0fb97f5d73d4db11a6b459b8e4dbe7e09cc2a4 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Fri, 18 Oct 2024 14:00:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20Nginx=20?= =?UTF-8?q?UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/README.md | 3 +- README.md | 3 +- apps/nginx-ui/2.0.0/data.yml | 86 +++++++++++++++++++++++ apps/nginx-ui/2.0.0/docker-compose.yml | 33 +++++++++ apps/nginx-ui/2.0.0/scripts/init.sh | 15 ++++ apps/nginx-ui/2.0.0/scripts/uninstall.sh | 10 +++ apps/nginx-ui/2.0.0/scripts/upgrade.sh | 15 ++++ apps/nginx-ui/README.md | 33 +++++++++ apps/nginx-ui/data.yml | 15 ++++ apps/nginx-ui/logo.png | Bin 0 -> 15618 bytes script/update_app_config.ps1 | 54 +++++++------- 11 files changed, 238 insertions(+), 29 deletions(-) create mode 100644 apps/nginx-ui/2.0.0/data.yml create mode 100644 apps/nginx-ui/2.0.0/docker-compose.yml create mode 100644 apps/nginx-ui/2.0.0/scripts/init.sh create mode 100644 apps/nginx-ui/2.0.0/scripts/uninstall.sh create mode 100644 apps/nginx-ui/2.0.0/scripts/upgrade.sh create mode 100644 apps/nginx-ui/README.md create mode 100644 apps/nginx-ui/data.yml create mode 100644 apps/nginx-ui/logo.png diff --git a/.github/README.md b/.github/README.md index a1861595..e5f2ce24 100644 --- a/.github/README.md +++ b/.github/README.md @@ -121,7 +121,8 @@ | 🟢 | | MariaDB | https://mariadb.org/ | 【MySQL分支】创新的开源数据库 | MySQL | | 🟢 | | Percona | https://www.percona.com/ | 【MySQL分支】关系数据库管理系统 | MySQL | | 🟢 | | Nacos | https://nacos.io/ | 动态服务发现、配置管理和服务管理平台 | | -| 🟢 | | NeZha | https://nezha.wiki/ | 【哪吒监控】开源、轻量、易用的服务器监控、运维工具 | | +| 🟢 | | 哪吒监控 | https://nezha.wiki/ | 【哪吒监控】开源、轻量、易用的服务器监控、运维工具 | | +| 🟢 | | Nginx UI | https://nginxui.com/ | 全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置 | | | 🟢 | | NocoDB | https://nocodb.com/ | 无代码数据库平台 | | | 🟢 | | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | | | 🟢 | | OutLine | https://www.getoutline.com/ | 快速、协作的团队知识库 | | diff --git a/README.md b/README.md index ff88b88c..b3083425 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,8 @@ | 🟢 | | MariaDB | https://mariadb.org/ | 【MySQL分支】创新的开源数据库 | MySQL | | 🟢 | | Percona | https://www.percona.com/ | 【MySQL分支】关系数据库管理系统 | MySQL | | 🟢 | | Nacos | https://nacos.io/ | 动态服务发现、配置管理和服务管理平台 | | -| 🟢 | | NeZha | https://nezha.wiki/ | 【哪吒监控】开源、轻量、易用的服务器监控、运维工具 | | +| 🟢 | | 哪吒监控 | https://nezha.wiki/ | 【哪吒监控】开源、轻量、易用的服务器监控、运维工具 | | +| 🟢 | | Nginx UI | https://nginxui.com/ | 全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置 | | | 🟢 | | NocoDB | https://nocodb.com/ | 无代码数据库平台 | | | 🟢 | | OneDev | https://onedev.io/ | DevOps 平台、带有 CI/CD、看板和软件包的 Git 服务器 | | | 🟢 | | OutLine | https://www.getoutline.com/ | 快速、协作的团队知识库 | | diff --git a/apps/nginx-ui/2.0.0/data.yml b/apps/nginx-ui/2.0.0/data.yml new file mode 100644 index 00000000..93211472 --- /dev/null +++ b/apps/nginx-ui/2.0.0/data.yml @@ -0,0 +1,86 @@ +additionalProperties: + formFields: + - default: "/home/nginx-ui" + edit: true + envKey: NGINX_UI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Web UI 端口 + labelEn: Web UI Port + required: true + rule: paramPort + type: number + - default: 443 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: Web UI 端口 (HTTPS) + labelEn: Web UI Port (HTTPS) + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ADMINMAIL + labelZh: 管理员邮箱 + labelEn: Admin Email + required: true + type: text + - default: "" + edit: true + envKey: ADMINPASS + labelZh: 管理员密码 + labelEn: Admin Password + required: true + type: password + - default: "" + edit: true + envKey: NGINX_UI_SERVER_JWT_SECRET + labelZh: JWT 密钥盐 + labelEn: JWT Secret Salt + required: true + type: password + - default: "https://mirror.ghproxy.com/" + edit: true + envKey: NGINX_UI_SERVER_GITHUB_PROXY + labelZh: GitHub 代理地址 + labelEn: GitHub Proxy + required: false + type: text + - default: "Nginx UI" + edit: true + envKey: NGINX_UI_SERVER_NAME + labelZh: Nginx UI 显示标题 + labelEn: Nginx UI Display Title + required: true + type: text + - default: "false" + edit: true + envKey: NGINX_UI_SERVER_SKIP_INSTALLATION + labelZh: 跳过安装模式 + labelEn: Skip Installation Mode + required: true + type: select + values: + - label: 跳过 + value: "true" + - label: 不跳过 + value: "false" + - default: "" + edit: true + envKey: NGINX_UI_PREDEFINED_USER_NAME + labelZh: 预设用户名 (跳过安装模式) + labelEn: Predefined Username + required: false + type: text + - default: "" + edit: true + envKey: NGINX_UI_PREDEFINED_USER_PASSWORD + labelZh: 预设密码 (跳过安装模式) + labelEn: Predefined Password + required: false + type: text diff --git a/apps/nginx-ui/2.0.0/docker-compose.yml b/apps/nginx-ui/2.0.0/docker-compose.yml new file mode 100644 index 00000000..168148c6 --- /dev/null +++ b/apps/nginx-ui/2.0.0/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true + +services: + nginx-ui: + image: uozi/nginx-ui:v2.0.0-beta.36 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + stdin_open: true + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + volumes: + - ${NGINX_UI_ROOT_PATH}/nginx:/etc/nginx + - ${NGINX_UI_ROOT_PATH}/nginx-ui:/etc/nginx-ui + - ${NGINX_UI_ROOT_PATH}/www:/var/www + environment: + - TZ=Asia/Shanghai + - NGINX_UI_SERVER_HTTP_HOST=0.0.0.0 + - NGINX_UI_SERVER_HTTP_PORT=9000 + - NGINX_UI_SERVER_RUN_MODE=release + - NGINX_UI_SERVER_HTTP_CHALLENGE_PORT=9180 + - NGINX_UI_SERVER_DATABASE=database + - NGINX_UI_SERVER_START_CMD=login + - NGINX_UI_SERVER_START_CMD=database + - NGINX_UI_SERVER_PAGE_SIZE=10 + - NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL=7 + - NGINX_UI_SERVER_SKIP_INSTALLATION=false diff --git a/apps/nginx-ui/2.0.0/scripts/init.sh b/apps/nginx-ui/2.0.0/scripts/init.sh new file mode 100644 index 00000000..77b84912 --- /dev/null +++ b/apps/nginx-ui/2.0.0/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/nginx-ui/2.0.0/scripts/uninstall.sh b/apps/nginx-ui/2.0.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/apps/nginx-ui/2.0.0/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/nginx-ui/2.0.0/scripts/upgrade.sh b/apps/nginx-ui/2.0.0/scripts/upgrade.sh new file mode 100644 index 00000000..77b84912 --- /dev/null +++ b/apps/nginx-ui/2.0.0/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/nginx-ui/README.md b/apps/nginx-ui/README.md new file mode 100644 index 00000000..d8aeb2d2 --- /dev/null +++ b/apps/nginx-ui/README.md @@ -0,0 +1,33 @@ +# Nginx UI + +Nginx 网络管理界面 + +![Nginx UI](https://file.lifebus.top/imgs/kimai_cover.png) + +Kimai 是一个基于网络的多用户时间追踪应用。对每个人都很棒:自由职业者、公司、组织 - 每个人都可以追踪时间、生成报告、创建发票并做更多事情。 + +![](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) + +## 简介 + +Nginx UI 是一个全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置。它提供实时服务器统计数据、ChatGPT +助手、一键部署、Let's Encrypt 证书的自动续签以及用户友好的网站配置编辑工具。此外,Nginx UI 还提供了在线访问 Nginx +日志、配置文件的自动测试和重载、网络终端、深色模式和自适应网页设计等功能。Nginx UI 采用 Go 和 Vue 构建,确保在管理 Nginx +服务器时提供无缝高效的体验。 + +## 特性 + ++ 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 ++ 在线 ChatGPT 助理 ++ 一键申请和自动续签 Let's encrypt 证书 ++ 在线编辑 Nginx 配置文件,编辑器支持 Nginx 配置语法高亮 ++ 在线查看 Nginx 日志 ++ 使用 Go 和 Vue 开发,发行版本为单个可执行的二进制文件 ++ 保存配置后自动测试配置文件并重载 Nginx ++ 基于网页浏览器的高级命令行终端 ++ 支持深色模式 ++ 自适应网页设计 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/nginx-ui/data.yml b/apps/nginx-ui/data.yml new file mode 100644 index 00000000..44482333 --- /dev/null +++ b/apps/nginx-ui/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: nginx-ui + name: Nginx UI + tags: + - WebSite + - Middleware + - Local + shortDescZh: 全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置 + shortDescEn: A new Nginx network management interface designed to simplify the management and configuration of Nginx servers + type: website + crossVersionUpdate: true + limit: 0 + website: https://nginxui.com/ + github: https://github.com/0xJacky/nginx-ui/ + document: https://nginxui.com/zh_CN/guide/about.html diff --git a/apps/nginx-ui/logo.png b/apps/nginx-ui/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0a8436ce611cfc25ea2fc9760f4e58e64e6e73 GIT binary patch literal 15618 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 literal 0 KcmV+b0RR6000031 diff --git a/script/update_app_config.ps1 b/script/update_app_config.ps1 index c2dc8927..0a140d14 100644 --- a/script/update_app_config.ps1 +++ b/script/update_app_config.ps1 @@ -1,28 +1,28 @@ -$appsDir = "C:\Users\ms\Documents\JetBrains\IdeaProjects\appstore\apps" -# 遍历 apps 目录中的每个子目录 -Get-ChildItem -Path $appsDir -Directory | ForEach-Object { - $appDir = $_.FullName - $dataFile = Join-Path $appDir "data.yml" - - # 检查 data.yml 文件是否存在 - if (Test-Path $dataFile) { - # 读取文件内容,指定编码为 UTF-8 - $lines = Get-Content $dataFile -Encoding UTF8 - - # 查找 "additionalProperties:" 行的索引 - $index = $lines.IndexOf("additionalProperties:") - - if ($index -ne -1) { - # 只保留从 "additionalProperties:" 行开始的内容 - $newContent = $lines[$index..($lines.Length - 1)] - - # 将新的内容写回到文件中,指定编码为 UTF-8 - Set-Content -Path $dataFile -Value $newContent -Encoding UTF8 - Write-Host "处理完成: $dataFile" - } else { - Write-Host "未找到 'additionalProperties:' 行: $dataFile" - } - } else { - Write-Host "文件不存在: $dataFile" - } +$appsDir = "C:\Users\ms\Documents\JetBrains\IdeaProjects\appstore\apps" +# 遍历 apps 目录中的每个子目录 +Get-ChildItem -Path $appsDir -Directory | ForEach-Object { + $appDir = $_.FullName + $dataFile = Join-Path $appDir "data.yml" + + # 检查 data.yml 文件是否存在 + if (Test-Path $dataFile) { + # 读取文件内容,指定编码为 UTF-8 + $lines = Get-Content $dataFile -Encoding UTF8 + + # 查找 "additionalProperties:" 行的索引 + $index = $lines.IndexOf("additionalProperties:") + + if ($index -ne -1) { + # 只保留从 "additionalProperties:" 行开始的内容 + $newContent = $lines[$index..($lines.Length - 1)] + + # 将新的内容写回到文件中,指定编码为 UTF-8 + Set-Content -Path $dataFile -Value $newContent -Encoding UTF8 + Write-Host "处理完成: $dataFile" + } else { + Write-Host "未找到 'additionalProperties:' 行: $dataFile" + } + } else { + Write-Host "文件不存在: $dataFile" + } } \ No newline at end of file