共计 5427 个字符,预计需要花费 14 分钟才能阅读完成。
目录
- 前言
- 土味概念解释
- 前期准备
- Github OAuth 设置
- 面板安装
- 客户端安装
- Alpine 系统手动安装客户端
- 配置 Nginx 反代
- 申请 SSL 证书
- 反代后修改 Github Oauth 设置
- 常见坑点
1. 前言
玩鸡半年多,手里的小鸡渐渐多了起来,有了监控的需求,最后选择了哪吒探针。
这个探针很好用,但是文档与群组的支持稍显不足,遇到了一些坑,但最后都成功解决了,于是有了本教程,希望大家在搭建自己探针的时候,少走弯路。
2. 土味概念解释
概念 | 解释 |
---|---|
面板机 | 1 台小鸡,作为主控端,用于展示探针界面。 |
客户机 | N 台小鸡,作为被控端,安装有哪吒探针的 agent,与面板机通信,上传小鸡信息。 |
面板端口 | 访问探针界面使用的端口,默认 8008 |
RPC 端口 | agent 与面板机通信用的端口,默认 5555 |
面板域名 | 访问探针界面使用的域名,解析到面板机 ip,开启 CDN(小云朵),保护 ip 不泄漏 |
通信域名 | agent 与面板机通信用的域名,解析到面板机 ip,不开 CDN |
Github OAuth | 登录面板后台使用 Github 的身份,称为 "第三方登录" |
3. 前期准备
名称 | 数量 | 说明 |
---|---|---|
面板机 | 1 | |
客户机 | N | |
面板域名 | 1 | 做好 A 记录解析,开启 CDN,下文以 a.com 代替 |
通信域名 | 1 | 做好 A 记录解析,下文以 b.com 代替 |
Github 账户 | 1 | |
常用命令 | curl、wget、sudo |
4. Github OAuth 设置
- 访问
https://github.com/settings/developers
,右上角New OAuth App
- 如图设置应用名称、主页、回调页面
这里借用一下通信域名 b.com,后面会改成面板域名 - 点击“Register application”,保存页面中的 Client ID,然后点击“Generate a new client secret“,创建一个新的 Client Secret,新建的密钥仅会显示一次,请妥善保存。
Client ID 和 Client Secret 在面板安装的时候会用到
5. 面板安装
- 官方安装脚本一把梭
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
- 境内服务器使用:
curl -L https://cdn.jsdelivr.net/gh/naiba/nezha@master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh
6. 客户端安装
- 访问面板
http://b.com:8008
- 点击右上角登录,使用 Github 账户登录,进入后台
- 以 Linux 系统为例,先点击添加服务器,设置好信息,然后点击绿色小企鹅,复制一键安装客户端命令,在客户机上粘贴执行即可
命令格式为:
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh install_agent b.com 5555 [密钥]
- 一切顺利的话,在面板首页即可看到客户端上线了
7. Alpine 系统手动安装客户端
我尝试过官方一键脚本,但是不好使,这里我们手动安装,以 amd64 架构的小鸡为例
- 下载 agent:
访问https://github.com/naiba/nezha/releases
,根据小鸡架构选择软件包
下载wget https://github.com/naiba/nezha/releases/download/v0.14.12/nezha-agent_linux_amd64.zip
- 下面配置服务,需要按实际情况修改:
SERVER="b.com:5555" #通信域名:RPC 端口
SECRET="xxxxxxxxxx" #密钥,在面板后台点击复制
- 配置服务:
vim /etc/init.d/nezha-agent
chmod +x /etc/init.d/nezha-agent
#!/sbin/openrc-run
SERVER="b.com:5555" #通信域名:RPC 端口
SECRET="xxxxxxxxxx" #密钥,在面板后台点击复制
TLS=""# 是否启用 tls 是"--tls" 否留空
NZ_BASE_PATH="/opt/nezha" #agent 下载目录,可以自由配置
NZ_AGENT_PATH="${NZ_BASE_PATH}/agent"
pidfile="/run/${RC_SVCNAME}.pid"
command="${NZ_AGENT_PATH}/nezha-agent"
command_args="-s ${SERVER} -p ${SECRET} ${TLS}"
command_background=true
depend() {need net}
checkconfig() {
GITHUB_URL="github.com"
if [! -f "${NZ_AGENT_PATH}/nezha-agent" ]; then
if [[$(uname -m | grep 'x86_64') != "" ]]; then
os_arch="amd64"
elif [[$(uname -m | grep 'i386\|i686') != "" ]]; then
os_arch="386"
elif [[$(uname -m | grep 'aarch64\|armv8b\|armv8l') != "" ]]; then
os_arch="arm64"
elif [[$(uname -m | grep 'arm') != "" ]]; then
os_arch="arm"
elif [[$(uname -m | grep 's390x') != "" ]]; then
os_arch="s390x"
elif [[$(uname -m | grep 'riscv64') != "" ]]; then
os_arch="riscv64"
fi
local version=$(curl -m 10 -sL "https://api.github.com/repos/naiba/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
if [! -n "$version"]; then
version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'"'{print $2}' | sed 's/naiba\/nezha@/v/g')
fi
if [! -n "$version"]; then
version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'"'{print $2}' | sed 's/naiba\/nezha@/v/g')
fi
if [! -n "$version"]; then
echo -e "获取版本号失败,请检查本机能否链接 https://api.github.com/repos/naiba/nezha/releases/latest"
return 0
else
echo -e "当前最新版本为: ${version}"
fi
wget -t 2 -T 10 -O nezha-agent_linux_${os_arch}.zip https://${GITHUB_URL}/naiba/nezha/releases/download/${version}/nezha-agent_linux_${os_arch}.zip >/dev/null 2>&1
if [[$? != 0]]; then
echo -e "Release 下载失败,请检查本机能否连接 ${GITHUB_URL}${plain}"
return 0
fi
mkdir -p $NZ_AGENT_PATH
chmod 755 -R $NZ_AGENT_PATH
unzip -qo nezha-agent_linux_${os_arch}.zip && mv nezha-agent $NZ_AGENT_PATH && rm -rf nezha-agent_linux_${os_arch}.zip README.md
fi
if [! -x "${NZ_AGENT_PATH}/nezha-agent" ]; then
chmod +x ${NZ_AGENT_PATH}/nezha-agent
fi
}
start_pre() {if [ "${RC_CMD}" != "restart" ]; then
checkconfig || return $?
fi
}
- 启动 agent 并设置开机自启
rc-service nezha-agent start
rc-update add nezha-agent
8. 配置 Nginx 反代
将面板机的 8008 端口反代到 https://a.com
- 需要按实际情况修改下列信息
server_name a.com; # 面板域名
ssl_certificate /etc/nezha/server.crt; # 你的域名证书路径
ssl_certificate_key /etc/nezha/server.key; # 你的域名私钥路径
- nginx 配置:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {worker_connections 1024;}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
access_log /root/nginx.log;
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name a.com;
ssl_certificate /etc/nezha/server.crt; # 你的域名证书路径
ssl_certificate_key /etc/nezha/server.key; # 你的域名私钥路径
underscores_in_headers on;
location / {
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
}
location ~ ^/(ws|terminal/.+)$ {
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;
}
}
server {
listen 80;
location /.well-known/ {root /var/www/html;}
location / {rewrite ^(.*)$ https://$host$1 permanent;
}
}
}
9. 申请 SSL 证书
这里使用 acme.sh 申请 a.com 的 SSL 证书,Webroot 模式
原理是 acme.sh 会在网站对应域名的 webroot 目录下生成域名验证文件, 然后通过公网访问之,以验证对域名的所有权
- 面板机上安装 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
- 切换 CA 机构
acme.sh --set-default-ca --server letsencrypt
- 申请证书,按实际情况修改面板域名
acme.sh --issue -d a.com -k ec-256 --webroot /var/www/html
- 安装证书,按实际情况修改面板域名和证书路径
acme.sh --install-cert -d a.com --ecc --key-file /etc/nezha/server.key --fullchain-file /etc/nezha/server.crt --reloadcmd "systemctl force-reload nginx"
10. 反代后修改 Github Oauth 设置
注意 http 变成 https 了,域名变了,端口没了
需要将 http 修改为 https,主页和回调页面修改成面板域名,不能是原来的通信域名,否则登录会报错
11. 常见坑点
- 配置 agent 时,将面板 RPC 端口(默认 5555)错误地写成了 NAT vps 的可用端口
- Alpine 手搓服务时,将面板 RPC 端口(默认 5555)错误地写成了面板访问端口 8008
- 套 CloudFlare 后提示“重定向的次数过多”,需要将 SSL/TLS 设置,改为 完全(Full)或 完全严格 Full (strict) 模式
正文完