mirror of
https://github.com/nezhahq/nezha.git
synced 2025-01-22 12:48:14 -05:00
apply upstream changes (#18)
* apply upstream changes * update translations, fix i18n script * remove installation scripts and related files
This commit is contained in:
parent
da3bac31a2
commit
626a7d6059
27
go.mod
27
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
|
||||
)
|
||||
|
47
go.sum
47
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=
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
|
@ -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"
|
||||
|
@ -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 离线,无法执行"
|
||||
|
@ -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 離線,無法執行"
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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"
|
||||
}
|
@ -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
|
Loading…
Reference in New Issue
Block a user