From 626a7d6059c78594edfd5fca12530021c65b1957 Mon Sep 17 00:00:00 2001 From: UUBulb <35923940+uubulb@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:07:14 +0800 Subject: [PATCH] apply upstream changes (#18) * apply upstream changes * update translations, fix i18n script * remove installation scripts and related files --- go.mod | 27 +- go.sum | 47 +- model/config.go | 31 +- pkg/i18n/template.pot | 24 +- .../translations/en_US/LC_MESSAGES/nezha.po | 24 +- .../translations/zh_CN/LC_MESSAGES/nezha.po | 24 +- .../translations/zh_TW/LC_MESSAGES/nezha.po | 24 +- script/docker-compose.yaml | 14 - script/i18n.sh | 16 +- script/install.command | 293 ------ script/install.ps1 | 87 -- script/install.sh | 955 ------------------ script/install_en.sh | 954 ----------------- script/nezha-dashboard | 18 - script/nezha-dashboard.service | 30 - 15 files changed, 110 insertions(+), 2458 deletions(-) delete mode 100644 script/docker-compose.yaml delete mode 100644 script/install.command delete mode 100644 script/install.ps1 delete mode 100755 script/install.sh delete mode 100755 script/install_en.sh delete mode 100755 script/nezha-dashboard delete mode 100644 script/nezha-dashboard.service diff --git a/go.mod b/go.mod index 039b515..2762647 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,10 @@ require ( github.com/hashicorp/go-uuid v1.0.3 github.com/jinzhu/copier v0.4.0 github.com/json-iterator/go v1.1.12 + github.com/knadh/koanf/parsers/yaml v0.1.0 + github.com/knadh/koanf/providers/env v1.0.0 + github.com/knadh/koanf/providers/file v1.1.2 + github.com/knadh/koanf/v2 v2.1.2 github.com/libdns/cloudflare v0.1.1 github.com/libdns/libdns v0.2.2 github.com/miekg/dns v1.1.62 @@ -23,7 +27,6 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/robfig/cron/v3 v3.0.1 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.18.2 github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag v1.16.4 @@ -34,9 +37,9 @@ require ( golang.org/x/sync v0.8.0 google.golang.org/grpc v1.67.1 google.golang.org/protobuf v1.35.1 + gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/sqlite v1.5.5 gorm.io/gorm v1.25.10 - sigs.k8s.io/yaml v1.4.0 ) require ( @@ -47,6 +50,7 @@ require ( github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.5 // indirect github.com/gin-contrib/sse v0.1.0 // indirect @@ -57,43 +61,36 @@ require ( github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect github.com/goccy/go-json v0.10.3 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect + github.com/knadh/koanf/maps v0.1.1 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.17 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/subosito/gotenv v1.6.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tidwall/sjson v1.2.5 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.9.0 // indirect golang.org/x/arch v0.9.0 // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/sys v0.26.0 // indirect golang.org/x/text v0.19.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0001ef3..cbecfde 100644 --- a/go.sum +++ b/go.sum @@ -26,8 +26,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0 h1:aYo8nnk3ojoQkP5iErif5Xxv0Mo0Ga/FR5+ffl/7+Nk= github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= @@ -63,6 +61,8 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91 github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= @@ -70,7 +70,6 @@ github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOW github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -78,8 +77,6 @@ github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/ github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= @@ -93,6 +90,16 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= +github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= +github.com/knadh/koanf/parsers/yaml v0.1.0 h1:ZZ8/iGfRLvKSaMEECEBPM1HQslrZADk8fP1XFUxVI5w= +github.com/knadh/koanf/parsers/yaml v0.1.0/go.mod h1:cvbUDC7AL23pImuQP0oRw/hPuccrNBS2bps8asS0CwY= +github.com/knadh/koanf/providers/env v1.0.0 h1:ufePaI9BnWH+ajuxGGiJ8pdTG0uLEUWC7/HDDPGLah0= +github.com/knadh/koanf/providers/env v1.0.0/go.mod h1:mzFyRZueYhb37oPmC1HAv/oGEEuyvJDA98r3XAa8Gak= +github.com/knadh/koanf/providers/file v1.1.2 h1:aCC36YGOgV5lTtAFz2qkgtWdeQsgfxUkxDOe+2nQY3w= +github.com/knadh/koanf/providers/file v1.1.2/go.mod h1:/faSBcv2mxPVjFrXck95qeoyoZ5myJ6uxN8OOVNJJCI= +github.com/knadh/koanf/v2 v2.1.2 h1:I2rtLRqXRy1p01m/utEtpZSSA6dcJbgGVuE27kW2PzQ= +github.com/knadh/koanf/v2 v2.1.2/go.mod h1:Gphfaen0q1Fc1HTgJgSTC4oRX9R2R5ErYMZJy8fLJBo= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -110,8 +117,6 @@ github.com/libdns/cloudflare v0.1.1 h1:FVPfWwP8zZCqj268LZjmkDleXlHPlFU9KC4OJ3yn0 github.com/libdns/cloudflare v0.1.1/go.mod h1:9VK91idpOjg6v7/WbjkEW49bSCxj00ALesIFDhJ8PBU= github.com/libdns/libdns v0.2.2 h1:O6ws7bAfRPaBsgAYt8MDe2HcNBGC29hkZ9MX2eUSX3s= github.com/libdns/libdns v0.2.2/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= @@ -123,8 +128,10 @@ github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6 github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -154,20 +161,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -180,8 +175,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= @@ -204,10 +197,6 @@ github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95 github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k= golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -274,8 +263,6 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= @@ -289,5 +276,3 @@ gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATa gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/model/config.go b/model/config.go index 9557cbb..c59dee4 100644 --- a/model/config.go +++ b/model/config.go @@ -5,9 +5,13 @@ import ( "strconv" "strings" + kyaml "github.com/knadh/koanf/parsers/yaml" + "github.com/knadh/koanf/providers/env" + "github.com/knadh/koanf/providers/file" + "github.com/knadh/koanf/v2" + "gopkg.in/yaml.v3" + "github.com/naiba/nezha/pkg/utils" - "github.com/spf13/viper" - "sigs.k8s.io/yaml" ) const ( @@ -44,19 +48,30 @@ type Config struct { CustomCode string `mapstructure:"custom_code" json:"custom_code,omitempty"` CustomCodeDashboard string `mapstructure:"custom_code_dashboard" json:"custom_code_dashboard,omitempty"` - v *viper.Viper `json:"-"` + k *koanf.Koanf `json:"-"` + filePath string `json:"-"` } // Read 读取配置文件并应用 func (c *Config) Read(path string) error { - c.v = viper.New() - c.v.SetConfigFile(path) - err := c.v.ReadInConfig() + c.k = koanf.New(".") + c.filePath = path + + err := c.k.Load(env.Provider("NZ_", ".", func(s string) string { + return strings.Replace(strings.ToLower(strings.TrimPrefix(s, "NZ_")), "_", ".", -1) + }), nil) if err != nil { return err } - err = c.v.Unmarshal(c) + if _, err := os.Stat(path); err == nil { + err = c.k.Load(file.Provider(path), kyaml.Parser()) + if err != nil { + return err + } + } + + err = c.k.Unmarshal("", c) if err != nil { return err } @@ -116,5 +131,5 @@ func (c *Config) Save() error { if err != nil { return err } - return os.WriteFile(c.v.ConfigFileUsed(), data, 0600) + return os.WriteFile(c.filePath, data, 0600) } diff --git a/pkg/i18n/template.pot b/pkg/i18n/template.pot index 46b419a..3c75e7b 100644 --- a/pkg/i18n/template.pot +++ b/pkg/i18n/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-01 13:32+0800\n" +"POT-Creation-Date: 2024-11-23 23:56+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -42,7 +42,7 @@ msgstr "" msgid "need to configure at least a single rule" msgstr "" -#: cmd/dashboard/controller/controller.go:188 +#: cmd/dashboard/controller/controller.go:195 msgid "database error" msgstr "" @@ -93,7 +93,7 @@ msgstr "" msgid "group id %d does not exist" msgstr "" -#: cmd/dashboard/controller/server.go:59 +#: cmd/dashboard/controller/server.go:60 #, c-format msgid "server id %d does not exist" msgstr "" @@ -108,7 +108,7 @@ msgstr "" msgid "server not found" msgstr "" -#: cmd/dashboard/controller/service.go:86 +#: cmd/dashboard/controller/service.go:86 cmd/dashboard/controller/user.go:23 msgid "unauthorized" msgstr "" @@ -117,11 +117,11 @@ msgstr "" msgid "service id %d does not exist" msgstr "" -#: cmd/dashboard/controller/user.go:45 +#: cmd/dashboard/controller/user.go:66 msgid "password length must be greater than 6" msgstr "" -#: cmd/dashboard/controller/user.go:48 +#: cmd/dashboard/controller/user.go:69 msgid "username can't be empty" msgstr "" @@ -137,15 +137,15 @@ msgstr "" msgid "timeout: agent connection not established" msgstr "" -#: service/rpc/nezha.go:57 +#: service/rpc/nezha.go:58 msgid "Scheduled Task Executed Successfully" msgstr "" -#: service/rpc/nezha.go:61 +#: service/rpc/nezha.go:62 msgid "Scheduled Task Executed Failed" msgstr "" -#: service/rpc/nezha.go:156 +#: service/rpc/nezha.go:217 msgid "IP Changed" msgstr "" @@ -157,16 +157,16 @@ msgstr "" msgid "Resolved" msgstr "" -#: service/singleton/crontask.go:52 +#: service/singleton/crontask.go:53 msgid "Tasks failed to register: [" msgstr "" -#: service/singleton/crontask.go:59 +#: service/singleton/crontask.go:60 msgid "" "] These tasks will not execute properly. Fix them in the admin dashboard." msgstr "" -#: service/singleton/crontask.go:150 service/singleton/crontask.go:175 +#: service/singleton/crontask.go:146 service/singleton/crontask.go:171 #, c-format msgid "[Task failed] %s: server %s is offline and cannot execute the task" msgstr "" diff --git a/pkg/i18n/translations/en_US/LC_MESSAGES/nezha.po b/pkg/i18n/translations/en_US/LC_MESSAGES/nezha.po index 5ac1dcf..e44ac4a 100644 --- a/pkg/i18n/translations/en_US/LC_MESSAGES/nezha.po +++ b/pkg/i18n/translations/en_US/LC_MESSAGES/nezha.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-01 13:14+0800\n" +"POT-Creation-Date: 2024-11-23 23:56+0800\n" "PO-Revision-Date: 2024-11-01 13:20+0800\n" "Last-Translator: \n" "Language-Team: \n" @@ -43,7 +43,7 @@ msgstr "cycle_start is a future value" msgid "need to configure at least a single rule" msgstr "need to configure at least a single rule" -#: cmd/dashboard/controller/controller.go:188 +#: cmd/dashboard/controller/controller.go:195 msgid "database error" msgstr "database error" @@ -94,7 +94,7 @@ msgstr "have invalid notification id" msgid "group id %d does not exist" msgstr "group id %d does not exist" -#: cmd/dashboard/controller/server.go:59 +#: cmd/dashboard/controller/server.go:60 #, c-format msgid "server id %d does not exist" msgstr "server id %d does not exist" @@ -109,7 +109,7 @@ msgstr "have invalid server id" msgid "server not found" msgstr "server not found" -#: cmd/dashboard/controller/service.go:86 +#: cmd/dashboard/controller/service.go:86 cmd/dashboard/controller/user.go:23 msgid "unauthorized" msgstr "unauthorized" @@ -118,11 +118,11 @@ msgstr "unauthorized" msgid "service id %d does not exist" msgstr "service id %d does not exist" -#: cmd/dashboard/controller/user.go:45 +#: cmd/dashboard/controller/user.go:66 msgid "password length must be greater than 6" msgstr "password length must be greater than 6" -#: cmd/dashboard/controller/user.go:48 +#: cmd/dashboard/controller/user.go:69 msgid "username can't be empty" msgstr "username can't be empty" @@ -138,15 +138,15 @@ msgstr "timeout: user connection not established" msgid "timeout: agent connection not established" msgstr "timeout: agent connection not established" -#: service/rpc/nezha.go:57 +#: service/rpc/nezha.go:58 msgid "Scheduled Task Executed Successfully" msgstr "Scheduled Task Executed Successfully" -#: service/rpc/nezha.go:61 +#: service/rpc/nezha.go:62 msgid "Scheduled Task Executed Failed" msgstr "Scheduled Task Executed Failed" -#: service/rpc/nezha.go:156 +#: service/rpc/nezha.go:217 msgid "IP Changed" msgstr "IP Changed" @@ -158,17 +158,17 @@ msgstr "Incident" msgid "Resolved" msgstr "Resolved" -#: service/singleton/crontask.go:52 +#: service/singleton/crontask.go:53 msgid "Tasks failed to register: [" msgstr "Tasks failed to register: [" -#: service/singleton/crontask.go:59 +#: service/singleton/crontask.go:60 msgid "" "] These tasks will not execute properly. Fix them in the admin dashboard." msgstr "" "] These tasks will not execute properly. Fix them in the admin dashboard." -#: service/singleton/crontask.go:150 service/singleton/crontask.go:175 +#: service/singleton/crontask.go:146 service/singleton/crontask.go:171 #, c-format msgid "[Task failed] %s: server %s is offline and cannot execute the task" msgstr "[Task failed] %s: server %s is offline and cannot execute the task" diff --git a/pkg/i18n/translations/zh_CN/LC_MESSAGES/nezha.po b/pkg/i18n/translations/zh_CN/LC_MESSAGES/nezha.po index 13afae4..e362503 100644 --- a/pkg/i18n/translations/zh_CN/LC_MESSAGES/nezha.po +++ b/pkg/i18n/translations/zh_CN/LC_MESSAGES/nezha.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-01 13:14+0800\n" +"POT-Creation-Date: 2024-11-23 23:56+0800\n" "PO-Revision-Date: 2024-11-01 13:20+0800\n" "Last-Translator: \n" "Language-Team: \n" @@ -43,7 +43,7 @@ msgstr "cycle_start 是未来值" msgid "need to configure at least a single rule" msgstr "需要至少定义一条规则" -#: cmd/dashboard/controller/controller.go:188 +#: cmd/dashboard/controller/controller.go:195 msgid "database error" msgstr "数据库错误" @@ -94,7 +94,7 @@ msgstr "通知方式 id 无效" msgid "group id %d does not exist" msgstr "组 id %d 不存在" -#: cmd/dashboard/controller/server.go:59 +#: cmd/dashboard/controller/server.go:60 #, c-format msgid "server id %d does not exist" msgstr "服务器 id %d 不存在" @@ -109,7 +109,7 @@ msgstr "服务器 id 无效" msgid "server not found" msgstr "未找到服务器" -#: cmd/dashboard/controller/service.go:86 +#: cmd/dashboard/controller/service.go:86 cmd/dashboard/controller/user.go:23 msgid "unauthorized" msgstr "未授权" @@ -118,11 +118,11 @@ msgstr "未授权" msgid "service id %d does not exist" msgstr "服务 id %d 不存在" -#: cmd/dashboard/controller/user.go:45 +#: cmd/dashboard/controller/user.go:66 msgid "password length must be greater than 6" msgstr "密码长度必须大于 6" -#: cmd/dashboard/controller/user.go:48 +#: cmd/dashboard/controller/user.go:69 msgid "username can't be empty" msgstr "用户名不能为空" @@ -138,15 +138,15 @@ msgstr "超时:用户连接未建立" msgid "timeout: agent connection not established" msgstr "超时:agent 连接未建立" -#: service/rpc/nezha.go:57 +#: service/rpc/nezha.go:58 msgid "Scheduled Task Executed Successfully" msgstr "计划任务执行成功" -#: service/rpc/nezha.go:61 +#: service/rpc/nezha.go:62 msgid "Scheduled Task Executed Failed" msgstr "计划任务执行失败" -#: service/rpc/nezha.go:156 +#: service/rpc/nezha.go:217 msgid "IP Changed" msgstr "IP 变更" @@ -158,16 +158,16 @@ msgstr "事件" msgid "Resolved" msgstr "恢复" -#: service/singleton/crontask.go:52 +#: service/singleton/crontask.go:53 msgid "Tasks failed to register: [" msgstr "注册失败的任务:[" -#: service/singleton/crontask.go:59 +#: service/singleton/crontask.go:60 msgid "" "] These tasks will not execute properly. Fix them in the admin dashboard." msgstr "这些任务将无法正常执行,请进入后台重新修改保存。" -#: service/singleton/crontask.go:150 service/singleton/crontask.go:175 +#: service/singleton/crontask.go:146 service/singleton/crontask.go:171 #, c-format msgid "[Task failed] %s: server %s is offline and cannot execute the task" msgstr "[任务失败] %s,服务器 %s 离线,无法执行" diff --git a/pkg/i18n/translations/zh_TW/LC_MESSAGES/nezha.po b/pkg/i18n/translations/zh_TW/LC_MESSAGES/nezha.po index 32f46f8..a45ced3 100644 --- a/pkg/i18n/translations/zh_TW/LC_MESSAGES/nezha.po +++ b/pkg/i18n/translations/zh_TW/LC_MESSAGES/nezha.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-01 13:14+0800\n" +"POT-Creation-Date: 2024-11-23 23:56+0800\n" "PO-Revision-Date: 2024-11-01 13:19+0800\n" "Last-Translator: \n" "Language-Team: \n" @@ -43,7 +43,7 @@ msgstr "cycle_start 是未來值" msgid "need to configure at least a single rule" msgstr "需要至少定義一條規則" -#: cmd/dashboard/controller/controller.go:188 +#: cmd/dashboard/controller/controller.go:195 msgid "database error" msgstr "資料庫錯誤" @@ -94,7 +94,7 @@ msgstr "通知方式 id 無效" msgid "group id %d does not exist" msgstr "組 id %d 不存在" -#: cmd/dashboard/controller/server.go:59 +#: cmd/dashboard/controller/server.go:60 #, c-format msgid "server id %d does not exist" msgstr "伺服器 id %d 不存在" @@ -109,7 +109,7 @@ msgstr "伺服器 id 無效" msgid "server not found" msgstr "未找到伺服器" -#: cmd/dashboard/controller/service.go:86 +#: cmd/dashboard/controller/service.go:86 cmd/dashboard/controller/user.go:23 msgid "unauthorized" msgstr "未授權" @@ -118,11 +118,11 @@ msgstr "未授權" msgid "service id %d does not exist" msgstr "服務 id %d 不存在" -#: cmd/dashboard/controller/user.go:45 +#: cmd/dashboard/controller/user.go:66 msgid "password length must be greater than 6" msgstr "密碼長度必須大於 6" -#: cmd/dashboard/controller/user.go:48 +#: cmd/dashboard/controller/user.go:69 msgid "username can't be empty" msgstr "使用者名稱不能為空" @@ -138,15 +138,15 @@ msgstr "超時:使用者連線未建立" msgid "timeout: agent connection not established" msgstr "超時:agent 連線未建立" -#: service/rpc/nezha.go:57 +#: service/rpc/nezha.go:58 msgid "Scheduled Task Executed Successfully" msgstr "排程任務執行成功" -#: service/rpc/nezha.go:61 +#: service/rpc/nezha.go:62 msgid "Scheduled Task Executed Failed" msgstr "排程任務執行失敗" -#: service/rpc/nezha.go:156 +#: service/rpc/nezha.go:217 msgid "IP Changed" msgstr "IP 變更" @@ -158,16 +158,16 @@ msgstr "事件" msgid "Resolved" msgstr "恢復" -#: service/singleton/crontask.go:52 +#: service/singleton/crontask.go:53 msgid "Tasks failed to register: [" msgstr "註冊失敗的任務:[" -#: service/singleton/crontask.go:59 +#: service/singleton/crontask.go:60 msgid "" "] These tasks will not execute properly. Fix them in the admin dashboard." msgstr "這些任務將無法正常執行,請進入後台重新修改儲存。" -#: service/singleton/crontask.go:150 service/singleton/crontask.go:175 +#: service/singleton/crontask.go:146 service/singleton/crontask.go:171 #, c-format msgid "[Task failed] %s: server %s is offline and cannot execute the task" msgstr "[任務失敗] %s,伺服器 %s 離線,無法執行" diff --git a/script/docker-compose.yaml b/script/docker-compose.yaml deleted file mode 100644 index 80de003..0000000 --- a/script/docker-compose.yaml +++ /dev/null @@ -1,14 +0,0 @@ -version: "3.3" - -services: - dashboard: - image: nz_image_url - restart: always - volumes: - - ./data:/dashboard/data - - ./static-custom/static:/dashboard/resource/static/custom:ro - - ./theme-custom/template:/dashboard/resource/template/theme-custom:ro - - ./dashboard-custom/template:/dashboard/resource/template/dashboard-custom:ro - ports: - - nz_site_port:80 - - nz_grpc_port:nz_grpc_port diff --git a/script/i18n.sh b/script/i18n.sh index e25ea81..6638bf8 100755 --- a/script/i18n.sh +++ b/script/i18n.sh @@ -1,7 +1,6 @@ #!/bin/bash -LANG=() -while IFS='' read -r line; do LANG+=("$line"); done < <(ls pkg/i18n/translations) +mapfile -t LANG < <(ls pkg/i18n/translations) TEMPLATE="pkg/i18n/template.pot" PODIR="pkg/i18n/translations/%s/LC_MESSAGES" GIT_ROOT=$(git rev-parse --show-toplevel) @@ -38,7 +37,7 @@ generate() { } generate_template() { - read -ra src < <(find . -name "*.go" | sort) + mapfile -t src < <(find . -name "*.go" | sort) xgettext -C --add-comments=TRANSLATORS: -kErrorT -kT -kTf -kN:1,2 --from-code=UTF-8 -o $TEMPLATE "${src[@]}" } @@ -52,7 +51,7 @@ generate_en() { } compile() { - if [[ $# != 0 ]]; then + if [[ $# != 0 && "$1" != "" ]]; then compile_single "$1" else compile_all @@ -95,7 +94,7 @@ compile_all() { } update() { - if [[ $# != 0 ]]; then + if [[ $# != 0 && "$1" != "" ]]; then update_single "$1" else update_all @@ -148,7 +147,14 @@ show_help() { echo " $0 generate en # Generate en_US locale" } +version() { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; } + main() { + if [[ $(version "$BASH_VERSION") < $(version "4.0") ]]; then + err "This version of bash does not support mapfile" + exit 1 + fi + if [[ $PWD != "$GIT_ROOT" ]]; then err "Must execute in the project root" exit 1 diff --git a/script/install.command b/script/install.command deleted file mode 100644 index 1fca989..0000000 --- a/script/install.command +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash - -#======================================================== -# System Required: macOS 10.13+ -# Description: Nezha Agent Install Script (macOS) -# Github: https://github.com/naiba/nezha -#======================================================== - -NZ_BASE_PATH="/opt/nezha" -NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" - -red='\033[0;31m' -green='\033[0;32m' -yellow='\033[0;33m' -plain='\033[0m' -export PATH=$PATH:/usr/local/bin - -pre_check() { - # check root - [[ $EUID -ne 0 ]] && echo -e "${red}ERROR: ${plain} This script must be run with the root user!\n" && exit 1 - - ## os_arch - if [[ $(uname -m | grep 'x86_64') != "" ]]; then - os_arch="amd64" - elif [[ $(uname -m | grep 'arm64\|arm64e') != "" ]]; then - os_arch="arm64" - fi - - ## China_IP - if [[ -z "${CN}" ]]; then - if [[ $(curl -m 10 -s http://ip-api.com/json |grep 'country' |grep -q 'China') != "" ]]; then - echo "According to the information provided by ip-api.com, the current IP may be in China" - read -e -r -p "Is the installation done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3):" input - case $input in - [yY][eE][sS] | [yY]) - echo "Use Chinese Mirror" - CN=true - ;; - - [nN][oO] | [nN]) - echo "No Use Chinese Mirror" - ;; - - [3]) - echo "Use Custom Mirror" - read -e -r -p "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io), leave blank to nouse: " input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - - ;; - *) - echo "No Use Chinese Mirror" - ;; - esac - fi - fi - - if [[ -n "${CUSTOM_MIRROR}" ]]; then - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL=$CUSTOM_MIRROR - else - if [[ -z "${CN}" ]]; then - GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master" - GITHUB_URL="github.com" - else - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL="gitee.com" - fi - fi -} - -before_show_menu() { - echo && echo -n -e "${yellow}* Press Enter to return to the main menu *${plain}" && read temp - show_menu -} - -install_agent() { - echo -e "> Install Nezha Agent" - - echo -e "Obtaining Agent version" - - local 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') - if [ ! -n "$version" ]; then - 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)}}}') - fi - if [ ! -n "$version" ]; then - 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') - fi - if [ ! -n "$version" ]; then - 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') - fi - - if [ ! -n "$version" ]; then - echo -e "Fail to obtaine agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest" - return 0 - else - echo -e "The current latest version is: ${version}" - fi - - # Nezha Agent Folder - mkdir -p $NZ_AGENT_PATH - chmod -R 777 $NZ_AGENT_PATH - - echo -e "Downloading Agent" - if [[ -z $CN ]]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${version}/nezha-agent_darwin_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${version}/nezha-agent_darwin_${os_arch}.zip" - fi - curl -o nezha-agent_darwin_${os_arch}.zip -L -f --retry 2 --retry-max-time 60 $NZ_AGENT_URL >/dev/null 2>&1 - if [[ $? != 0 ]]; then - echo -e "${red}Fail to download agent, please check if the network can link ${GITHUB_URL}${plain}" - return 0 - fi - - unzip -qo nezha-agent_darwin_${os_arch}.zip && - mv nezha-agent $NZ_AGENT_PATH && - rm -rf nezha-agent_darwin_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -modify_agent_config() { - echo -e "> Modify Agent Configuration" - - if [ $# -lt 3 ]; then - echo "Please add Agent in the admin panel first, record the secret" && - read -ep "Please enter a domain that resolves to the IP where the panel is located (no CDN sets): " nz_grpc_host && - read -ep "Please enter the panel RPC port (default 5555): " nz_grpc_port && - read -ep "Please enter the Agent secret: " nz_client_secret && - read -ep "Do you want to enable SSL/TLS encryption for the gRPC port (--tls)? Press [y] if yes, the default is not required, and users can press Enter to skip if you don't understand: " nz_grpc_proxy - grep -qiw 'Y' <<<"${nz_grpc_proxy}" && args='--tls' - if [[ -z "${nz_grpc_host}" || -z "${nz_client_secret}" ]]; then - echo -e "${red}All options cannot be empty${plain}" - before_show_menu - return 1 - fi - if [[ -z "${nz_grpc_port}" ]]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args=" $*" - fi - fi - - ${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 - - if [ $? -ne 0 ]; then - ${NZ_AGENT_PATH}/nezha-agent service uninstall >/dev/null 2>&1 - ${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 - fi - - echo -e "Agent configuration ${green} modified successfully, please wait for agent self-restart to take effect${plain}" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -show_agent_log() { - echo -e "> > View Agent Log" - - tail -n 10 /var/log/nezha-agent.err.log - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -uninstall_agent() { - echo -e "> Uninstall Agent" - - ${NZ_AGENT_PATH}/nezha-agent service uninstall - - rm -rf $NZ_AGENT_PATH - clean_all - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -restart_agent() { - echo -e "> Restart Agent" - - ${NZ_AGENT_PATH}/nezha-agent service restart - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - rm -rf ${NZ_BASE_PATH} - fi -} - -show_usage() { - echo "Nezha Agent Management Script Usage: " - echo "--------------------------------------------------------" - echo "./nezha.sh install_agent - Install Agent" - echo "./nezha.sh modify_agent_config - Modify Agent Configuration" - echo "./nezha.sh show_agent_log - View Agent Log" - echo "./nezha.sh uninstall_agent - Uninstall Agent" - echo "./nezha.sh restart_agent - Restart Agent" - echo "./nezha.sh update_script - Update Script" - echo "--------------------------------------------------------" -} - -show_menu() { - echo -e " - ${green}Nezha Agent Management Script${plain} ${red}macOS${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} Install Agent - ${green}2.${plain} Modify Agent Configuration - ${green}3.${plain} View Agent Log - ${green}4.${plain} Uninstall Agent - ${green}5.${plain} Restart Agent - ————————————————- - ${green}0.${plain} Exit Script - " - echo && read -ep "Please enter [0-5]: " num - case "${num}" in - 0) - exit 0 - ;; - 1) - install_agent - ;; - 2) - modify_agent_config - ;; - 3) - show_agent_log - ;; - 4) - uninstall_agent - ;; - 5) - restart_agent - ;; - *) - echo -e "${red}Please enter the correct number [0-5]${plain}" - ;; - esac -} - -pre_check - -if [[ $# > 0 ]]; then - case $1 in - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 - ;; - "restart_agent") - restart_agent 0 - ;; - *) show_usage ;; - esac -else - show_menu -fi \ No newline at end of file diff --git a/script/install.ps1 b/script/install.ps1 deleted file mode 100644 index af8ba36..0000000 --- a/script/install.ps1 +++ /dev/null @@ -1,87 +0,0 @@ -#Get server and key -param($server, $key, $tls) -# Download latest release from github -if($PSVersionTable.PSVersion.Major -lt 5){ - Write-Host "Require PS >= 5,your PSVersion:"$PSVersionTable.PSVersion.Major -BackgroundColor DarkGreen -ForegroundColor White - Write-Host "Refer to the community article and install manually! https://nyko.me/2020/12/13/nezha-windows-client.html" -BackgroundColor DarkRed -ForegroundColor Green - exit -} -$agentrepo = "nezhahq/agent" -# x86 or x64 or arm64 -if ([System.Environment]::Is64BitOperatingSystem) { - if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { - $file = "nezha-agent_windows_arm64.zip" - } else { - $file = "nezha-agent_windows_amd64.zip" - } -} -else { - $file = "nezha-agent_windows_386.zip" -} -$agentreleases = "https://api.github.com/repos/$agentrepo/releases" -#重复运行自动更新 -if (Test-Path "C:\nezha\nezha-agent.exe") { - Write-Host "Nezha monitoring already exists, delete and reinstall" -BackgroundColor DarkGreen -ForegroundColor White - C:\nezha\nezha-agent.exe service uninstall - Remove-Item "C:\nezha" -Recurse -} -#TLS/SSL -Write-Host "Determining latest nezha release" -BackgroundColor DarkGreen -ForegroundColor White -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -$agenttag = (Invoke-WebRequest -Uri $agentreleases -UseBasicParsing | ConvertFrom-Json)[0].tag_name -if ([string]::IsNullOrWhiteSpace($agenttag)) { - $optionUrl = "https://fastly.jsdelivr.net/gh/nezhahq/agent/" - Try { - $response = Invoke-WebRequest -Uri $optionUrl -UseBasicParsing -TimeoutSec 10 - if ($response.StatusCode -eq 200) { - $versiontext = $response.Content | findstr /c:"option.value" - $version = [regex]::Match($versiontext, "@(\d+\.\d+\.\d+)").Groups[1].Value - $agenttag = "v" + $version - } - } Catch { - $optionUrl = "https://gcore.jsdelivr.net/gh/nezhahq/agent/" - $response = Invoke-WebRequest -Uri $optionUrl -UseBasicParsing -TimeoutSec 10 - if ($response.StatusCode -eq 200) { - $versiontext = $response.Content | findstr /c:"option.value" - $version = [regex]::Match($versiontext, "@(\d+\.\d+\.\d+)").Groups[1].Value - $agenttag = "v" + $version - } - } -} -#Region判断 -$ipapi = "" -$region = "Unknown" -foreach ($url in ("https://dash.cloudflare.com/cdn-cgi/trace","https://developers.cloudflare.com/cdn-cgi/trace","https://1.0.0.1/cdn-cgi/trace")) { - try { - $ipapi = Invoke-RestMethod -Uri $url -TimeoutSec 5 -UseBasicParsing - if ($ipapi -match "loc=(\w+)" ) { - $region = $Matches[1] - break - } - } - catch { - Write-Host "Error occurred while querying $url : $_" - } -} -echo $ipapi -if($region -ne "CN"){ -$download = "https://github.com/$agentrepo/releases/download/$agenttag/$file" -Write-Host "Location:$region,connect directly!" -BackgroundColor DarkRed -ForegroundColor Green -}else{ -$download = "https://gitee.com/naibahq/agent/releases/download/$agenttag/$file" -Write-Host "Location:CN,use mirror address" -BackgroundColor DarkRed -ForegroundColor Green -} -echo $download -Invoke-WebRequest $download -OutFile "C:\nezha.zip" -#解压 -Expand-Archive "C:\nezha.zip" -DestinationPath "C:\temp" -Force -if (!(Test-Path "C:\nezha")) { New-Item -Path "C:\nezha" -type directory } -#整理文件 -Move-Item -Path "C:\temp\nezha-agent.exe" -Destination "C:\nezha\nezha-agent.exe" -#清理垃圾 -Remove-Item "C:\nezha.zip" -Remove-Item "C:\temp" -Recurse -#安装部分 -C:\nezha\nezha-agent.exe service install -s $server -p $key $tls -#enjoy -Write-Host "Enjoy It!" -BackgroundColor DarkGreen -ForegroundColor Red \ No newline at end of file diff --git a/script/install.sh b/script/install.sh deleted file mode 100755 index 410569a..0000000 --- a/script/install.sh +++ /dev/null @@ -1,955 +0,0 @@ -#!/bin/sh - -#======================================================== -# System Required: CentOS 7+ / Debian 8+ / Ubuntu 16+ / Alpine 3+ / -# Arch 仅测试了一次,如有问题带截图反馈 dysf888@pm.me -# Description: 哪吒监控安装脚本 -# Github: https://github.com/naiba/nezha -#======================================================== - -NZ_BASE_PATH="/opt/nezha" -NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" -NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" -NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" -NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" -NZ_VERSION="v0.20.2" - -red='\033[0;31m' -green='\033[0;32m' -yellow='\033[0;33m' -plain='\033[0m' -export PATH="$PATH:/usr/local/bin" - -os_arch="" -[ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1' - -sudo() { - myEUID=$(id -ru) - if [ "$myEUID" -ne 0 ]; then - if command -v sudo > /dev/null 2>&1; then - command sudo "$@" - else - err "错误: 您的系统未安装 sudo,因此无法进行该项操作。" - exit 1 - fi - else - "$@" - fi -} - -check_systemd() { - if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then - echo "不支持此系统:未找到 systemctl 命令" - exit 1 - fi -} - -err() { - printf "${red}%s${plain}\n" "$*" >&2 -} - -success() { - printf "${green}%s${plain}\n" "$*" -} - -info() { - printf "${yellow}%s${plain}\n" "$*" -} - -geo_check() { - api_list="https://blog.cloudflare.com/cdn-cgi/trace https://dash.cloudflare.com/cdn-cgi/trace https://developers.cloudflare.com/cdn-cgi/trace" - ua="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0" - set -- "$api_list" - for url in $api_list; do - text="$(curl -A "$ua" -m 10 -s "$url")" - endpoint="$(echo "$text" | sed -n 's/.*h=\([^ ]*\).*/\1/p')" - if echo "$text" | grep -qw 'CN'; then - isCN=true - break - elif echo "$url" | grep -q "$endpoint"; then - break - fi - done -} - -pre_check() { - umask 077 - - ## os_arch - if uname -m | grep -q 'x86_64'; then - os_arch="amd64" - elif uname -m | grep -q 'i386\|i686'; then - os_arch="386" - elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then - os_arch="arm64" - elif uname -m | grep -q 'arm'; then - os_arch="arm" - elif uname -m | grep -q 's390x'; then - os_arch="s390x" - elif uname -m | grep -q 'riscv64'; then - os_arch="riscv64" - fi - - ## China_IP - if [ -z "$CN" ]; then - geo_check - if [ -n "$isCN" ]; then - echo "根据geoip api提供的信息,当前IP可能在中国" - printf "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "使用中国镜像" - CN=true - ;; - - [nN][oO] | [nN]) - echo "不使用中国镜像" - ;; - - [3]) - echo "使用自定义镜像" - printf "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用: " - read -r input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - - ;; - *) - echo "使用中国镜像" - CN=true - ;; - esac - fi - fi - - if [ -n "$CUSTOM_MIRROR" ]; then - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL=$CUSTOM_MIRROR - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - else - if [ -z "$CN" ]; then - GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master" - GITHUB_URL="github.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" " - Docker_IMG="ghcr.io\/naiba\/nezha-dashboard" - else - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL="gitee.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - fi - fi -} - -installation_check() { - if docker compose version >/dev/null 2>&1; then - DOCKER_COMPOSE_COMMAND="docker compose" - if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") - if [ -n "$NEZHA_IMAGES" ]; then - echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" - fi - fi - elif command -v docker-compose >/dev/null 2>&1; then - DOCKER_COMPOSE_COMMAND="docker-compose" - if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") - if [ -n "$NEZHA_IMAGES" ]; then - echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" - fi - fi - fi - - if [ -f "$NZ_DASHBOARD_PATH/app" ]; then - IS_DOCKER_NEZHA=0 - FRESH_INSTALL=0 - fi -} - -select_version() { - if [ -z "$IS_DOCKER_NEZHA" ]; then - info "请自行选择您的安装方式(如果你是安装Agent,输入哪个都是一样的):" - info "1. Docker" - info "2. 独立安装" - while true; do - printf "请输入选择 [1-2]:" - read -r option - case "${option}" in - 1) - IS_DOCKER_NEZHA=1 - break - ;; - 2) - IS_DOCKER_NEZHA=0 - break - ;; - *) - err "请输入正确的选择 [1-2]" - ;; - esac - done - fi -} - -update_script() { - echo "> 更新脚本" - - curl -sL https://${GITHUB_RAW_URL}/script/install.sh -o /tmp/nezha.sh - new_version=$(grep "NZ_VERSION" /tmp/nezha.sh | head -n 1 | awk -F "=" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ -z "$new_version" ]; then - echo "脚本获取失败,请检查本机能否链接 https://${GITHUB_RAW_URL}/script/install.sh" - return 1 - fi - echo "当前最新版本为: ${new_version}" - mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh - - echo "3s后执行新脚本" - sleep 3s - clear - exec ./nezha.sh - exit 0 -} - -before_show_menu() { - echo && info "* 按回车返回主菜单 *" && read temp - show_menu -} - -install_base() { - (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) || - (install_soft curl wget unzip) -} - -install_arch() { - info "提示:Arch安装libselinux需添加nezha-agent用户,安装完会自动删除,建议手动检查一次" - read -r -p "是否安装libselinux? [Y/n] " input - case $input in - [yY][eE][sS] | [yY]) - useradd -m nezha-agent - sed -i "$ a\nezha-agent ALL=(ALL ) NOPASSWD:ALL" /etc/sudoers - sudo -iu nezha-agent bash -c 'gpg --keyserver keys.gnupg.net --recv-keys 4695881C254508D1; - cd /tmp; git clone https://aur.archlinux.org/libsepol.git; cd libsepol; makepkg -si --noconfirm --asdeps; cd ..; - git clone https://aur.archlinux.org/libselinux.git; cd libselinux; makepkg -si --noconfirm; cd ..; - rm -rf libsepol libselinux' - sed -i '/nezha-agent/d' /etc/sudoers && sleep 30s && killall -u nezha-agent && userdel -r nezha-agent - echo -e "${red}提示: ${plain}已删除用户nezha-agent,请务必手动核查一遍!\n" - ;; - [nN][oO] | [nN]) - echo "不安装libselinux" - ;; - *) - echo "不安装libselinux" - exit 0 - ;; - esac -} - -install_soft() { - (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install "$@" selinux-policy -y) || - (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install "$@" selinux-utils -y) || - (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu "$@" base-devel --noconfirm && install_arch) || - (command -v apt-get >/dev/null 2>&1 && sudo apt-get update && sudo apt-get install "$@" selinux-utils -y) || - (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add "$@" -f) -} - -install_dashboard() { - check_systemd - install_base - - echo "> 安装面板" - - # 哪吒监控文件夹 - if [ ! "$FRESH_INSTALL" = 0 ]; then - sudo mkdir -p $NZ_DASHBOARD_PATH - else - echo "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。" - printf "是否退出安装? [Y/n] " - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "退出安装" - exit 0 - ;; - [nN][oO] | [nN]) - echo "继续安装" - ;; - *) - echo "退出安装" - exit 0 - ;; - esac - fi - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - install_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - install_dashboard_standalone - fi - - modify_dashboard_config 0 - - if [ $# = 0 ]; then - before_show_menu - fi -} - -install_dashboard_docker() { - if [ ! "$FRESH_INSTALL" = 0 ]; then - if ! command -v docker >/dev/null 2>&1; then - echo "正在安装 Docker" - if [ "$os_alpine" != 1 ]; then - if ! curl -sL https://${Get_Docker_URL} | sudo bash -s "${Get_Docker_Argu}"; then - err "下载脚本失败,请检查本机能否连接 ${Get_Docker_URL}" - return 0 - fi - sudo systemctl enable docker.service - sudo systemctl start docker.service - else - sudo apk add docker docker-compose - sudo rc-update add docker - sudo rc-service docker start - fi - success "Docker 安装成功" - installation_check - fi - fi -} - -install_dashboard_standalone() { - if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then - sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 - fi -} - -selinux() { - #Check SELinux - if command -v getenforce >/dev/null 2>&1; then - if getenforce | grep '[Ee]nfor'; then - echo "SELinux是开启状态,正在关闭!" - sudo setenforce 0 >/dev/null 2>&1 - find_key="SELINUX=" - sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config - fi - fi -} - -install_agent() { - install_base - selinux - - echo "> 安装监控Agent" - - echo "正在获取监控Agent版本号" - - - _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') - if [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_version" ]; then - _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') - fi - if [ -z "$_version" ]; then - _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') - fi - - if [ -z "$_version" ]; then - err "获取版本号失败,请检查本机能否链接 https://api.github.com/repos/nezhahq/agent/releases/latest" - return 1 - else - echo "当前最新版本为: ${_version}" - fi - - # 哪吒监控文件夹 - sudo mkdir -p $NZ_AGENT_PATH - - echo "正在下载监控端" - if [ -z "$CN" ]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - fi - - _cmd="wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "Release 下载失败,请检查本机能否连接 ${GITHUB_URL}" - return 1 - fi - - sudo unzip -qo nezha-agent_linux_${os_arch}.zip && - sudo mv nezha-agent $NZ_AGENT_PATH && - sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -modify_agent_config() { - echo "> 修改Agent配置" - - if [ $# -lt 3 ]; then - echo "请先在管理面板上添加Agent,记录下密钥" - printf "请输入一个解析到面板所在IP的域名(不可套CDN): " - read -r nz_grpc_host - printf "请输入面板RPC端口 (默认值 5555): " - read -r nz_grpc_port - printf "请输入Agent 密钥: " - read -r nz_client_secret - printf "是否启用针对 gRPC 端口的 SSL/TLS加密 (--tls),需要请按 [y],默认是不需要,不理解用户可回车跳过: " - read -r nz_grpc_proxy - echo "${nz_grpc_proxy}" | grep -qiw 'Y' && args='--tls' - if [ -z "$nz_grpc_host" ] || [ -z "$nz_client_secret" ]; then - err "所有选项都不能为空" - before_show_menu - return 1 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args="$*" - fi - fi - - _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" - - if ! eval "$_cmd"; then - sudo "${NZ_AGENT_PATH}"/nezha-agent service uninstall >/dev/null 2>&1 - sudo "${NZ_AGENT_PATH}"/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p "$nz_client_secret" "$args" >/dev/null 2>&1 - fi - - success "Agent配置 修改成功,请稍等重启生效" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -modify_dashboard_config() { - echo "> 修改面板配置" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then - echo "正在下载 Docker 脚本" - _cmd="wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/script/docker-compose.yaml >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "下载脚本失败,请检查本机能否连接 ${GITHUB_RAW_URL}" - return 0 - fi - else - err "请手动安装 docker-compose。https://docs.docker.com/compose/install/linux/" - before_show_menu - fi - fi - - _cmd="wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/script/config.yaml >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "下载脚本失败,请检查本机能否连接 ${GITHUB_RAW_URL}" - return 0 - fi - - echo "关于 GitHub Oauth2 应用:在 https://github.com/settings/developers 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback" - echo "关于 Gitee Oauth2 应用:在 https://gitee.com/oauth/applications 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback" - printf "请输入 OAuth2 提供商(github/gitlab/jihulab/gitee,默认 github): " - read -r nz_oauth2_type - printf "请输入 Oauth2 应用的 Client ID: " - read -r nz_github_oauth_client_id - printf "请输入 Oauth2 应用的 Client Secret: " - read -r nz_github_oauth_client_secret - printf "请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开: " - read -r nz_admin_logins - printf "请输入站点标题: " - read -r nz_site_title - printf "请输入站点访问端口: (默认 8008)" - read -r nz_site_port - printf "请输入用于 Agent 接入的 RPC 端口: (默认 5555)" - read -r nz_grpc_port - - if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then - err "所有选项都不能为空" - before_show_menu - return 1 - fi - - if [ -z "$nz_site_port" ]; then - nz_site_port=8008 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - if [ -z "$nz_oauth2_type" ]; then - nz_oauth2_type=github - fi - - sed -i "s/nz_oauth2_type/${nz_oauth2_type}/" /tmp/nezha-config.yaml - sed -i "s/nz_admin_logins/${nz_admin_logins}/" /tmp/nezha-config.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_id/${nz_github_oauth_client_id}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /tmp/nezha-config.yaml - sed -i "s/nz_language/zh-CN/" /tmp/nezha-config.yaml - sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml - fi - - sudo mkdir -p $NZ_DASHBOARD_PATH/data - sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml - fi - - if [ "$IS_DOCKER_NEZHA" = 0 ]; then - echo "正在下载服务文件" - if [ "$os_alpine" != 1 ]; then - _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/script/nezha-dashboard.service >/dev/null 2>&1" - if ! eval "$_download"; then - err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" - return 0 - fi - else - _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/script/nezha-dashboard >/dev/null 2>&1" - if ! eval "$_download"; then - err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" - return 0 - fi - sudo chmod +x $NZ_DASHBOARD_SERVICERC - fi - fi - - success "面板配置 修改成功,请稍等重启生效" - - restart_and_update - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_and_update() { - echo "> 重启并更新面板" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="restart_and_update_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="restart_and_update_standalone" - fi - - if eval "$_cmd"; then - success "哪吒监控 重启成功" - info "默认管理面板地址:域名:站点访问端口" - else - err "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_and_update_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -restart_and_update_standalone() { - _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 [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_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 [ -z "$_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 [ -z "$_version" ]; then - err "获取版本号失败,请检查本机能否链接 https://api.github.com/repos/naiba/nezha/releases/latest" - return 1 - else - echo "当前最新版本为: ${_version}" - fi - - if [ "$os_alpine" != 1 ]; then - sudo systemctl daemon-reload - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi - - if [ -z "$CN" ]; then - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" - else - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" - fi - - 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 - - if [ "$os_alpine" != 1 ]; then - sudo systemctl enable nezha-dashboard - sudo systemctl restart nezha-dashboard - else - sudo rc-update add nezha-dashboard - sudo rc-service nezha-dashboard restart - fi -} - -start_dashboard() { - echo "> 启动面板" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="start_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="start_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "哪吒监控 启动成功" - else - err "启动失败,请稍后查看日志信息" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -start_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -start_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl start nezha-dashboard - else - sudo rc-service nezha-dashboard start - fi -} - -stop_dashboard() { - echo "> 停止面板" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="stop_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="stop_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "哪吒监控 停止成功" - else - err "停止失败,请稍后查看日志信息" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -stop_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down -} - -stop_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi -} - -show_dashboard_log() { - echo "> 获取面板日志" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - show_dashboard_log_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - show_dashboard_log_standalone - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -show_dashboard_log_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f -} - -show_dashboard_log_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-dashboard.service - else - sudo tail -n 10 /var/log/nezha-dashboard.err - fi -} - -uninstall_dashboard() { - echo "> 卸载管理面板" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - uninstall_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - uninstall_dashboard_standalone - fi - - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down - sudo rm -rf $NZ_DASHBOARD_PATH - sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 - sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 -} - -uninstall_dashboard_standalone() { - sudo rm -rf $NZ_DASHBOARD_PATH - - if [ "$os_alpine" != 1 ]; then - sudo systemctl disable nezha-dashboard - sudo systemctl stop nezha-dashboard - else - sudo rc-update del nezha-dashboard - sudo rc-service nezha-dashboard stop - fi - - if [ "$os_alpine" != 1 ]; then - sudo rm $NZ_DASHBOARD_SERVICE - else - sudo rm $NZ_DASHBOARD_SERVICERC - fi -} - -show_agent_log() { - echo "> 获取Agent日志" - - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-agent.service - else - sudo tail -n 10 /var/log/nezha-agent.err - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_agent() { - echo "> 卸载Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall - - sudo rm -rf $NZ_AGENT_PATH - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_agent() { - echo "> 重启Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service restart - - if [ $# = 0 ]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - sudo rm -rf ${NZ_BASE_PATH} - fi -} - -show_usage() { - echo "哪吒监控 管理脚本使用方法: " - echo "--------------------------------------------------------" - echo "./nezha.sh - 显示管理菜单" - echo "./nezha.sh install_dashboard - 安装面板端" - echo "./nezha.sh modify_dashboard_config - 修改面板配置" - echo "./nezha.sh start_dashboard - 启动面板" - echo "./nezha.sh stop_dashboard - 停止面板" - echo "./nezha.sh restart_and_update - 重启并更新面板" - echo "./nezha.sh show_dashboard_log - 查看面板日志" - echo "./nezha.sh uninstall_dashboard - 卸载管理面板" - echo "--------------------------------------------------------" - echo "./nezha.sh install_agent - 安装监控Agent" - echo "./nezha.sh modify_agent_config - 修改Agent配置" - echo "./nezha.sh show_agent_log - 查看Agent日志" - echo "./nezha.sh uninstall_agent - 卸载Agen" - echo "./nezha.sh restart_agent - 重启Agen" - echo "./nezha.sh update_script - 更新脚本" - echo "--------------------------------------------------------" -} - -show_menu() { - printf " - ${green}哪吒监控管理脚本${plain} ${red}${NZ_VERSION}${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} 安装面板端 - ${green}2.${plain} 修改面板配置 - ${green}3.${plain} 启动面板 - ${green}4.${plain} 停止面板 - ${green}5.${plain} 重启并更新面板 - ${green}6.${plain} 查看面板日志 - ${green}7.${plain} 卸载管理面板 - ————————————————- - ${green}8.${plain} 安装监控Agent - ${green}9.${plain} 修改Agent配置 - ${green}10.${plain} 查看Agent日志 - ${green}11.${plain} 卸载Agent - ${green}12.${plain} 重启Agent - ————————————————- - ${green}13.${plain} 更新脚本 - ————————————————- - ${green}0.${plain} 退出脚本 - " - echo && printf "请输入选择 [0-13]: " && read -r num - case "${num}" in - 0) - exit 0 - ;; - 1) - install_dashboard - ;; - 2) - modify_dashboard_config - ;; - 3) - start_dashboard - ;; - 4) - stop_dashboard - ;; - 5) - restart_and_update - ;; - 6) - show_dashboard_log - ;; - 7) - uninstall_dashboard - ;; - 8) - install_agent - ;; - 9) - modify_agent_config - ;; - 10) - show_agent_log - ;; - 11) - uninstall_agent - ;; - 12) - restart_agent - ;; - 13) - update_script - ;; - *) - err "请输入正确的数字 [0-13]" - ;; - esac -} - -pre_check -installation_check - -if [ $# -gt 0 ]; then - case $1 in - "install_dashboard") - install_dashboard 0 - ;; - "modify_dashboard_config") - modify_dashboard_config 0 - ;; - "start_dashboard") - start_dashboard 0 - ;; - "stop_dashboard") - stop_dashboard 0 - ;; - "restart_and_update") - restart_and_update 0 - ;; - "show_dashboard_log") - show_dashboard_log 0 - ;; - "uninstall_dashboard") - uninstall_dashboard 0 - ;; - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 - ;; - "restart_agent") - restart_agent 0 - ;; - "update_script") - update_script 0 - ;; - *) show_usage ;; - esac -else - select_version - show_menu -fi diff --git a/script/install_en.sh b/script/install_en.sh deleted file mode 100755 index 54d24c4..0000000 --- a/script/install_en.sh +++ /dev/null @@ -1,954 +0,0 @@ -#!/bin/sh - -#======================================================== -# System Required: CentOS 7+ / Debian 8+ / Ubuntu 16+ / Alpine 3+ / -# Arch has only been tested once, if there is any problem, please report with screenshots Dysf888@pm.me -# Description: Nezha Monitoring Install Script -# Github: https://github.com/naiba/nezha -#======================================================== - -NZ_BASE_PATH="/opt/nezha" -NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" -NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" -NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" -NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" -NZ_VERSION="v0.20.2" - -red='\033[0;31m' -green='\033[0;32m' -yellow='\033[0;33m' -plain='\033[0m' -export PATH="$PATH:/usr/local/bin" - -os_arch="" -[ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1' - -sudo() { - myEUID=$(id -ru) - if [ "$myEUID" -ne 0 ]; then - if command -v sudo > /dev/null 2>&1; then - command sudo "$@" - else - err "ERROR: sudo is not installed on the system, the action cannot be proceeded." - exit 1 - fi - else - "$@" - fi -} - -check_systemd() { - if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then - echo "System not supported: systemctl not found" - exit 1 - fi -} - -err() { - printf "${red}%s${plain}\n" "$*" >&2 -} - -success() { - printf "${green}%s${plain}\n" "$*" -} - -info() { - printf "${yellow}%s${plain}\n" "$*" -} - -geo_check() { - api_list="https://blog.cloudflare.com/cdn-cgi/trace https://dash.cloudflare.com/cdn-cgi/trace https://developers.cloudflare.com/cdn-cgi/trace" - ua="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0" - set -- "$api_list" - for url in $api_list; do - text="$(curl -A "$ua" -m 10 -s "$url")" - endpoint="$(echo "$text" | sed -n 's/.*h=\([^ ]*\).*/\1/p')" - if echo "$text" | grep -qw 'CN'; then - isCN=true - break - elif echo "$url" | grep -q "$endpoint"; then - break - fi - done -} - -pre_check() { - umask 077 - - ## os_arch - if uname -m | grep -q 'x86_64'; then - os_arch="amd64" - elif uname -m | grep -q 'i386\|i686'; then - os_arch="386" - elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then - os_arch="arm64" - elif uname -m | grep -q 'arm'; then - os_arch="arm" - elif uname -m | grep -q 's390x'; then - os_arch="s390x" - elif uname -m | grep -q 'riscv64'; then - os_arch="riscv64" - fi - - ## China_IP - if [ -z "$CN" ]; then - geo_check - if [ -n "$isCN" ]; then - echo "According to the information provided by various geoip api, the current IP may be in China" - printf "Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3): " - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "Use Chinese Mirror" - CN=true - ;; - - [nN][oO] | [nN]) - echo "Do Not Use Chinese Mirror" - ;; - - [3]) - echo "Use Custom Mirror" - printf "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If left blank, it won't be used: " - read -r input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - - ;; - *) - echo "Do Not Use Chinese Mirror" - ;; - esac - fi - fi - - if [ -n "$CUSTOM_MIRROR" ]; then - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL=$CUSTOM_MIRROR - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - else - if [ -z "$CN" ]; then - GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master" - GITHUB_URL="github.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" " - Docker_IMG="ghcr.io\/naiba\/nezha-dashboard" - else - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL="gitee.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - fi - fi -} - -installation_check() { - if docker compose version >/dev/null 2>&1; then - DOCKER_COMPOSE_COMMAND="docker compose" - if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") - if [ -n "$NEZHA_IMAGES" ]; then - echo "Docker image with nezha-dashboard repository exists:" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "No Docker images with the nezha-dashboard repository were found." - fi - fi - elif command -v docker-compose >/dev/null 2>&1; then - DOCKER_COMPOSE_COMMAND="docker-compose" - if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") - if [ -n "$NEZHA_IMAGES" ]; then - echo "Docker image with nezha-dashboard repository exists:" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "No Docker images with the nezha-dashboard repository were found." - fi - fi - fi - - if [ -f "$NZ_DASHBOARD_PATH/app" ]; then - IS_DOCKER_NEZHA=0 - FRESH_INSTALL=0 - fi -} - -select_version() { - if [ -z "$IS_DOCKER_NEZHA" ]; then - info "Select your installation method(Input anything is ok if you are installing agent):" - info "1. Docker" - info "2. Standalone" - while true; do - printf "Please enter [1-2]: " - read -r option - case "${option}" in - 1) - IS_DOCKER_NEZHA=1 - break - ;; - 2) - IS_DOCKER_NEZHA=0 - break - ;; - *) - err "Please enter the correct number [1-2]" - ;; - esac - done - fi -} - -update_script() { - echo "> Update Script" - - curl -sL https://${GITHUB_RAW_URL}/script/install_en.sh -o /tmp/nezha.sh - new_version=$(grep "NZ_VERSION" /tmp/nezha.sh | head -n 1 | awk -F "=" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ -z "$new_version" ]; then - echo "Script failed to get, please check if the network can link https://${GITHUB_RAW_URL}/script/install.sh" - return 1 - fi - echo "The current latest version is: ${new_version}" - mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh - - echo "Execute new script after 3s" - sleep 3s - clear - exec ./nezha.sh - exit 0 -} - -before_show_menu() { - echo && info "* Press Enter to return to the main menu *" && read temp - show_menu -} - -install_base() { - (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) || - (install_soft curl wget unzip) -} - -install_arch() { - info "Archlinux needs to add nezha-agent user to install libselinux. It will be deleted automatically after installation. It is recommended to check manually" - read -r -p "Do you need to install libselinux? [Y/n] " input - case $input in - [yY][eE][sS] | [yY]) - useradd -m nezha-agent - sed -i "$ a\nezha-agent ALL=(ALL ) NOPASSWD:ALL" /etc/sudoers - sudo -iu nezha-agent bash -c 'gpg --keyserver keys.gnupg.net --recv-keys 4695881C254508D1; - cd /tmp; git clone https://aur.archlinux.org/libsepol.git; cd libsepol; makepkg -si --noconfirm --asdeps; cd ..; - git clone https://aur.archlinux.org/libselinux.git; cd libselinux; makepkg -si --noconfirm; cd ..; - rm -rf libsepol libselinux' - sed -i '/nezha-agent/d' /etc/sudoers && sleep 30s && killall -u nezha-agent && userdel -r nezha-agent - echo -e "${red}Info: ${plain}user nezha-agent has been deleted, Be sure to check it manually!\n" - ;; - [nN][oO] | [nN]) - echo "Libselinux will not be installed" - ;; - *) - echo "Libselinux will not be installed" - exit 0 - ;; - esac -} - -install_soft() { - (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install "$@" selinux-policy -y) || - (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install "$@" selinux-utils -y) || - (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu "$@" base-devel --noconfirm && install_arch) || - (command -v apt-get >/dev/null 2>&1 && sudo apt-get update && sudo apt-get install "$@" selinux-utils -y) || - (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add "$@" -f) -} - -install_dashboard() { - check_systemd - install_base - - echo "> Install Dashboard" - - # Nezha Monitoring Folder - if [ ! "$FRESH_INSTALL" = 0 ]; then - sudo mkdir -p $NZ_DASHBOARD_PATH - else - echo "You may have already installed the dashboard, repeated installation will overwrite the data, please pay attention to backup." - printf "Exit the installation? [Y/n] " - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "Exit the installation." - exit 0 - ;; - [nN][oO] | [nN]) - echo "Continue." - ;; - *) - echo "Exit the installation." - exit 0 - ;; - esac - fi - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - install_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - install_dashboard_standalone - fi - - modify_dashboard_config 0 - - if [ $# = 0 ]; then - before_show_menu - fi -} - -install_dashboard_docker() { - if [ ! "$FRESH_INSTALL" = 0 ]; then - if ! command -v docker >/dev/null 2>&1; then - echo "Installing Docker" - if [ "$os_alpine" != 1 ]; then - if ! curl -sL https://${Get_Docker_URL} | sudo bash -s "${Get_Docker_Argu}"; then - err "Script failed to get, please check if the network can link ${Get_Docker_URL}" - return 0 - fi - sudo systemctl enable docker.service - sudo systemctl start docker.service - else - sudo apk add docker docker-compose - sudo rc-update add docker - sudo rc-service docker start - fi - success "Docker installed successfully" - installation_check - fi - fi -} - -install_dashboard_standalone() { - if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then - sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 - fi -} - -selinux() { - #Check SELinux - if command -v getenforce >/dev/null 2>&1; then - if getenforce | grep '[Ee]nfor'; then - echo "SELinux running, closing now!" - sudo setenforce 0 >/dev/null 2>&1 - find_key="SELINUX=" - sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config - fi - fi -} - -install_agent() { - install_base - selinux - - echo "> Install Agent" - - echo "Obtaining Agent version number" - - - _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') - if [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_version" ]; then - _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') - fi - if [ -z "$_version" ]; then - _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') - fi - - if [ -z "$_version" ]; then - err "Fail to obtain agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest" - return 1 - else - echo "The current latest version is: ${_version}" - fi - - # Nezha Monitoring Folder - sudo mkdir -p $NZ_AGENT_PATH - - echo "Downloading Agent" - if [ -z "$CN" ]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - fi - - _cmd="wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "Fail to download agent, please check if the network can link ${GITHUB_URL}" - return 1 - fi - - sudo unzip -qo nezha-agent_linux_${os_arch}.zip && - sudo mv nezha-agent $NZ_AGENT_PATH && - sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -modify_agent_config() { - echo "> Modify Agent Configuration" - - if [ $# -lt 3 ]; then - echo "Please add Agent in the Dashboard first, record the secret" - printf "Please enter a domain that resolves to the IP where Dashboard is located (no CDN): " - read -r nz_grpc_host - printf "Please enter Dashboard RPC port (default 5555): " - read -r nz_grpc_port - printf "Please enter the Agent secret: " - read -r nz_client_secret - printf "Do you want to enable SSL/TLS encryption for the gRPC port (--tls)? Press [y] if yes, the default is not required, and users can press Enter to skip if you don't understand: " - read -r nz_grpc_proxy - echo "${nz_grpc_proxy}" | grep -qiw 'Y' && args='--tls' - if [ -z "$nz_grpc_host" ] || [ -z "$nz_client_secret" ]; then - err "All options cannot be empty" - before_show_menu - return 1 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args="$*" - fi - fi - - _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" - - if ! eval "$_cmd"; then - sudo "${NZ_AGENT_PATH}"/nezha-agent service uninstall >/dev/null 2>&1 - sudo "${NZ_AGENT_PATH}"/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p "$nz_client_secret" "$args" >/dev/null 2>&1 - fi - - success "Agent configuration modified successfully, please wait for agent self-restart to take effect" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -modify_dashboard_config() { - echo "> Modify Dashboard Configuration" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then - echo "Download Docker Script" - _cmd="wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/script/docker-compose.yaml >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" - return 0 - fi - else - err "Please install docker-compose manually. https://docs.docker.com/compose/install/linux/" - before_show_menu - fi - fi - - _cmd="wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/script/config.yaml >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" - return 0 - fi - - echo "About the GitHub Oauth2 application: create it at https://github.com/settings/developers, no review required, and fill in the http(s)://domain_or_IP/oauth2/callback" - echo "(Not recommended) About the Gitee Oauth2 application: create it at https://gitee.com/oauth/applications, no auditing required, and fill in the http(s)://domain_or_IP/oauth2/callback" - printf "Please enter the OAuth2 provider (github/gitlab/jihulab/gitee, default github): " - read -r nz_oauth2_type - printf "Please enter the Client ID of the Oauth2 application: " - read -r nz_github_oauth_client_id - printf "Please enter the Client Secret of the Oauth2 application: " - read -r nz_github_oauth_client_secret - printf "Please enter your GitHub/Gitee login name as the administrator, separated by commas: " - read -r nz_admin_logins - printf "Please enter the site title: " - read -r nz_site_title - printf "Please enter the site access port: (default 8008)" - read -r nz_site_port - printf "Please enter the RPC port to be used for Agent access: (default 5555)" - read -r nz_grpc_port - - if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then - err "All options cannot be empty" - before_show_menu - return 1 - fi - - if [ -z "$nz_site_port" ]; then - nz_site_port=8008 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - if [ -z "$nz_oauth2_type" ]; then - nz_oauth2_type=github - fi - - sed -i "s/nz_oauth2_type/${nz_oauth2_type}/" /tmp/nezha-config.yaml - sed -i "s/nz_admin_logins/${nz_admin_logins}/" /tmp/nezha-config.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_id/${nz_github_oauth_client_id}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /tmp/nezha-config.yaml - sed -i "s/nz_language/zh-CN/" /tmp/nezha-config.yaml - sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml - fi - - sudo mkdir -p $NZ_DASHBOARD_PATH/data - sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml - fi - - if [ "$IS_DOCKER_NEZHA" = 0 ]; then - echo "Downloading service file" - if [ "$os_alpine" != 1 ]; then - _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/script/nezha-dashboard.service >/dev/null 2>&1" - if ! eval "$_download"; then - err "File failed to get, please check if the network can link ${GITHUB_RAW_URL}" - return 0 - fi - else - _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/script/nezha-dashboard >/dev/null 2>&1" - if ! eval "$_download"; then - err "File failed to get, please check if the network can link ${GITHUB_RAW_URL}" - return 0 - fi - sudo chmod +x $NZ_DASHBOARD_SERVICERC - fi - fi - - success "Dashboard configuration modified successfully, please wait for Dashboard self-restart to take effect" - - restart_and_update - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_and_update() { - echo "> Restart and Update Dashboard" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="restart_and_update_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="restart_and_update_standalone" - fi - - if eval "$_cmd"; then - success "Nezha Monitoring Restart Successful" - info "Default Dashboard address: domain:site_access_port" - else - err "The restart failed, probably because the boot time exceeded two seconds, please check the log information later" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_and_update_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -restart_and_update_standalone() { - _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 [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_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 [ -z "$_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 [ -z "$_version" ]; then - err "Fail to obtain agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest" - return 1 - else - echo "The current latest version is: ${_version}" - fi - - if [ "$os_alpine" != 1 ]; then - sudo systemctl daemon-reload - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi - - if [ -z "$CN" ]; then - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" - else - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" - fi - - 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 - - if [ "$os_alpine" != 1 ]; then - sudo systemctl enable nezha-dashboard - sudo systemctl restart nezha-dashboard - else - sudo rc-update add nezha-dashboard - sudo rc-service nezha-dashboard restart - fi -} - -start_dashboard() { - echo "> Start Dashboard" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="start_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="start_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "Nezha Monitoring Start Successful" - else - err "Failed to start, please check the log message later" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -start_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -start_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl start nezha-dashboard - else - sudo rc-service nezha-dashboard start - fi -} - -stop_dashboard() { - echo "> Stop Dashboard" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="stop_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="stop_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "Nezha Monitoring Stop Successful" - else - err "Failed to stop, please check the log message later" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -stop_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down -} - -stop_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi -} - -show_dashboard_log() { - echo "> View Dashboard Log" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - show_dashboard_log_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - show_dashboard_log_standalone - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -show_dashboard_log_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f -} - -show_dashboard_log_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-dashboard.service - else - sudo tail -n 10 /var/log/nezha-dashboard.err - fi -} - -uninstall_dashboard() { - echo "> Uninstall Dashboard" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - uninstall_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - uninstall_dashboard_standalone - fi - - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down - sudo rm -rf $NZ_DASHBOARD_PATH - sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 - sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 -} - -uninstall_dashboard_standalone() { - sudo rm -rf $NZ_DASHBOARD_PATH - - if [ "$os_alpine" != 1 ]; then - sudo systemctl disable nezha-dashboard - sudo systemctl stop nezha-dashboard - else - sudo rc-update del nezha-dashboard - sudo rc-service nezha-dashboard stop - fi - - if [ "$os_alpine" != 1 ]; then - sudo rm $NZ_DASHBOARD_SERVICE - else - sudo rm $NZ_DASHBOARD_SERVICERC - fi -} - -show_agent_log() { - echo "> View Agent Log" - - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-agent.service - else - sudo tail -n 10 /var/log/nezha-agent.err - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_agent() { - echo "> Uninstall Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall - - sudo rm -rf $NZ_AGENT_PATH - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_agent() { - echo "> Restart Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service restart - - if [ $# = 0 ]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - sudo rm -rf ${NZ_BASE_PATH} - fi -} - -show_usage() { - echo "Nezha Monitor Management Script Usage: " - echo "--------------------------------------------------------" - echo "./nezha.sh - Show Menu" - echo "./nezha.sh install_dashboard - Install Dashboard" - echo "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration" - echo "./nezha.sh start_dashboard - Start Dashboard" - echo "./nezha.sh stop_dashboard - Stop Dashboard" - echo "./nezha.sh restart_and_update - Restart and Update the Dashboard" - echo "./nezha.sh show_dashboard_log - View Dashboard Log" - echo "./nezha.sh uninstall_dashboard - Uninstall Dashboard" - echo "--------------------------------------------------------" - echo "./nezha.sh install_agent - Install Agent" - echo "./nezha.sh modify_agent_config - Modify Agent Configuration" - echo "./nezha.sh show_agent_log - View Agent Log" - echo "./nezha.sh uninstall_agent - Uninstall Agent" - echo "./nezha.sh restart_agent - Restart Agent" - echo "./nezha.sh update_script - Update Script" - echo "--------------------------------------------------------" -} - -show_menu() { - printf " - ${green}Nezha Monitor Management Script${plain} ${red}${NZ_VERSION}${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} Install Dashboard - ${green}2.${plain} Modify Dashbaord Configuration - ${green}3.${plain} Start Dashboard - ${green}4.${plain} Stop Dashboard - ${green}5.${plain} Restart and Update Dashboard - ${green}6.${plain} View Dashboard Log - ${green}7.${plain} Uninstall Dashboard - ————————————————- - ${green}8.${plain} Install Agent - ${green}9.${plain} Modify Agent Configuration - ${green}10.${plain} View Agent Log - ${green}11.${plain} Uninstall Agent - ${green}12.${plain} Restart Agent - ————————————————- - ${green}13.${plain} Update Script - ————————————————- - ${green}0.${plain} Exit Script - " - echo && printf "Please enter [0-13]: " && read -r num - case "${num}" in - 0) - exit 0 - ;; - 1) - install_dashboard - ;; - 2) - modify_dashboard_config - ;; - 3) - start_dashboard - ;; - 4) - stop_dashboard - ;; - 5) - restart_and_update - ;; - 6) - show_dashboard_log - ;; - 7) - uninstall_dashboard - ;; - 8) - install_agent - ;; - 9) - modify_agent_config - ;; - 10) - show_agent_log - ;; - 11) - uninstall_agent - ;; - 12) - restart_agent - ;; - 13) - update_script - ;; - *) - err "Please enter the correct number [0-13]" - ;; - esac -} - -pre_check -installation_check - -if [ $# -gt 0 ]; then - case $1 in - "install_dashboard") - install_dashboard 0 - ;; - "modify_dashboard_config") - modify_dashboard_config 0 - ;; - "start_dashboard") - start_dashboard 0 - ;; - "stop_dashboard") - stop_dashboard 0 - ;; - "restart_and_update") - restart_and_update 0 - ;; - "show_dashboard_log") - show_dashboard_log 0 - ;; - "uninstall_dashboard") - uninstall_dashboard 0 - ;; - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 - ;; - "restart_agent") - restart_agent 0 - ;; - "update_script") - update_script 0 - ;; - *) show_usage ;; - esac -else - select_version - show_menu -fi diff --git a/script/nezha-dashboard b/script/nezha-dashboard deleted file mode 100755 index ebd5e1a..0000000 --- a/script/nezha-dashboard +++ /dev/null @@ -1,18 +0,0 @@ -#!/sbin/openrc-run -supervisor=supervise-daemon -name=nezha-dashboard -output_log=/var/log/${name}.log -error_log=/var/log/${name}.err -pidfile="/run/${RC_SVCNAME}.pid" -command="/opt/nezha/dashboard/app" -command_args="" -command_background=true -directory="/opt/nezha/dashboard" - -depend() { - need net -} - -start_pre() { - checkpath -f -m 0644 -o root:root "/var/log/${name}.log" -} diff --git a/script/nezha-dashboard.service b/script/nezha-dashboard.service deleted file mode 100644 index f20a079..0000000 --- a/script/nezha-dashboard.service +++ /dev/null @@ -1,30 +0,0 @@ -[Unit] -Description=Nezha Dashboard -After=syslog.target -After=network.target -After=mariadb.service mysqld.service postgresql.service memcached.service redis.service - -[Service] -# Modify these two values and uncomment them if you have -# repos with lots of files and get an HTTP error 500 because -# of that -### -#LimitMEMLOCK=infinity -#LimitNOFILE=65535 -Type=simple -#User=root -#Group=root -WorkingDirectory=/opt/nezha/dashboard/ -ExecStart=/opt/nezha/dashboard/app -Restart=always -#Environment=DEBUG=true - -# Some distributions may not support these hardening directives. If you cannot start the service due -# to an unknown option, comment out the ones not supported by your version of systemd. -ProtectSystem=full -PrivateDevices=yes -PrivateTmp=yes -NoNewPrivileges=true - -[Install] -WantedBy=multi-user.target