一、原理
监控服务器的运行状态,其实一句shell脚本就能做到。但是针对多台服务器的集中监控,并做页面展示,又会涉及到搭建代理了。
哪吒监控分为两部分,一是后台面板,用来展示运行状态数据,并做任务告警等多项管理工作;二是Agent服务,用于在被监控的服务器上收集系统状态和性能数据,并将这些数据发送到哪吒面板。
二、准备工作
- 域名解析:
- 一个面板Dashboard域名,可通过cloudflare创建,方便访问也能隐藏自己IP
- 一个Agent域名,不对外公开,用作 RPC(Remote Procedure Call),实现客户端(Agent)与服务器端之间的远程调用通信
- OAuth身份验证:
- 在Github新建一个OAuth App,Authorization callback URL填入 https://你开启小云朵的域名/oauth2/callback
- 记录下 Client ID 和 Client secrets(只显示一次)
三、搭建面板
服务器运行语句:
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
Docker安装即可,填入所需信息,等待 Docker 拉取完成:
- OAuth提供商 - Github,Gitlab,Jihulab,Gitee 中选择一个
- Client ID - 之前保存的 Client ID
- Client Secret - 之前保存的密钥
- 用户名 - OAuth 提供商中的用户名(注意 GitHub 要求的是用户名,非注册邮箱)
- 访问端口 - 公开访问端口,可自定义,默认 8008
- Agent的通信端口 - Agent与Dashboard的通信端口,默认 5555
完成后,你可以使用服务器 IP+端口(8008)来访问管理面板。
配置面板
使用GitHub账号登录,登入后进入设置页面,找到“未接入CDN的面板服务器域名/IP”设置项。填入用于RPC服务的域名,保存。
安装Agent监控端
登录哪吒面板网页-管理后台-主机,点击添加服务器按钮。完成后,在页面中复制一键安装命令并在想要监控的服务器终端中执行。
四、Caddy做反代
因为不想暴露服务器 IP,并且保证TLS通信安全,所以这一步必不可少。
- 安装Caddy
#安装依赖
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
#添加官方 Caddy GPG 密钥
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
#使用以下命令创建存储库文件
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
apt update
sudo apt install caddy -y
- 配置文件
#安装完成后进入修改
vi /etc/caddy/Caddyfile
# 注释已有的内容
# 新增以下内容:
## 这里是要访问的面板地址,内部端口是在面板设置的时候配置
example.com {
reverse_proxy 127.0.0.1:8008
tls internal
}
# 这里是agent请求的地址,端口为配置时设置的
example.com {
reverse_proxy {
to 127.0.0.1:5555
transport http {
versions h2c
}
}
}
- 完成启动
systemctl reload caddy # 重载配置文件
systemctl daemon-reload # 重载服务
systemctl enable caddy # 开机启动
systemctl start caddy # 启动
systemctl stop caddy # 停止
systemctl restart caddy # 重启
systemctl status caddy # 查看状态
caddy version #查看caddy的版本
大功告成,此时可以用域名来登录后台管理面板啦。
参考:
后记:
VPS因故障重走了一遍此流程,发现Caddy反代的证书签发存在问题:
pam_unix(sudo:auth): conversation failed
vps.io sudo[32102]: pam_unix(sudo:auth): auth could not identify password for [caddy]
vps.io sudo[32102]: caddy : user NOT in sudoers ; PWD=/ ; USER=root ; COMMAND=/usr/bin/te>
vps.io caddy[32097]: {"level":"info","ts":1730599610.122186,"logger":"tls.cache.maintenance">用Claude帮助我解读:
这个错误显示 caddy 用户没有 sudo 权限。让我们解决这个权限问题:
首先,以 root 用户添加 caddy 到 sudoers:
bashCopy# 切换到 root 用户
su - root
# 使用 visudo 添加权限
visudo
# 在文件末尾添加以下行
caddy ALL=(ALL:ALL) ALL
# 或者更安全的方式,只给特定命令的权限
caddy ALL=(ALL) NOPASSWD: /usr/bin/caddy
检查 caddy 用户和组的权限:
bashCopy# 确保 caddy 用户存在
id caddy
# 确保权限正确
chown -R caddy:caddy /etc/caddy
chmod 755 /etc/caddy
chmod 644 /etc/caddy/Caddyfile
检查服务配置:
bashCopy# 查看服务配置
systemctl cat caddy
# 确保服务以 caddy 用户运行
# 在 [Service] 部分应该有:
User=caddy
Group=caddy
重启服务:
bashCopysystemctl restart caddy
systemctl status caddy
如果还有问题,可以查看详细日志:
bashCopyjournalctl -u caddy -f就可以正常运行了。