对于拥有多台服务器和网站的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 IDClient 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,允许,此网站->添加

发表评论