写给哪吒探针 v0 版本钉子户的“养老”指南
前言
最近这两年各式各样的探针是越来越多了,而在几年前,好用的探针并不多。那会能够通过一键脚本部署的“哪吒探针”对于小白来说几乎是唯一的选择,安装配置十分简单,无论是控制面板还是 Agent 都是只要复制、粘贴就能上线。
不过哪吒 v0 版本更新到 v1 版本的时候进行了破坏性更新,变化非常大,采用了新的设计风格和理念,相信包括我在内的很多人都不太适应新版的变化而选择停留在 v0 版本。
但最近新买了几台服务器,服务器一多,哪吒探针的排序简直就是灾难,特别是对于强迫症而言,默认的 ID 是自增的,而排序又是依赖权重,需要手动输入,两者不同步就会非常的难受,最终还是决定把探针从哪吒 v0 切换到 Komari。
更重要的是,哪吒 v0 版本再怎么好用,终归也是停更一年半,无论是从功能还是安全性来说都不建议新用户安装,只推荐用惯了 v0 版本、不想更新的用户养老使用,新用户建议直接用 v2 版本或者其他探针。
下面分享一下 v0 版本钉了这么久的一点点心得,希望对其他钉子户有帮助。
更好的选择
哪吒探针 v2
哪吒探针的新版本一直在持续更新,如今的版本号已经到 v2 ,也是支持配置 TSDB 来保存历史数据了!
tsdb:
data_path: "data/tsdb"
retention_days: 30
max_memory_mb: 256当初在 v1 的文章里我说详情中的图表只能显示最近几秒的数据是脱裤子放屁,现在也是终于能派上用场了!
除此之外,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 到我们自己的账号上。
务必选择取消选择 “Copy the main branch only”,我们要构建的 v0 文档在 v0 分支上,如果勾选了这一项只会Fork main 分支。
提示
v0 文档中有一些链接也是过时的,可以修改后再构建,这里就不演示了
接着来到 Cloudflare 的 Workers & Pages 中,现在点击创建默认是 Workers,我们选择下面的 Pages
接着选择从 Git 仓库导入,当然如果你本地有 Node.js 环境的话,也可以本地构建好之后,直接上传 dist 文件夹
连接 Github 账号,选择刚才 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
接着将它上传到自己对象存储,比如 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
image: example/nezha-dashboard:v0.20.13
restart: always4. 修复后台链接
默认情况下,在后台点击一键安装会复制命令,但现在链接变动了
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 文档
总结
修复完这些问题,理论上就可以继续钉在哪吒 v0 版本了~



