├── README.md └── install.sh /README.md: -------------------------------------------------------------------------------- 1 | # nezha固定版本v0.17.5的安装agent脚本 2 | ~~将面板中复制所得的指令中的sh的raw文件url替换成 3 | https://raw.githubusercontent.com/Kiritocyz/nezha/main/install.sh 4 | 然后接着去vps安装即可~~ 5 | nezha的v1版本已经发布,v0面板中的一键指令已经可以继续安装0.20.5的agent。 6 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Generated by nezhahq/scriptgen. DO NOT EDIT 3 | 4 | NZ_BASE_PATH="/opt/nezha" 5 | NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" 6 | NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" 7 | NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" 8 | NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" 9 | 10 | red='\033[0;31m' 11 | green='\033[0;32m' 12 | yellow='\033[0;33m' 13 | plain='\033[0m' 14 | export PATH="$PATH:/usr/local/bin" 15 | 16 | os_arch="" 17 | [ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1' 18 | 19 | sudo() { 20 | myEUID=$(id -ru) 21 | if [ "$myEUID" -ne 0 ]; then 22 | if command -v sudo > /dev/null 2>&1; then 23 | command sudo "$@" 24 | else 25 | err "错误: 您的系统未安装 sudo,因此无法进行该项操作。" 26 | exit 1 27 | fi 28 | else 29 | "$@" 30 | fi 31 | } 32 | 33 | check_systemd() { 34 | if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then 35 | echo "不支持此系统:未找到 systemctl 命令" 36 | exit 1 37 | fi 38 | } 39 | 40 | err() { 41 | printf "${red}%s${plain}\n" "$*" >&2 42 | } 43 | 44 | success() { 45 | printf "${green}%s${plain}\n" "$*" 46 | } 47 | 48 | info() { 49 | printf "${yellow}%s${plain}\n" "$*" 50 | } 51 | 52 | geo_check() { 53 | api_list="https://blog.cloudflare.com/cdn-cgi/trace https://dash.cloudflare.com/cdn-cgi/trace https://developers.cloudflare.com/cdn-cgi/trace" 54 | ua="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0" 55 | set -- "$api_list" 56 | for url in $api_list; do 57 | text="$(curl -A "$ua" -m 10 -s "$url")" 58 | endpoint="$(echo "$text" | sed -n 's/.*h=\([^ ]*\).*/\1/p')" 59 | if echo "$text" | grep -qw 'CN'; then 60 | isCN=true 61 | break 62 | elif echo "$url" | grep -q "$endpoint"; then 63 | break 64 | fi 65 | done 66 | } 67 | 68 | pre_check() { 69 | umask 077 70 | 71 | ## os_arch 72 | if uname -m | grep -q 'x86_64'; then 73 | os_arch="amd64" 74 | elif uname -m | grep -q 'i386\|i686'; then 75 | os_arch="386" 76 | elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then 77 | os_arch="arm64" 78 | elif uname -m | grep -q 'arm'; then 79 | os_arch="arm" 80 | elif uname -m | grep -q 's390x'; then 81 | os_arch="s390x" 82 | elif uname -m | grep -q 'riscv64'; then 83 | os_arch="riscv64" 84 | fi 85 | 86 | ## China_IP 87 | if [ -z "$CN" ]; then 88 | geo_check 89 | if [ -n "$isCN" ]; then 90 | echo "根据geoip api提供的信息,当前IP可能在中国" 91 | printf "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" 92 | read -r input 93 | case $input in 94 | [yY][eE][sS] | [yY]) 95 | echo "使用中国镜像" 96 | CN=true 97 | ;; 98 | 99 | [nN][oO] | [nN]) 100 | echo "不使用中国镜像" 101 | ;; 102 | 103 | [3]) 104 | echo "使用自定义镜像" 105 | printf "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用:" 106 | read -r input 107 | case $input in 108 | *) 109 | CUSTOM_MIRROR=$input 110 | ;; 111 | esac 112 | ;; 113 | *) 114 | echo "不使用中国镜像" 115 | ;; 116 | esac 117 | fi 118 | fi 119 | 120 | if [ -n "$CUSTOM_MIRROR" ]; then 121 | GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" 122 | GITHUB_URL=$CUSTOM_MIRROR 123 | Get_Docker_URL="get.docker.com" 124 | Get_Docker_Argu=" -s docker --mirror Aliyun" 125 | Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" 126 | else 127 | if [ -z "$CN" ]; then 128 | GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" 129 | GITHUB_URL="github.com" 130 | Get_Docker_URL="get.docker.com" 131 | Get_Docker_Argu=" " 132 | Docker_IMG="ghcr.io\/naiba\/nezha-dashboard" 133 | else 134 | GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" 135 | GITHUB_URL="gitee.com" 136 | Get_Docker_URL="get.docker.com" 137 | Get_Docker_Argu=" -s docker --mirror Aliyun" 138 | Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" 139 | fi 140 | fi 141 | } 142 | 143 | installation_check() { 144 | if docker compose version >/dev/null 2>&1; then 145 | DOCKER_COMPOSE_COMMAND="docker compose" 146 | if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then 147 | NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") 148 | if [ -n "$NEZHA_IMAGES" ]; then 149 | echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" 150 | echo "$NEZHA_IMAGES" 151 | IS_DOCKER_NEZHA=1 152 | FRESH_INSTALL=0 153 | return 154 | else 155 | echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" 156 | fi 157 | fi 158 | elif command -v docker-compose >/dev/null 2>&1; then 159 | DOCKER_COMPOSE_COMMAND="docker-compose" 160 | if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then 161 | NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") 162 | if [ -n "$NEZHA_IMAGES" ]; then 163 | echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" 164 | echo "$NEZHA_IMAGES" 165 | IS_DOCKER_NEZHA=1 166 | FRESH_INSTALL=0 167 | return 168 | else 169 | echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" 170 | fi 171 | fi 172 | fi 173 | 174 | if [ -f "$NZ_DASHBOARD_PATH/app" ]; then 175 | IS_DOCKER_NEZHA=0 176 | FRESH_INSTALL=0 177 | fi 178 | } 179 | 180 | select_version() { 181 | if [ -z "$IS_DOCKER_NEZHA" ]; then 182 | info "请自行选择您的安装方式(如果你是安装Agent,输入哪个都是一样的):" 183 | info "1. Docker" 184 | info "2. 独立安装" 185 | while true; do 186 | printf "请输入选择 [1-2]:" 187 | read -r option 188 | case "${option}" in 189 | 1) 190 | IS_DOCKER_NEZHA=1 191 | break 192 | ;; 193 | 2) 194 | IS_DOCKER_NEZHA=0 195 | break 196 | ;; 197 | *) 198 | err "请输入正确的选择 [1-2]" 199 | ;; 200 | esac 201 | done 202 | fi 203 | } 204 | 205 | update_script() { 206 | echo "> 更新脚本" 207 | 208 | curl -sL https://${GITHUB_RAW_URL}/install.sh -o /tmp/nezha.sh 209 | mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh 210 | 211 | echo "3s后执行新脚本" 212 | sleep 3s 213 | clear 214 | exec ./nezha.sh 215 | exit 0 216 | } 217 | 218 | before_show_menu() { 219 | echo && info "* 按回车返回主菜单 *" && read temp 220 | show_menu 221 | } 222 | 223 | install_base() { 224 | (command -v curl >/dev/null 2>&1 && command -v wget >/dev/null 2>&1 && command -v unzip >/dev/null 2>&1 && command -v getenforce >/dev/null 2>&1) || 225 | (install_soft curl wget unzip) 226 | } 227 | 228 | install_arch() { 229 | info "提示:Arch安装libselinux需添加nezha-agent用户,安装完会自动删除,建议手动检查一次" 230 | read -r -p "是否安装libselinux? [Y/n] " input 231 | case $input in 232 | [yY][eE][sS] | [yY]) 233 | useradd -m nezha-agent 234 | sed -i "$ a\nezha-agent ALL=(ALL ) NOPASSWD:ALL" /etc/sudoers 235 | sudo -iu nezha-agent bash -c 'gpg --keyserver keys.gnupg.net --recv-keys 4695881C254508D1; 236 | cd /tmp; git clone https://aur.archlinux.org/libsepol.git; cd libsepol; makepkg -si --noconfirm --asdeps; cd ..; 237 | git clone https://aur.archlinux.org/libselinux.git; cd libselinux; makepkg -si --noconfirm; cd ..; 238 | rm -rf libsepol libselinux' 239 | sed -i '/nezha-agent/d' /etc/sudoers && sleep 30s && killall -u nezha-agent && userdel -r nezha-agent 240 | info "提示: 已删除用户nezha-agent,请务必手动核查一遍!" 241 | ;; 242 | [nN][oO] | [nN]) 243 | echo "不安装libselinux" 244 | ;; 245 | *) 246 | echo "不安装libselinux" 247 | exit 0 248 | ;; 249 | esac 250 | } 251 | 252 | install_soft() { 253 | (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install "$@" selinux-policy -y) || 254 | (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install "$@" selinux-utils -y) || 255 | (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu "$@" base-devel --noconfirm && install_arch) || 256 | (command -v apt-get >/dev/null 2>&1 && sudo apt-get update && sudo apt-get install "$@" selinux-utils -y) || 257 | (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add "$@" -f) 258 | } 259 | 260 | install_dashboard() { 261 | check_systemd 262 | install_base 263 | 264 | echo "> 安装面板" 265 | 266 | # Nezha Monitoring Folder 267 | if [ ! "$FRESH_INSTALL" = 0 ]; then 268 | sudo mkdir -p $NZ_DASHBOARD_PATH 269 | else 270 | echo "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。" 271 | printf "是否退出安装? [Y/n] " 272 | read -r input 273 | case $input in 274 | [yY][eE][sS] | [yY]) 275 | echo "退出安装" 276 | exit 0 277 | ;; 278 | [nN][oO] | [nN]) 279 | echo "继续安装" 280 | ;; 281 | *) 282 | echo "退出安装" 283 | exit 0 284 | ;; 285 | esac 286 | fi 287 | 288 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 289 | install_dashboard_docker 290 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 291 | install_dashboard_standalone 292 | fi 293 | 294 | modify_dashboard_config 0 295 | 296 | if [ $# = 0 ]; then 297 | before_show_menu 298 | fi 299 | } 300 | 301 | install_dashboard_docker() { 302 | if [ ! "$FRESH_INSTALL" = 0 ]; then 303 | if ! command -v docker >/dev/null 2>&1; then 304 | echo "正在安装 Docker" 305 | if [ "$os_alpine" != 1 ]; then 306 | if ! curl -sL https://${Get_Docker_URL} | sudo bash -s "${Get_Docker_Argu}"; then 307 | err "脚本获取失败,请检查本机能否链接 ${Get_Docker_URL}" 308 | return 0 309 | fi 310 | sudo systemctl enable docker.service 311 | sudo systemctl start docker.service 312 | else 313 | sudo apk add docker docker-compose 314 | sudo rc-update add docker 315 | sudo rc-service docker start 316 | fi 317 | success "Docker 安装成功" 318 | installation_check 319 | fi 320 | fi 321 | } 322 | 323 | install_dashboard_standalone() { 324 | if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then 325 | sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 326 | fi 327 | } 328 | 329 | selinux() { 330 | #Check SELinux 331 | if command -v getenforce >/dev/null 2>&1; then 332 | if getenforce | grep '[Ee]nfor'; then 333 | echo "SELinux是开启状态,正在关闭!" 334 | sudo setenforce 0 >/dev/null 2>&1 335 | find_key="SELINUX=" 336 | sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config 337 | fi 338 | fi 339 | } 340 | 341 | install_agent() { 342 | install_base 343 | selinux 344 | 345 | echo "> 安装监控Agent" 346 | 347 | echo "正在获取监控Agent版本号" 348 | 349 | 350 | _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') 351 | if [ -z "$_version" ]; then 352 | _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/agent/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') 353 | fi 354 | if [ -z "$_version" ]; then 355 | _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') 356 | fi 357 | if [ -z "$_version" ]; then 358 | _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') 359 | fi 360 | 361 | if [ -z "$_version" ]; then 362 | err "获取 Agent 版本号失败,请检查本机能否链接 https://api.github.com/repos/nezhahq/agent/releases/latest" 363 | return 1 364 | else 365 | _version=v0.17.5 366 | echo "当前最新版本为: ${_version}" 367 | fi 368 | 369 | # Nezha Monitoring Folder 370 | sudo mkdir -p $NZ_AGENT_PATH 371 | 372 | echo "正在下载监控端" 373 | if [ -z "$CN" ]; then 374 | NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" 375 | else 376 | NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" 377 | fi 378 | 379 | _cmd="wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" 380 | if ! eval "$_cmd"; then 381 | err "Release 下载失败,请检查本机能否连接 ${GITHUB_URL}" 382 | return 1 383 | fi 384 | 385 | sudo unzip -qo nezha-agent_linux_${os_arch}.zip && 386 | sudo mv nezha-agent $NZ_AGENT_PATH && 387 | sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md 388 | 389 | if [ $# -ge 3 ]; then 390 | modify_agent_config "$@" 391 | else 392 | modify_agent_config 0 393 | fi 394 | 395 | if [ $# = 0 ]; then 396 | before_show_menu 397 | fi 398 | } 399 | 400 | modify_agent_config() { 401 | echo "> 修改 Agent 配置" 402 | 403 | if [ $# -lt 3 ]; then 404 | echo "请先在管理面板上添加Agent,记录下密钥" 405 | printf "请输入一个解析到面板所在IP的域名(不可套CDN): " 406 | read -r nz_grpc_host 407 | printf "请输入面板RPC端口 (默认值 5555): " 408 | read -r nz_grpc_port 409 | printf "请输入Agent 密钥: " 410 | read -r nz_client_secret 411 | printf "是否启用针对 gRPC 端口的 SSL/TLS加密 (--tls),需要请按 [y],默认是不需要,不理解用户可回车跳过: " 412 | read -r nz_grpc_proxy 413 | echo "${nz_grpc_proxy}" | grep -qiw 'Y' && args='--tls' 414 | if [ -z "$nz_grpc_host" ] || [ -z "$nz_client_secret" ]; then 415 | err "所有选项都不能为空" 416 | before_show_menu 417 | return 1 418 | fi 419 | if [ -z "$nz_grpc_port" ]; then 420 | nz_grpc_port=5555 421 | fi 422 | else 423 | nz_grpc_host=$1 424 | nz_grpc_port=$2 425 | nz_client_secret=$3 426 | shift 3 427 | if [ $# -gt 0 ]; then 428 | args="$*" 429 | fi 430 | fi 431 | 432 | _cmd="sudo ${NZ_AGENT_PATH}/nezha-agent service install -s $nz_grpc_host:$nz_grpc_port -p $nz_client_secret $args >/dev/null 2>&1" 433 | 434 | if ! eval "$_cmd"; then 435 | sudo "${NZ_AGENT_PATH}"/nezha-agent service uninstall >/dev/null 2>&1 436 | sudo "${NZ_AGENT_PATH}"/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p "$nz_client_secret" "$args" >/dev/null 2>&1 437 | fi 438 | 439 | success "Agent 配置 修改成功,请稍等 Agent 重启生效" 440 | 441 | #if [[ $# == 0 ]]; then 442 | # before_show_menu 443 | #fi 444 | } 445 | 446 | modify_dashboard_config() { 447 | echo "> 修改 Dashboard 配置" 448 | 449 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 450 | if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then 451 | echo "正在下载 Docker 脚本" 452 | _cmd="wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/extras/docker-compose.yaml >/dev/null 2>&1" 453 | if ! eval "$_cmd"; then 454 | err "脚本获取失败,请检查本机能否链接 ${GITHUB_RAW_URL}" 455 | return 0 456 | fi 457 | else 458 | err "请手动安装 docker-compose。 https://docs.docker.com/compose/install/linux/" 459 | before_show_menu 460 | fi 461 | fi 462 | 463 | _cmd="wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/extras/config.yaml >/dev/null 2>&1" 464 | if ! eval "$_cmd"; then 465 | err "脚本获取失败,请检查本机能否链接 ${GITHUB_RAW_URL}" 466 | return 0 467 | fi 468 | 469 | echo "关于 GitHub Oauth2 应用:在 https://github.com/settings/developers 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback" 470 | echo "关于 Gitee Oauth2 应用:在 https://gitee.com/oauth/applications 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback" 471 | printf "请输入 OAuth2 提供商(github/gitlab/jihulab/gitee,默认 github): " 472 | read -r nz_oauth2_type 473 | printf "请输入 Oauth2 应用的 Client ID: " 474 | read -r nz_github_oauth_client_id 475 | printf "请输入 Oauth2 应用的 Client Secret: " 476 | read -r nz_github_oauth_client_secret 477 | printf "请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开: " 478 | read -r nz_admin_logins 479 | printf "请输入站点标题: " 480 | read -r nz_site_title 481 | printf "请输入站点访问端口: (默认 8008)" 482 | read -r nz_site_port 483 | printf "请输入用于 Agent 接入的 RPC 端口: (默认 5555)" 484 | read -r nz_grpc_port 485 | 486 | if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then 487 | err "所有选项都不能为空" 488 | before_show_menu 489 | return 1 490 | fi 491 | 492 | if [ -z "$nz_site_port" ]; then 493 | nz_site_port=8008 494 | fi 495 | if [ -z "$nz_grpc_port" ]; then 496 | nz_grpc_port=5555 497 | fi 498 | if [ -z "$nz_oauth2_type" ]; then 499 | nz_oauth2_type=github 500 | fi 501 | 502 | sed -i "s/nz_oauth2_type/${nz_oauth2_type}/" /tmp/nezha-config.yaml 503 | sed -i "s/nz_admin_logins/${nz_admin_logins}/" /tmp/nezha-config.yaml 504 | sed -i "s/nz_grpc_port/${nz_grpc_port}/" /tmp/nezha-config.yaml 505 | sed -i "s/nz_github_oauth_client_id/${nz_github_oauth_client_id}/" /tmp/nezha-config.yaml 506 | sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /tmp/nezha-config.yaml 507 | sed -i "s/nz_language/zh-CN/" /tmp/nezha-config.yaml 508 | sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml 509 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 510 | sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml 511 | sed -i "s/nz_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml 512 | sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml 513 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 514 | sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml 515 | fi 516 | 517 | sudo mkdir -p $NZ_DASHBOARD_PATH/data 518 | sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml 519 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 520 | sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml 521 | fi 522 | 523 | if [ "$IS_DOCKER_NEZHA" = 0 ]; then 524 | echo "正在下载服务文件" 525 | if [ "$os_alpine" != 1 ]; then 526 | _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/services/nezha-dashboard.service >/dev/null 2>&1" 527 | if ! eval "$_download"; then 528 | err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" 529 | return 0 530 | fi 531 | else 532 | _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/services/nezha-dashboard >/dev/null 2>&1" 533 | if ! eval "$_download"; then 534 | err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" 535 | return 0 536 | fi 537 | sudo chmod +x $NZ_DASHBOARD_SERVICERC 538 | fi 539 | fi 540 | 541 | success "Dashboard 配置 修改成功,请稍等 Dashboard 重启生效" 542 | 543 | restart_and_update 544 | 545 | if [ $# = 0 ]; then 546 | before_show_menu 547 | fi 548 | } 549 | 550 | restart_and_update() { 551 | echo "> 重启并更新面板" 552 | 553 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 554 | _cmd="restart_and_update_docker" 555 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 556 | _cmd="restart_and_update_standalone" 557 | fi 558 | 559 | if eval "$_cmd"; then 560 | success "哪吒监控 重启成功" 561 | info "默认管理面板地址:域名:站点访问端口" 562 | else 563 | err "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息" 564 | fi 565 | 566 | if [ $# = 0 ]; then 567 | before_show_menu 568 | fi 569 | } 570 | 571 | restart_and_update_docker() { 572 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull 573 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down 574 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d 575 | } 576 | 577 | restart_and_update_standalone() { 578 | _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') 579 | if [ -z "$_version" ]; then 580 | _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') 581 | fi 582 | if [ -z "$_version" ]; then 583 | _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') 584 | fi 585 | if [ -z "$_version" ]; then 586 | _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/nezha/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') 587 | fi 588 | 589 | if [ -z "$_version" ]; then 590 | err "获取 Dashboard 版本号失败,请检查本机能否链接 https://api.github.com/repos/naiba/nezha/releases/latest" 591 | return 1 592 | else 593 | echo "当前最新版本为: ${_version}" 594 | fi 595 | 596 | if [ "$os_alpine" != 1 ]; then 597 | sudo systemctl daemon-reload 598 | sudo systemctl stop nezha-dashboard 599 | else 600 | sudo rc-service nezha-dashboard stop 601 | fi 602 | 603 | if [ -z "$CN" ]; then 604 | NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" 605 | else 606 | NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" 607 | fi 608 | 609 | sudo wget -qO $NZ_DASHBOARD_PATH/app.zip "$NZ_DASHBOARD_URL" >/dev/null 2>&1 && sudo unzip -qq -o $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm $NZ_DASHBOARD_PATH/app.zip 610 | sudo chmod +x $NZ_DASHBOARD_PATH/app 611 | 612 | if [ "$os_alpine" != 1 ]; then 613 | sudo systemctl enable nezha-dashboard 614 | sudo systemctl restart nezha-dashboard 615 | else 616 | sudo rc-update add nezha-dashboard 617 | sudo rc-service nezha-dashboard restart 618 | fi 619 | } 620 | 621 | start_dashboard() { 622 | echo "> 启动面板" 623 | 624 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 625 | _cmd="start_dashboard_docker" 626 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 627 | _cmd="start_dashboard_standalone" 628 | fi 629 | 630 | if eval "$_cmd"; then 631 | success "哪吒监控 启动成功" 632 | else 633 | err "启动失败,请稍后查看日志信息" 634 | fi 635 | 636 | if [ $# = 0 ]; then 637 | before_show_menu 638 | fi 639 | } 640 | 641 | start_dashboard_docker() { 642 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d 643 | } 644 | 645 | start_dashboard_standalone() { 646 | if [ "$os_alpine" != 1 ]; then 647 | sudo systemctl start nezha-dashboard 648 | else 649 | sudo rc-service nezha-dashboard start 650 | fi 651 | } 652 | 653 | stop_dashboard() { 654 | echo "> 停止面板" 655 | 656 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 657 | _cmd="stop_dashboard_docker" 658 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 659 | _cmd="stop_dashboard_standalone" 660 | fi 661 | 662 | if eval "$_cmd"; then 663 | success "哪吒监控 停止成功" 664 | else 665 | err "停止失败,请稍后查看日志信息" 666 | fi 667 | 668 | if [ $# = 0 ]; then 669 | before_show_menu 670 | fi 671 | } 672 | 673 | stop_dashboard_docker() { 674 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down 675 | } 676 | 677 | stop_dashboard_standalone() { 678 | if [ "$os_alpine" != 1 ]; then 679 | sudo systemctl stop nezha-dashboard 680 | else 681 | sudo rc-service nezha-dashboard stop 682 | fi 683 | } 684 | 685 | show_dashboard_log() { 686 | echo "> 获取 Dashboard 日志" 687 | 688 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 689 | show_dashboard_log_docker 690 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 691 | show_dashboard_log_standalone 692 | fi 693 | 694 | if [ $# = 0 ]; then 695 | before_show_menu 696 | fi 697 | } 698 | 699 | show_dashboard_log_docker() { 700 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f 701 | } 702 | 703 | show_dashboard_log_standalone() { 704 | if [ "$os_alpine" != 1 ]; then 705 | sudo journalctl -xf -u nezha-dashboard.service 706 | else 707 | sudo tail -n 10 /var/log/nezha-dashboard.err 708 | fi 709 | } 710 | 711 | uninstall_dashboard() { 712 | echo "> 卸载 Dashboard" 713 | 714 | if [ "$IS_DOCKER_NEZHA" = 1 ]; then 715 | uninstall_dashboard_docker 716 | elif [ "$IS_DOCKER_NEZHA" = 0 ]; then 717 | uninstall_dashboard_standalone 718 | fi 719 | 720 | clean_all 721 | 722 | if [ $# = 0 ]; then 723 | before_show_menu 724 | fi 725 | } 726 | 727 | uninstall_dashboard_docker() { 728 | sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down 729 | sudo rm -rf $NZ_DASHBOARD_PATH 730 | sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 731 | sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 732 | } 733 | 734 | uninstall_dashboard_standalone() { 735 | sudo rm -rf $NZ_DASHBOARD_PATH 736 | 737 | if [ "$os_alpine" != 1 ]; then 738 | sudo systemctl disable nezha-dashboard 739 | sudo systemctl stop nezha-dashboard 740 | else 741 | sudo rc-update del nezha-dashboard 742 | sudo rc-service nezha-dashboard stop 743 | fi 744 | 745 | if [ "$os_alpine" != 1 ]; then 746 | sudo rm $NZ_DASHBOARD_SERVICE 747 | else 748 | sudo rm $NZ_DASHBOARD_SERVICERC 749 | fi 750 | } 751 | 752 | show_agent_log() { 753 | echo "> 获取 Agent 日志" 754 | 755 | if [ "$os_alpine" != 1 ]; then 756 | sudo journalctl -xf -u nezha-agent.service 757 | else 758 | sudo tail -n 10 /var/log/nezha-agent.err 759 | fi 760 | 761 | if [ $# = 0 ]; then 762 | before_show_menu 763 | fi 764 | } 765 | 766 | uninstall_agent() { 767 | echo "> 卸载 Agent" 768 | 769 | sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall 770 | 771 | sudo rm -rf $NZ_AGENT_PATH 772 | clean_all 773 | 774 | if [ $# = 0 ]; then 775 | before_show_menu 776 | fi 777 | } 778 | 779 | restart_agent() { 780 | echo "> 重启 Agent" 781 | 782 | sudo ${NZ_AGENT_PATH}/nezha-agent service restart 783 | 784 | if [ $# = 0 ]; then 785 | before_show_menu 786 | fi 787 | } 788 | 789 | clean_all() { 790 | if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then 791 | sudo rm -rf ${NZ_BASE_PATH} 792 | fi 793 | } 794 | 795 | show_usage() { 796 | echo "哪吒监控 管理脚本使用方法: " 797 | echo "--------------------------------------------------------" 798 | echo "./nezha.sh - 显示管理菜单" 799 | echo "./nezha.sh install_dashboard - 安装面板端" 800 | echo "./nezha.sh modify_dashboard_config - 修改面板配置" 801 | echo "./nezha.sh start_dashboard - 启动面板" 802 | echo "./nezha.sh stop_dashboard - 停止面板" 803 | echo "./nezha.sh restart_and_update - 重启并更新面板" 804 | echo "./nezha.sh show_dashboard_log - 查看面板日志" 805 | echo "./nezha.sh uninstall_dashboard - 卸载管理面板" 806 | echo "--------------------------------------------------------" 807 | echo "./nezha.sh install_agent - 安装监控Agent" 808 | echo "./nezha.sh modify_agent_config - 修改Agent配置" 809 | echo "./nezha.sh show_agent_log - 查看Agent日志" 810 | echo "./nezha.sh uninstall_agent - 卸载Agent" 811 | echo "./nezha.sh restart_agent - 重启Agent" 812 | echo "./nezha.sh update_script - 更新脚本" 813 | echo "--------------------------------------------------------" 814 | } 815 | 816 | show_menu() { 817 | printf " 818 | ${green}哪吒监控管理脚本${plain} 819 | --- https://github.com/naiba/nezha --- 820 | ${green}1.${plain} 安装面板端 821 | ${green}2.${plain} 修改面板配置 822 | ${green}3.${plain} 启动面板 823 | ${green}4.${plain} 停止面板 824 | ${green}5.${plain} 重启并更新面板 825 | ${green}6.${plain} 查看面板日志 826 | ${green}7.${plain} 卸载管理面板 827 | ————————————————- 828 | ${green}8.${plain} 安装监控Agent 829 | ${green}9.${plain} 修改Agent配置 830 | ${green}10.${plain} 查看Agent日志 831 | ${green}11.${plain} 卸载Agent 832 | ${green}12.${plain} 重启Agent 833 | ————————————————- 834 | ${green}13.${plain} 更新脚本 835 | ————————————————- 836 | ${green}0.${plain} 退出脚本 837 | " 838 | echo && printf "请输入选择 [0-13]: " && read -r num 839 | case "${num}" in 840 | 0) 841 | exit 0 842 | ;; 843 | 1) 844 | install_dashboard 845 | ;; 846 | 2) 847 | modify_dashboard_config 848 | ;; 849 | 3) 850 | start_dashboard 851 | ;; 852 | 4) 853 | stop_dashboard 854 | ;; 855 | 5) 856 | restart_and_update 857 | ;; 858 | 6) 859 | show_dashboard_log 860 | ;; 861 | 7) 862 | uninstall_dashboard 863 | ;; 864 | 8) 865 | install_agent 866 | ;; 867 | 9) 868 | modify_agent_config 869 | ;; 870 | 10) 871 | show_agent_log 872 | ;; 873 | 11) 874 | uninstall_agent 875 | ;; 876 | 12) 877 | restart_agent 878 | ;; 879 | 13) 880 | update_script 881 | ;; 882 | *) 883 | err "请输入正确的数字 [0-13]" 884 | ;; 885 | esac 886 | } 887 | 888 | pre_check 889 | installation_check 890 | 891 | if [ $# -gt 0 ]; then 892 | case $1 in 893 | "install_dashboard") 894 | install_dashboard 0 895 | ;; 896 | "modify_dashboard_config") 897 | modify_dashboard_config 0 898 | ;; 899 | "start_dashboard") 900 | start_dashboard 0 901 | ;; 902 | "stop_dashboard") 903 | stop_dashboard 0 904 | ;; 905 | "restart_and_update") 906 | restart_and_update 0 907 | ;; 908 | "show_dashboard_log") 909 | show_dashboard_log 0 910 | ;; 911 | "uninstall_dashboard") 912 | uninstall_dashboard 0 913 | ;; 914 | "install_agent") 915 | shift 916 | if [ $# -ge 3 ]; then 917 | install_agent "$@" 918 | else 919 | install_agent 0 920 | fi 921 | ;; 922 | "modify_agent_config") 923 | modify_agent_config 0 924 | ;; 925 | "show_agent_log") 926 | show_agent_log 0 927 | ;; 928 | "uninstall_agent") 929 | uninstall_agent 0 930 | ;; 931 | "restart_agent") 932 | restart_agent 0 933 | ;; 934 | "update_script") 935 | update_script 0 936 | ;; 937 | *) show_usage ;; 938 | esac 939 | else 940 | select_version 941 | show_menu 942 | fi 943 | --------------------------------------------------------------------------------