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 a1861595d..e5f2ce240 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 ff88b88cb..b30834251 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 000000000..93211472e --- /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 000000000..168148c6f --- /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 000000000..77b849120 --- /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 000000000..c86c4fbca --- /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 000000000..77b849120 --- /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 000000000..d8aeb2d24 --- /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 000000000..444823333 --- /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 HcmV?d00001 diff --git a/script/update_app_config.ps1 b/script/update_app_config.ps1 index c2dc8927c..0a140d142 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