From 8dc1aa01540197eb80535742b83c859176e36e3f Mon Sep 17 00:00:00 2001 From: hi2hi Date: Fri, 11 Apr 2025 18:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=84=20update=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/images/nazhua-detail-mobile.webp | Bin 0 -> 23064 bytes doc/deploy.md | 84 ++++++++++++-------- doc/public-note.md | 75 ++++++++++-------- doc/update.md | 42 ++++++---- readme.md | 95 +++++++++++++---------- 5 files changed, 176 insertions(+), 120 deletions(-) create mode 100644 .github/images/nazhua-detail-mobile.webp diff --git a/.github/images/nazhua-detail-mobile.webp b/.github/images/nazhua-detail-mobile.webp new file mode 100644 index 0000000000000000000000000000000000000000..679e6f15eb9e47bcc97bf390ca1f6e6a44ab998f GIT binary patch literal 23064 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 literal 0 HcmV?d00001 diff --git a/doc/deploy.md b/doc/deploy.md index f5e0e90..62f596d 100644 --- a/doc/deploy.md +++ b/doc/deploy.md @@ -1,15 +1,23 @@ +# 🚀 部署指南 -## 部署 -> Nazhua主题是一个纯前端项目,可以部署在纯静态服务器上; -> v0需要解决`/api/v1/monitor/${id}`监控数据、`/ws`WS服务和`/`主页的跨域访问。 -> v1需要解决`/api/xxx`等数据接口、`/api/v1/ws/server`WS服务的跨域访问。 -> 简单的处理方法就是采用nginx或caddy反代请求,以此解决跨域问题。 +## 部署概述 +> Nazhua主题是纯前端项目,可部署在静态服务器上 +> +> **跨域解决注重点**: +> - **V0版本**:需解决 `/api/v1/monitor/${id}`、`/ws` 和 `/` 的跨域 +> - **V1版本**:需解决 `/api/xxx` 和 `/api/v1/ws/server` 的跨域 +> +> 推荐使用 Nginx 或 Caddy 反向代理解决跨域问题 -### Docker Compose + Cloudflare Tunnels部署 -**请关注配置文件备注中的提示内容** -`favicon.ico`可以映射进去,也可以通过配置文件设置,默认不存在该文件 -`config.js`需要单独映射进去,可以通过[Nazhua配置生成器](https://hi2shark.github.io/nazhua-generator/)直接生成并下载 -`style.css`用于自定义css样式,如果不出现页面结构大规模变更的情况下,我会尽可能保证选择器不变 +## 🐳 Docker Compose + Cloudflare Tunnels 部署 +此方案便于后续更新,只需通过 `docker compose pull` 命令即可更新主题(镜像)。 + +### 配置说明 +- **favicon.ico**:可通过挂载或配置文件指定(默认无) +- **config.js**:需单独挂载,建议使用[配置生成器](https://hi2shark.github.io/nazhua-generator/)生成 +- **style.css**:用于自定义CSS样式,尽量保持选择器稳定 + +### 部署示例 ```yaml services: nazhua: @@ -23,20 +31,25 @@ services: # - ./style.css:/home/wwwroot/html/style.css:ro # 自定义样式文件 environment: - DOMAIN=_ # 监听的域名,默认为_(监听所有) - - NEZHA=http://nezha-dashboard.example.com/ # 可以被反代nezha主页地址 + - NEZHA=http://nezha-dashboard.example.com/ # 可以被反向代理nezha主页地址 restart: unless-stopped ``` -Tips: 建议通过docker-compose部署nazhua与nezha,然后通过cloudflare的tunnels向外提供服务,也可以不用自己配置https证书。 -Tips: 如果不想加载完整的内置库,可以使用cdn引用镜像 -> 例如:`ghcr.io/hi2shark/nazhua:latest`替换为`ghcr.io/hi2shark/nazhua:cdn` ------ -> 如果你想隐藏原面板,只暴露nazhua出来,你可以用Zero Trust的Tunnels; -> 三个容器:Tunnels、nezha-dashboard、nazhua -> nazhua用docker内的地址访问nezha-dashboard,然后Tunnels绑定nazhua给公开访问的域名 -> Tunnels绑定nezha-dashboard到私密域名,需要邮箱|IP等匹配的才能访问 ------ -### 单独使用NGINX的配置示例(Caddy可以通过这个配置进行AI推理生成) +### 💡 小贴士 +- 推荐使用 docker-compose 部署 Nazhua 与 Nezha Dashboard,并通过 Cloudflare Tunnels 对外提供服务 +- 如需减少内置库体积,可使用 CDN 版本镜像:`ghcr.io/hi2shark/nazhua:cdn` +- 隐藏原面板方案:使用 Zero Trust Tunnels 部署三个容器 (Tunnels、nezha-dashboard、nazhua) + - nazhua 通过 docker 内部地址访问 nezha-dashboard + - Tunnels 绑定 nazhua 到公开域名 + - Tunnels 绑定 nezha-dashboard 到需要邮箱/IP验证的私密域名 + +## 🌐 自定义Web服务部署 + +### 安装步骤 +1. 在 [Releases页面](https://github.com/hi2shark/nazhua/releases) 下载最新版 `v{Nazhua版本号}-all.zip` +2. 解压后将 `dist` 目录文件上传到Web服务目录 + +### Nginx配置示例 ```nginx map $http_upgrade $connection_upgrade { default upgrade; @@ -92,10 +105,16 @@ server { } } ``` +---- +**Tips:** V0环境下若想与面板使用同域名,下载 `v0-nazhua.zip` 并将文件上传至面板目录下的 `nazhua` 文件夹 + +---- + +## ⚙️ 配置文件 ### config.js 配置说明 -`config.js`建议通过[Nazhua配置生成器](https://hi2shark.github.io/nazhua-generator/)生成,然后通过docker的volumes映射到容器内。 -例如:(*参考内容在文档上不一定是最新,具体参考public/config.js*) +建议使用 [Nazhua 配置生成器](https://hi2shark.github.io/nazhua-generator/) 生成配置文件。 + ```javascript window.$$nazhuaConfig = { title: '哪吒监控', // 网站标题 @@ -136,7 +155,7 @@ window.$$nazhuaConfig = { monitorChartTypeToggle: true, // 监控图表类型切换 filterGPUKeywords: ['Virtual Display'], // 如果GPU名称中包含这些关键字,则过滤掉 customCodeMap: {}, // 自定义的地图点信息 - nezhaVersion: 'v1', // 哪吒版本 + nezhaVersion: 'v1', // 哪吒版本 不填写则尝试自动识别 apiMonitorPath: '/api/v1/monitor/{id}', wsPath: '/ws', nezhaPath: '/nezha/', @@ -152,10 +171,10 @@ window.$$nazhuaConfig = { customFavicon: '', // 自定义favicon, 填写完整的url地址 }; ``` -可以通过[Nazhua配置生成器](https://hi2shark.github.io/nazhua-generator/)快速生成config.js配置文件 -通过修改根目录下的`style.css`文件来自定义样式 -例如: +### 🎨 自定义样式 +通过修改根目录下的 `style.css` 文件实现样式定制: + ```css :root { /* 修改颜色 */ @@ -166,18 +185,15 @@ window.$$nazhuaConfig = { /* 购买链接的主要颜色 */ --list-item-buy-link-color: #f00; } -``` -自定义背景图的实例: -```css + +/* 自定义背景图示例 */ :root { - /* 图片太亮了,需要图片前面的前景色(也是背景色)更暗一些 */ + /* 图片太亮时,增加背景遮罩透明度 */ --layout-main-bg-color: rgba(0, 0, 0, 0.75); } -/* 自定义背景图 */ .layout-group .layout-bg { - /* 添加important强制背景图替换,此处的替换设计不是很优雅,后期会改进 */ + /* 添加!important强制背景图替换 */ background: url(./bg.jpg) no-repeat 50% 50% !important; background-size: cover; } ``` -`./bg.jpg` 这个是图片地址,可以替换为外链图片;也可以把背景图片放到项目里面去,通常是docker的volumes映射,根据你自己的实际情况来。 diff --git a/doc/public-note.md b/doc/public-note.md index 54cff16..e7a5748 100644 --- a/doc/public-note.md +++ b/doc/public-note.md @@ -1,34 +1,39 @@ -# 公开备注 +# 📝 公开备注配置指南 -## 点阵地图显示节点 -Nazhua采用的点阵地图是一个失真的地图,地图边际与城市位置都不是真实的经纬度坐标,因此无法通过经纬度来定位城市。 -需要在是[Nazhua配置生成器](https://hi2shark.github.io/nazhua-generator/)中,拾取点阵地图上的坐标,然后在`config.js`中配置`customCodeMap`来自定义地图点信息。 -如何指定节点的地理位置? -在哪吒监控后台,给节点的公开备注对象中,添加一个`customData`对象,并指定`location`的代码; -关于都有哪些内置的地理位置代码,需要在[Nazhua配置生成器](https://hi2shark.github.io/nazhua-generator/)中查看。 -示例 +## 🗺️ 点阵地图节点显示 + +### 地图说明 +Nazhua采用的点阵地图是一个并非精准的变形地图,不能使用真实经纬度坐标进行换算定位,因此需要通过自定义坐标来指定位置。 + +### 配置方法 +使用[Nazhua配置生成器](https://hi2shark.github.io/nazhua-generator/)获取内置的点阵地图坐标或者自定义坐标(可以在`config.js`中配置`customCodeMap`添加自定义地图点) +在节点的公开备注对象中设置位置代码: ```json { "customData": { - "location": "HKG" + "location": "HKG" // 位置代码 } } ``` -对于几个我常见的国别位置,添加了默认映射位置,会自动显示在地图上。 -Tips: 中国大陆地区默认在首都:北京(该映射在0.4.6后补充) -Tips: 美国默认在最常买的位置:洛杉矶 -## customData字段说明 -`customData`中还可以添加子对象`slogan`、`orderLink`、`flag`、`buyBtnText`、`buyBtnIcon`字符串; - - `slogan`用于显示节点的标语; - - `orderLink`用于显示购买链接; - - `flag`用于显示自定义国家/地区旗帜; - - `buyBtnText`用于显示购买按钮的文案; - - `buyBtnIcon`用于显示购买按钮的图标; +### 默认位置映射 +部分常见地区已有默认映射: +- 中国大陆默认显示在北京(v0.4.6后添加) +- 美国默认显示在洛杉矶 -`flag`字段在`0.6.4`后支持 -`buyBtnText`和`buyBtnIcon`字段在`0.5.3`后支持 +## 🔧 customData 字段详解 +### 可用字段 +| 字段 | 用途 | 版本支持 | +|------|------|---------| +| `location` | 指定节点地理位置代码 | 全版本 | +| `slogan` | 显示节点标语 | 全版本 | +| `orderLink` | 购买链接地址 | 全版本 | +| `flag` | 自定义国家/地区旗帜 | v0.6.4+ | +| `buyBtnText` | 购买按钮文案 | v0.5.3+ | +| `buyBtnIcon` | 购买按钮图标 | v0.5.3+ | + +### 示例配置 ```json { "customData": { @@ -41,12 +46,18 @@ Tips: 美国默认在最常买的位置:洛杉矶 } } ``` -Tips: 由于配置数据获取的方式特殊,无法正常解析符号`&`,建议在[https://www.bejson.com/enc/urlencode/](https://www.bejson.com/enc/urlencode/)进行编码后,将encodeURIComponent编码内容添加到orderLink中。当然,你也可以通过浏览器的console(控制台),执行`encodeURIComponent('链接内容')`,获取编码后的内容。 -## 对于原版公开备注的支持 +### 💡 链接编码提示 +由于配置数据无法正常解析符号`&`,请使用URL编码: +- 在线工具:[https://www.bejson.com/enc/urlencode/](https://www.bejson.com/enc/urlencode/) +- 浏览器控制台:执行`encodeURIComponent('链接内容')`获取编码后内容 + +## 📊 原版公开备注支持 在哪吒的主题ServerStatus迭代中,nap0o增加了一个公开备注的功能,可以给节点添加额外的展示信息 具体字段定义参考 [https://github.com/nezhahq/nezha/pull/425](https://github.com/nezhahq/nezha/pull/425) -Nazhua对这个支持大概在90%左右,参与数据处理了的字段如下: +Nazhua支持原版ServerStatus主题的公开备注字段,支持的字段如下: + +### 账单信息 (billingDataMod) ```json { "billingDataMod": { @@ -55,7 +66,13 @@ Nazhua对这个支持大概在90%左右,参与数据处理了的字段如下 "autoRenewal": "1", "cycle": "月", "amount": "$3.99" - }, + } +} +``` + +### 配置信息 (planDataMod) +```json +{ "planDataMod": { "bandwidth": "30Mbps", "trafficVol": "1TB/月", @@ -67,13 +84,9 @@ Nazhua对这个支持大概在90%左右,参与数据处理了的字段如下 } } ``` -~~其中IPv4、IPv6暂未参与到处理中,后续可能会支持。~~ - - 都有显示标签:双栈IP; - - 单IPv4显示标签:仅IPv4; - - 单IPv6显示标签:仅IPv6; +## 🔍 完整公开备注示例 -### 公开备注的完整示例 ```json { "billingDataMod": { @@ -101,4 +114,4 @@ Nazhua对这个支持大概在90%左右,参与数据处理了的字段如下 "flag": "cn" } } -``` \ No newline at end of file +``` diff --git a/doc/update.md b/doc/update.md index bbd9adc..37be21a 100644 --- a/doc/update.md +++ b/doc/update.md @@ -1,20 +1,30 @@ -# 更新说明 -大概记录一下功能性更新,修复BUG不在此记录 +# 📝 更新日志 -### v0.6.4 更新 -新增:支持网络监控折线图拆分单一图表功能; -新增:公开备注中设定节点的flag,自定义国家/地区旗帜; -新增:支持地图在首页与详情页的上下位置切换; +> 此处仅记录功能性更新,Bug修复不在此记录 -### v0.5.7 更新 -新增:添加自定义favicon支持; +## 📦 v0.6.4 更新 +- ✨ **新增**: 网络监控折线图拆分单一图表功能 +- 🌍 **新增**: 公开备注中支持自定义国家/地区旗帜 (`flag` 字段) +- 🔄 **新增**: 支持地图在首页与详情页的上下位置切换 -### v0.5.4 更新 -新增:新增内置搜索,支持`Ctrl+K`快速打开搜索; +## 📦 v0.5.7 更新 +- 🖼️ **新增**: 自定义favicon支持 -### v0.5.3 更新 -新增:支持单独给服务器设置购买按钮的文案和图标,需要在公开备注的customData中添加`buyBtnText`和`buyBtnIcon`字段。 -> 使用方法:`buyBtnText`用于设置购买按钮的文案,`buyBtnIcon`用于设置购买按钮的图标,图标支持Remixicon的图标名称,例如:`ri-gift-2-line`。 -> 示例:点击复制图标名称,然后填写到`buyBtnIcon`字段中,补齐`ri-`前缀即可。 -> ![remixicon使用方法](../.github/images/remixicon-select.jpg) -> 在线图标网站:[www.remixicon.com](https://www.remixicon.com/) 目前支持版本为4.6.0 +## 📦 v0.5.4 更新 +- 🔍 **新增**: 内置搜索功能,支持 `Ctrl+K` 快速打开搜索 + +## 📦 v0.5.3 更新 +- 🛒 **新增**: 支持单独设置服务器购买按钮的文案和图标 + +### 使用方法 +- `buyBtnText`: 设置购买按钮文案 +- `buyBtnIcon`: 设置购买按钮图标,支持Remixicon图标 + +### 图标配置示例 +1. 访问 [Remixicon官网](https://www.remixicon.com/) +2. 选择并复制图标名称 +3. 在 `buyBtnIcon` 字段中填写,补齐 `ri-` 前缀 + +![remixicon使用方法](../.github/images/remixicon-select.jpg) + +> 当前支持版本: Remixicon 4.6.0(cdn版本,受限于更新原因,支持到4.3.0) diff --git a/readme.md b/readme.md index 74054de..8139ec0 100644 --- a/readme.md +++ b/readme.md @@ -1,34 +1,47 @@ # Nazhua -
- Nazhua - Nazhua + +
+ Nazhua桌面版 + Nazhua移动版 + Nazhua详情页
+## 📢 使用须知 -**使用前,请务必阅读Readme的内容,对你有帮助** -> 基于哪吒监控(nezha.wiki)v0版本构建的前端主题,目前兼容与v0相同数据结构的v1版本。 -> ~~主题有点**重**,因为内置了一个带中文的`SarasaTermSC-SemiBold`字体。~~ -> ~~根据不同场景,可以选择是否打包带入或者是否加载这个字体。~~ -> 考虑到多数国内直连用户无法访问jsdelivr,所以默认使用cdnjs的loli.net引用版本。 -> 同时默认关闭SarasaTermSC字体,如果需要使用,请使用Docker镜像全量包。 +**使用前,请务必阅读本文档,对您的部署会有很大帮助** -## 部署 -推荐使用Docker Compose进行部署Nazhua -[参考文档](./doc/deploy.md) -nazhua提供了很多细节配置,包括点阵地图显示/隐藏、首页风格的切换等功能; -如果你是使用v1内置版本,可以直接通过[配置生成器](https://hi2shark.github.io/nazhua-generator/)生成配置文件,然后填写在控制台的自定义代码中; -如果你是使用docker部署(包括v0版本),则需要手动配置`config.js`,具体参考文档说明; +- 基于哪吒监控(nezha.wiki)v0版本构建的前端主题,兼容v1版本数据结构 +- 考虑到国内用户访问需求,默认使用cdnjs的loli.net作为CDN引用源 +- 如需使用SarasaTermSC字体,请选择Docker镜像全量包进行部署 +## 🚀 部署指南 -## 公开备注 -涉及到地图上节点位置的显示,需要在公开备注中指定`location`字段,具体参考公开备注的说明文档 -[参考文档](./doc/public-note.md) +**推荐使用Docker Compose + Cloudflare Tunnels部署Nazhua** -## 更新 -[功能更新日志](./doc/update.md) +👉 [详细部署文档](./doc/deploy.md) + +Nazhua提供了丰富的配置选项: +- 支持点阵地图显示/隐藏 +- 首页风格切换等多种个性化设置 + +配置方式: +- **V1内置版本**:使用[配置生成器](https://hi2shark.github.io/nazhua-generator/)生成配置,填入控制台自定义代码 +- **Docker部署**:手动配置`config.js`文件(包括v0版本) + +## 🗺️ 节点位置配置 + +要在地图上显示节点位置,需在公开备注中指定`location`字段 + +👉 [公开备注配置文档](./doc/public-note.md) + +## 📝 更新日志 + +👉 [功能更新记录](./doc/update.md) + +## 🤝 赞助商 + +> 按服务商字母排序,不分先后 -## 赞助 -> 按服务商字母排序,不分先后。 -
@@ -36,31 +49,35 @@ nazhua提供了很多细节配置,包括点阵地图显示/隐藏、首页风 VMISS
- VMISS + VMISS
YXVM
- YXVM + YXVM
+ + +## 💻 开发者指南 + +### 环境配置 + +在`.env.development.local`中配置以下变量: -## 二次开发提示 -`.env.development.local`配置变量 ```bash -#### Sarasa Term SC字体的配置 +#### Sarasa Term SC字体设置 # VITE_DISABLE_SARASA_TERM_SC=1 # VITE_SARASA_TERM_SC_USE_CDN=1 -#### 引用库的CDN配置 +#### CDN配置 # VITE_USE_CDN=1 # VITE_CDN_LIB_TYPE=jsdelivr # jsdelivr | cdnjs | loli -#### 哪吒的默认版本控制 -# VITE_NEZHA_VERSION=v1 # v0 | v0 +#### 哪吒版本控制 +# VITE_NEZHA_VERSION=v1 # v0 | v1 #### 本地开发设置 # PROXY_WS_HOST= # 本地开发时,可以代理WS服务的地址,启用后,自动转发至 {PROXY_WS_HOST}/proxy?wsPath={WS_HOST} @@ -70,11 +87,11 @@ nazhua提供了很多细节配置,包括点阵地图显示/隐藏、首页风 # NEZHA_HOST= # 本地开发时,代理的哪吒主页地址 ``` -## 数据来源(参考) -1-v0. 公开的全量配置,其中包括“公开备注”(PublicNote),来自探针主页上暴露的服务器节点列表配置信息。此处是根据正则匹配的方式,获取到的节点列表。在主题项目中,默认将访问`/nezha/`的指向此处。 -2-v0. 实时数据,v0来自公开的ws服务接口,`/ws`。 -2-v1. 实时数据/全量数据,v1来自公开的ws服务接口,`/api/v1/ws/server`。 -3-v0. 监控数据,v0来自公开的api接口,`/api/v1/monitor/${id}`。 -3-v1. 监控数据,v1来自公开的api接口,`/api/v1/service/${id}`。 -4-v0. 分组数据,v0来自服务器节点列表的`Tag`字段匹配。 -4-v1. 分组数据,v1来自公开的api接口,`/api/v1/server-group`。 +### 数据来源参考 + +| 数据类型 | V0版本 | V1版本 | +|---------|--------|--------| +| 全量配置 | 公开备注(PublicNote):通过正则匹配节点列表,默认访问`/nezha/` | - | +| 实时数据 | WS接口:`/ws` | WS接口:`/api/v1/ws/server` | +| 监控数据 | API接口:`/api/v1/monitor/${id}` | API接口:`/api/v1/service/${id}` | +| 分组数据 | 服务器节点列表的`Tag`字段匹配 | API接口:`/api/v1/server-group` |