写给哪吒探针 v0 版本钉子户的“养老”指南
前言
最近这两年各式各样的探针是越来越多了,而在几年前,好用的探针并不多。那会能够通过一键脚本部署的“哪吒探针”对于小白来说几乎是唯一的选择,安装配置十分简单,无论是控制面板还是 Agent 都是只要复制、粘贴就能上线。
不过哪吒 v0 版本更新到 v1 版本的时候进行了破坏性更新,变化非常大,采用了新的设计风格和理念,相信包括我在内的很多人都不太适应新版的变化而选择停留在 v0 版本。
钉了这么久,还有个重要原因就是 DayNight 主题简洁明了但最近新买了几台服务器,服务器一多,哪吒探针的排序简直就是灾难,特别是对于强迫症而言,默认的 ID 是自增的,而排序又是依赖权重,需要手动输入,两者不同步就会非常的难受,最终还是决定把探针从哪吒 v0 切换到 Komari。
更重要的是,哪吒 v0 版本再怎么好用,终归也是停更一年半,无论是从功能还是安全性来说都不建议新用户安装,只推荐用惯了 v0 版本、不想更新的用户养老使用,新用户建议直接用 v2 版本或者其他探针。
下面分享一下 v0 版本钉了这么久的一点点心得,希望对其他钉子户有帮助。
更好的选择
哪吒探针 v2
哪吒探针的新版本一直在持续更新,如今的版本号已经到 v2 ,也是支持配置 TSDB 来保存历史数据了!
tsdb:
data_path: "data/tsdb"
retention_days: 30
max_memory_mb: 256
当初在 v1 的文章里我说详情中的图表只能显示最近几秒的数据是脱裤子放屁,现在也是终于能派上用场了!
哪吒探针 v2 - 历史数据除此之外,v1 起哪吒探针也不强制要求 OAuth 2.0,可以直接用账号和密码来登录,对于新手来说更加的友好,如果你是没用过 v0 版本老用户,推荐直接用新版!
Komari
除了哪吒探针以外,Komari 也是个非常不错的选择,一直以来哪吒探针最让人诟病的就是后台设置繁琐,通知、告警规则等等都要配置 JSON,还需要找个规则生成器来生成。
尽管现在的哪吒探针已经逐步加上了表单,但总的来说仍然不如 Komari 简便,比如在 Komari 中给服务器、延迟检测排序只需要用鼠标拖动就能完成,而哪吒探针 v2 仍然需要一个一个输入数字来设置权重。
存在问题
如果说了这么多,你仍然想当哪吒探针 v0 版本的钉子户养老,不如先看看有哪些问题吧!
文档缺失:目前哪吒的官方文档仅保留的最新版本,旧版需要在 GitHub 仓库的
v0分支中自己构建Agent 安装失败:国内服务器会从 Gitee 下载,而 Gitee 的 Releases 只有最新版本的 Agent,老版本会直接 404 导致安装失败(国外服务器从 GitHub 获取,目前还能正常下载)
IP 库老旧:哪吒探针的 IP 库是直接打包到 Dashboard 容器中的,无法单独更新,随着时间推移,越来越多的 VPS 的地区会识别错误
后台链接错误:由于 v1 版本更新后,v0 的安装脚本移动到了
v0分支,导致后台复制的 Agent 安装命令链接是错误的
修复以上这些问题之后,才能更加优雅的钉在 v0 版本。
修复问题
1. v0 文档
哪吒 v0 的用户本来就少了,遇到问题也不好解决,没有官方文档怎么能行呢?
好在文档也是开源的,基于 VitePress,构建后生成静态文件,可以直接将它托管在 Cloudflare Pages 上。
💡 提示
如果你熟悉 GitHub Actions 的话,部署到 Github Pages 会更加的便捷,当然小白的话还是建议部署到 Cloudflare Pages
找到文档的仓库 nezhahq/nezhahq.github.io,将它 Fork 到我们自己的账号上。
Fork务必选择取消选择 “Copy the main branch only”,我们要构建的 v0 文档在 v0 分支上,如果勾选了这一项只会Fork main 分支。
取消勾选 main only💡 提示
v0 文档中有一些链接也是过时的,可以修改后再构建,这里就不演示了
接着来到 Cloudflare 的 Workers & Pages 中,现在点击创建默认是 Workers,我们选择下面的 Pages
Pages接着选择从 Git 仓库导入,当然如果你本地有 Node.js 环境的话,也可以本地构建好之后,直接上传 dist 文件夹
选择 Git 仓库导入连接 Github 账号,选择刚才 Fork 过来的仓库
选择 Fork 的仓库接下来是最重要的一步,选择错误就会构建失败
分支:v0
框架预设:VitePress
部署命令:
pnpm build(默认的npx vitepress build构建会失败)输出路径:
docs/.vitepress/dist(在默认的路径前加上docs/)
构建选项等个半分钟左右,构建完成后,就可以访问自带的 pages.dev 域名查看文档了!
构建完成2. 修复 Agent 安装
💡 提示
如果你没有国内服务器可以省略该步骤
下载 v0 的安装脚本 https://github.com/nezhahq/scripts/v0/install.sh
找到第 377 行的 NZ_AGENT_URL
NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip"
如果国内的服务器选择从国内镜像下载,这个链接就是 Gitee 的链接,但 Gitee 的 Releases 中已经没有老版本的 Agent 了,会直接导致下载失败
我们可以去 GitHub 的 Releases 中手动下载 v0.20.5 版本的 Agent https://github.com/nezhahq/agent/releases/tag/v0.20.5
自己使用没必要下载全部架构,只需要下载自己服务器对应的架构,例如 amd64
Agent v0.20.5接着将它上传到自己对象存储,比如 Cloudflare R2 中,把刚才的 NZ_AGENT_URL 直接修改为自己的链接就可以正常下载 Agent 了。
NZ_AGENT_URL="https://r2.cloudflarestorage.com/assets/${_version}/nezha-agent_linux_${os_arch}.zip"
最后记得把修改后的脚本也一并上传到对象存储中。
3. 更新 IP 库
如果你发现你新买的服务器显示的地区与实际的地区不一致,说明 IP 是新广播的,而由于 IP 库没有更新,只能识别原来的地区,解决方法有两种:
Agent 安装时添加
--use-ipv6-countrycode获取 IPv6 的地区,如果 IPv6 地区正确的话,就可以曲线救国解决问题了如果 IPv4 和 IPv6 都和实际地区对不上,那就只能更新 IP 库了
在 IPInfo 下载最新的库
wget -qO geoip.db https://ipinfo.io/data/free/country.mmdb?token={token}
编辑 Dockerfile
ARG NEZHA_VERSION=""
FROM golang:1.21-alpine AS builder
ARG NEZHA_VERSION=""
WORKDIR /go/src/nezha
ENV CGO_ENABLED=1
ENV CGO_CFLAGS="-D_LARGEFILE64_SOURCE=1"
RUN set -ex
&& apk add --update --no-cache git gcc musl-dev
&& git clone --depth=1 --branch ${NEZHA_VERSION} https://github.com/nezhahq/nezha.git .
COPY geoip.db /go/src/nezha/pkg/geoip/geoip.db
RUN set -ex
&& go build -v -trimpath -ldflags="
-s -w -buildid=
-X 'github.com/naiba/nezha/service/singleton.Version=${NEZHA_VERSION#v}'
-extldflags '-static -fpic'
" -o /go/bin/dashboard ./cmd/dashboard
FROM ghcr.io/naiba/nezha-dashboard:${NEZHA_VERSION} AS dist
COPY --from=builder /go/bin/dashboard /dashboard/app
构建
docker build --no-cache --progress=plain --build-arg NEZHA_VERSION=v0.20.13 --tag example/nezha-dashboard:v0.20.13 .
最后将 Docker Compose 中的 image 修改成新的镜像
services:
nezha-dashboard:
container_name: nezha-dashboard
image: ghcr.io/naiba/nezha-dashboard:v0.20.13 # [!code --]
image: example/nezha-dashboard:v0.20.13 # [!code ++]
restart: always
4. 修复后台链接
默认情况下,在后台点击一键安装会复制命令,但现在链接变动了
curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh -o nezha.sh && chmod +x nezha.sh && ./nezha.sh install_agent
可以通过后台的 Custom Codes for Dashboard 功能,把这个链接替换掉
⚠️ 警告
自定义代码(包括 style 和 script)是给前台用的,Custom Codes for Dashboard 才是后台的自定义代码
<script>
document.addEventListener('DOMContentLoaded', function () {
const serverRows = document.querySelectorAll('html body div:nth-child(3) div table tbody tr');
serverRows.forEach((row) => {
const button = row.querySelector('td:nth-child(10) button[data-clipboard-text]');
if (button) {
let oldText = button.getAttribute('data-clipboard-text');
let newText = oldText.replace(
'https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh',
// 修改为以下新链接
'https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/v0/install.sh'
);
newText += ' --disable-auto-update --disable-force-update';
button.setAttribute('data-clipboard-text', newText);
}
});
});
script>
按照第 2 个步骤修改过 Agent 的安装脚本,可以直接把链接修改成自己的脚本。
let newText = oldText.replace(
'https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh',
// 修改为以下新链接
'https://r2.cloudflarestorage.com/assets/install.sh'
);
如果需要修改大量代码的话,通过 <script> 覆盖不是很方便,建议直接用自定义主题的方式来修改后台源文件,主要是 ./dashboard-custom/template 中的 menu.html 和 server.html 两个文件
volumes:
- ./data:/dashboard/data
- ./static-custom/static:/dashboard/resource/static/custom:ro
- ./theme-custom/template:/dashboard/resource/template/theme-custom:ro
- ./dashboard-custom/template:/dashboard/resource/template/dashboard-custom:ro
下图我修改后的效果,隐藏了用不到的功能,IP 加上复制按钮,顺便把文档链接修改为自己构建的 v0 文档
简化的 Dashboard总结
修复完这些问题,理论上就可以继续钉在哪吒 v0 版本了~
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
