对于拥有多台服务器和网站的MJJ而言,一个高效、轻量的监控系统是保障服务稳定运行的关键。哪吒探针正是这样一款备受欢迎的开源、自托管的服务器状态和网站监控工具。它以其直观的界面、丰富的功能和便捷的部署方式,赢得了众多MJJ的青睐。
本教程将指导您完成哪吒探针旧版本(在此指V0版本)的安装与配置,虽然目前已有更新的V1版本,但由于开发者草率的版本升级,新版本没有向下兼容,曾导致大量MJJ的探针瘫痪,后面又经历本地授权的安全问题,以及UI的更新,导致不少人对V1版本产生了抗拒。版本升级后,官方的旧版本安装脚本无法再使用,且官方网站旧版本文档已被覆盖,以至于很多人没办法回退到V0版本。本人因为无法接受V1版本的UI,一直未对面板进行升级,所幸保留了旧版本的安装脚本和二进制文件。故此写下这篇V0版本的安装教程,留给有需要的人参考。
1 前置条件
- 一台Linux服务器,系统为ubuntu或debian(其他系统未尝试)
- 两个已解析到服务器的域名,可以使用二级域名,以tz.example.com和status.example.com为例
2 安装dashboard
2.1 面板容器安装
这里仅进行docker方式的安装,因此默认你的服务器A存在docker环境。因docker安装比较简单,未安装docker的可自行google,这里不再累述。因为V0版本后台管理是通过github auth授权登录的,所以我们需要提前在github创建一个Oauth App,获取Client ID
和Client secrets
,创建路径如下: 登录github
->点击右上角头像
->选择Settings
->左侧菜单Developer Settings
->左侧菜单OAuth Apps
->New Auth App
。
# 创建nezha工作目录
mkdir -p /opt/nezha/dashboard
cd /opt/nezha/dashboard
mkdir data
mkdir -p theme-custom/template
mkdir -p theme-custom/static
mkdir -p dashboard-custom/template
mkdir -p dashboard-custom/static
# 创建docker-compose.yaml
touch docker-compose.yaml
# 其中8080为面板端口,5555为客户端上报RPC端口
echo 'version: "3.3"
services:
dashboard:
image: ghcr.io/naiba/nezha-dashboard:v0.20.13
restart: always
volumes:
- ./data:/dashboard/data
- ./theme-custom/template:/dashboard/resource/template/theme-custom:ro
- ./theme-custom/static:/dashboard/resource/static/theme-custom:ro
- ./dashboard-custom/template:/dashboard/resource/template/dashboard-custom:ro
- ./dashboard-custom/static:/dashboard/resource/static/dashboard-custom:ro
ports:
- 127.0.0.1:8008:80
- 127.0.0.1:5555:5555' >> docker-compose.yaml
# 创建面板配置文件
touch data/config.yaml
echo 'debug: false
language: zh-CN
site:
brand: 你的探针名称
cookiename: nezha-dashboard
theme: custom
dashboardtheme: default
customcode: ""
customcodedashboard: ""
viewpassword: ""
oauth2:
type: github
admin: 你自己的github账号
admingroups: ""
clientid: 你自己的github的Client ID
clientsecret: 你自己的github的Client Secret
endpoint: ""
oidcdisplayname: OIDC
oidcissuer: ""
oidclogouturl: ""
oidcregisterurl: ""
oidcloginclaim: sub
oidcgroupclaim: groups
oidcscopes: openid,profile,email
oidcautocreate: false
oidcautologin: false
httpport: 80
grpcport: 5555
grpchost: RPC域名status.example.com替换成你自己的
proxygrpcport: 443
tls: true
enableplainipinnotification: false
disableswitchtemplateinfrontend: false
enableipchangenotification: false
ipchangenotificationtag: default
cover: 0
ignoredipnotification: ""
location: Asia/Shanghai
ignoredipnotificationserverids: {}
maxtcppingvalue: 1000
avgpingcount: 2
dnsservers: ""' >> data/config.yaml
# 创建并启动面板容器,等待执行完成
docker compose -f /opt/nezha/dashboard/docker-compose.yaml up -d
2.2 nginx面板域名反代配置
确保你的域名已成功解析到当前服务器,在nginx下增加以下配置。
# 面板反代配置,域名替换成你自己的域名
server {
listen 80;
server_name tz.example.com;
return 302 https://tz.example.com:443;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/nginx/tls/www.example.com.crt;
ssl_certificate_key /etc/nginx/tls/www.example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
server_name tz.example.com;
location / {
proxy_pass http://127.0.0.1:8008;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-RemoteAddr $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ws {
proxy_pass http://127.0.0.1:8008;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
}
}
# RPC域名反代配置,域名替换成你自己的域名
server {
listen 80;
server_name status.example.com;
return 302 https://status.example.com:443;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/nginx/tls/www.example.com.crt;
ssl_certificate_key /etc/nginx/tls/www.example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
server_name status.example.com;
underscores_in_headers on;
keepalive_requests 100000;
keepalive_timeout 120s;
location / {
grpc_read_timeout 300s;
grpc_send_timeout 300s;
grpc_socket_keepalive on;
grpc_pass grpc://127.0.0.1:5555;
}
}
nginx -s reload
重载nginx配置文件,到此dashboard的安装已经完成。
2 安装agent
2.1 面板创建服务器
打开浏览器,输入面板域名https://tz.example.com,可以正常看到面板页面了,这个时候因为还没客户端机器接入,所以面板是空的。我们点击右上角的登录,会跳转到github授权,授权登录后,就可以通过右上角的管理后台登录后台管理界面。点击新增服务器,如下图,名称和分组可根据自己需求填写。
点击新增保存,我们可以看到列表新增了一条服务器记录,且在探针主页面也能看到一个状态是离线,名称为本机的服务器。我们点击列表中箭头所指的按钮复制服务器的密钥,记录留作后用。
复制密钥
2.2 客户端程序配置和安装
V0版本的客户端程序我这里只备份了linux版本的,如有其他系统的需求,可以google一下。linux下有x86和arm64两个版本,请根据自己的系统需求选择,记得上传后重命名文件为nezha-agent
,点击下载。
# 创建哪吒面板agent目录
mkdir -p /opt/nezha/agent
# 上传agent二进制文件
cd /opt/nezha/agent
rz
# 创建systemd服务,设置开启启动,将域名和密钥替换为你自己的
touch /etc/systemd/system/nezha-agent.service
echo '[Unit]
Description=哪吒探针监控端
ConditionFileIsExecutable=/opt/nezha/agent/nezha-agent
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/opt/nezha/agent/nezha-agent "-s" "status.example.com:443" "-p" "你的服务器密钥" "--tls" "--disable-command-execute" "--disable-auto-update"
WorkingDirectory=/root
Restart=always
RestartSec=120
EnvironmentFile=-/etc/sysconfig/nezha-agent
[Install]
WantedBy=multi-user.target' >> /etc/systemd/system/nezha-agent.service
# 重新载入配置并设置开机自启
systemctl daemon-reload
systemctl enable nezha-agent.service
# 客户端相关操作指令
# 启动
systemctl start nezha-agent
# 停止
systemctl stop nezha-agent
# 重启
systemctl restart nezha-agent
# 查看状态
systemctl status nezha-agent
3 常见问题
如果你的域名dns服务商使用的是CF,那么可能出现服务端和客户端都正常,但是客户端无法正常汇报,服务器始终离线。原因是CF将客户端的RPC请求当作机器人脚本攻击拦截了,需要在CF域名下对你客户端机器的IP加白名单,添加路径如下: 登录CF
->选择对应的域名
->左侧菜单安全性
->工具
->输入客户端IP,允许,此网站
->添加
。