Compare commits
1517 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 40b5ce7baf | |||
| 94360cbde0 | |||
| 4b60dfa8b3 | |||
| ad10fbf107 | |||
| 519a01f3a3 | |||
| 52911d1332 | |||
| 82fe59404b | |||
| d74abe7e04 | |||
| 1de17cc5bc | |||
| 803857c4b5 | |||
| c5734df18a | |||
| e368c1ba9b | |||
| dbf342507d | |||
| 7fd3a685f3 | |||
| f4d1f19273 | |||
| 1cff6f1343 | |||
| 9a1a89f9b7 | |||
| 30d07f924a | |||
| 422079b823 | |||
| f6ad7551a6 | |||
| 050a82932e | |||
| 312598f28f | |||
| a601ea2909 | |||
| 2d828b8502 | |||
| 53efe2abed | |||
| d160907d20 | |||
| e71c2b1d09 | |||
| ffa50c2570 | |||
| 9c4d5d546c | |||
| 5f88e8ef51 | |||
| 95a4d6c841 | |||
| efee970076 | |||
| f4b36760a4 | |||
| 0044a322db | |||
| 6e1908aac6 | |||
| f64b90ab92 | |||
| 3ac652f98f | |||
| c8d16a537b | |||
| 0a89fac97e | |||
| 07e972d455 | |||
| a0d0287449 | |||
| 0c2cc1cfac | |||
| f770418360 | |||
| c8e5999d1a | |||
| c4fd85c9d7 | |||
| aaf5fe4585 | |||
| f08b134cb5 | |||
| 60edcd312f | |||
| 8b969c4cce | |||
| 281be10198 | |||
| 714803e656 | |||
| c7d8a3780e | |||
| 0ef50cf253 | |||
| 87c0146d86 | |||
| 3300997313 | |||
| 76d75662cd | |||
| 9e8587837a | |||
| 9f627c51f6 | |||
| 6a02d29d6f | |||
| bb0b4eb54c | |||
| 2eb0cce16e | |||
| 753f9ffe32 | |||
| 1a817d43b1 | |||
| 7e414ac64c | |||
| 63d128d152 | |||
| 7664b6a5ae | |||
| fdb4868f98 | |||
| a57032dbbf | |||
| 016011f3f2 | |||
| afdcd01a8f | |||
| 256ce9a6b6 | |||
| 06e7d47ef7 | |||
| 3445e76d9a | |||
| 676bff86cc | |||
| a9586f5b0d | |||
| 05c39328ee | |||
| 3420967e7d | |||
| 3a3ad21dde | |||
| f8cda6d411 | |||
| 3e37f3d62b | |||
| 2bc39f9c8c | |||
| 6290bfcb78 | |||
| efc38b0646 | |||
| 6d6b48a7d4 | |||
| a6f6a00de7 | |||
| 63fcc11826 | |||
| 068636bff0 | |||
| 10a83794c1 | |||
| 85895c7008 | |||
| fe4e2e7721 | |||
| 3cdedf4fd6 | |||
| 2c16570422 | |||
| c8bcc99bbf | |||
| 0c08802f3b | |||
| 4ed9859a79 | |||
| 333b081ca2 | |||
| 0e232a76ed | |||
| a7093e6155 | |||
| 72a2df9c0b | |||
| 7a77e302c2 | |||
| b2f118e6ab | |||
| e09f845a41 | |||
| d190a1960b | |||
| 8e0b95d967 | |||
| 2cbca98ddf | |||
| 05b0699399 | |||
| 434018864b | |||
| 6e2482d678 | |||
| 7685d130b2 | |||
| 34ffc4eb5e | |||
| 3e83f00868 | |||
| c46f42f524 | |||
| 92384967c8 | |||
| 72c7624c20 | |||
| 7c4a8f3b20 | |||
| 5d71e4e1e2 | |||
| a8bad42466 | |||
| ace50ebc04 | |||
| c2c5c1a560 | |||
| ada6425cf7 | |||
| 299f4f9461 | |||
| b61091ed37 | |||
| 0d1b16c242 | |||
| 8a3ef7bd90 | |||
| 58474c4288 | |||
| 079da4fe48 | |||
| cb4a6f6852 | |||
| 76810fbb8d | |||
| 0cc0cdb6cc | |||
| a7f83ebe29 | |||
| 529ac67563 | |||
| 6db7506a46 | |||
| 068e1808fb | |||
| ddcee47ea0 | |||
| d45b2a2b8e | |||
| e1fc6c7e60 | |||
| 1511b50197 | |||
| d045ce4b2f | |||
| dc0afb88de | |||
| 54de8015ed | |||
| 4a98d91789 | |||
| 9afcc3eff0 | |||
| aa8d28bbb5 | |||
| 873e5ec092 | |||
| 2058faa4b4 | |||
| f3f8f4e38e | |||
| 48803697d7 | |||
| cfd9bc3996 | |||
| 42b565b76b | |||
| e38a9eaaf0 | |||
| 9dc0a92185 | |||
| 92162117c8 | |||
| 0d6da4f147 | |||
| be7da0fd7e | |||
| 86ac86f9aa | |||
| 0a7e97c694 | |||
| d8458f9e89 | |||
| cb1b751654 | |||
| d92dbe37db | |||
| 63cff9044e | |||
| 05269032a4 | |||
| 86b8842cff | |||
| 0e68d5b7c5 | |||
| 0fca0452aa | |||
| 2e93d5590e | |||
| 9a8dfc584a | |||
| c826875a4b | |||
| b5b25adde2 | |||
| e55f461292 | |||
| a6587647aa | |||
| f710907738 | |||
| 24185bc0e7 | |||
| 09c22d44cc | |||
| cc6711efff | |||
| 6fa3f89dc8 | |||
| 7796ed4175 | |||
| 08cdcab025 | |||
| b24c870383 | |||
| 29d065b3d5 | |||
| f57a059e93 | |||
| 157fa9f48e | |||
| 3546acf097 | |||
| db63651880 | |||
| 72ec75357a | |||
| 47ad757f74 | |||
| 8fd12408fc | |||
| 398c99f744 | |||
| b9919ebada | |||
| 064661586c | |||
| cb31982c7d | |||
| e3c30c169b | |||
| 7792e9d0f5 | |||
| 71cd93e0ba | |||
| afbf4effc3 | |||
| 176056264b | |||
| c77dc4c168 | |||
| fea5988dac | |||
| 253f81b169 | |||
| e90cd580d4 | |||
| a1edcfe8f2 | |||
| abc96b061e | |||
| dc26de7ca7 | |||
| ade9c2f0df | |||
| 9ee8550cd6 | |||
| 3ca5038d9f | |||
| 7ebc912d72 | |||
| 9a48a985c7 | |||
| 733bb9e22d | |||
| 9b3885b837 | |||
| d8248d9daf | |||
| e4455b8371 | |||
| 13ddc751d8 | |||
| 0cbf0c704e | |||
| 60b7647cdb | |||
| 392b7e0cf3 | |||
| da53b492b4 | |||
| 5b85b13bf8 | |||
| 708d56fbad | |||
| e20f6c4e70 | |||
| 346cdd4d36 | |||
| 2314167970 | |||
| a0d27ba5f1 | |||
| 611636dc7f | |||
| c2a4fb86af | |||
| 85c1743e72 | |||
| 0294b09980 | |||
| 53329070a4 | |||
| 7634034cb7 | |||
| 86054bc98e | |||
| b88798d009 | |||
| 73c6816851 | |||
| 6a78a384e4 | |||
| 3edf509b6e | |||
| 2d59b27e1e | |||
| d3c21b9f63 | |||
| c2bf087004 | |||
| 1bd6ca0deb | |||
| 806c6da39a | |||
| 60c1d033b2 | |||
| 51ac59fdff | |||
| af505cb61c | |||
| 2e3cfea36e | |||
| 60e8f57a29 | |||
| a4149a5b72 | |||
| 89dd555a93 | |||
| 954ea75657 | |||
| f6c95770ed | |||
| e8ebbd5cfd | |||
| 2be1892dc1 | |||
| 77a4543ad1 | |||
| 6fec58c54b | |||
| 76aadea07f | |||
| ffb689422b | |||
| 37432ccb1f | |||
| 092089b88c | |||
| f85f67f827 | |||
| 0b7a4bc845 | |||
| d3515584d9 | |||
| 82433a125c | |||
| 8351b6f1dc | |||
| e5d1807d07 | |||
| b3b54ac8c8 | |||
| bff18ce7d7 | |||
| 4cb00c6af3 | |||
| c6f200889e | |||
| e2ef7d4ef0 | |||
| 5d6260e46c | |||
| 09e9597f12 | |||
| 83412f9550 | |||
| 160c141e79 | |||
| 23620195ff | |||
| de0daf3a8c | |||
| 88b38fa933 | |||
| 30ef52ccf2 | |||
| 12198e5ab2 | |||
| 155fa04a40 | |||
| 5f617f4719 | |||
| 967faa0fd7 | |||
| 6d4a6a2d51 | |||
| 8058192c6b | |||
| 0e41546946 | |||
| 8babb6bc6e | |||
| 9db7713830 | |||
| e510e449fa | |||
| 4f4b509893 | |||
| 0a00796b37 | |||
| 53b7d34816 | |||
| e380f204c5 | |||
| 1b3568e35d | |||
| 69d8d062b3 | |||
| 9bca08995c | |||
| 3e560c9278 | |||
| e6d8f3728d | |||
| 30366a211b | |||
| 62c4eaa07c | |||
| a3718e2204 | |||
| 1eb4d2b986 | |||
| da50045467 | |||
| ff185dfe70 | |||
| 195c0cab7d | |||
| 5b96493dcf | |||
| 3f89d3d7ff | |||
| 12673a3423 | |||
| 3cbc2b015c | |||
| 3dea04d14b | |||
| e203936299 | |||
| 37fd3fe105 | |||
| 5092c1894b | |||
| 8b46350a7f | |||
| 67ce44f960 | |||
| 306aecd004 | |||
| c52d77e5b1 | |||
| 189323defd | |||
| a69580d681 | |||
| c714a22a7f | |||
| 1390496d0d | |||
| f73bad1ccb | |||
| c8dae44c7b | |||
| 27cd6fc52c | |||
| bb39a564c2 | |||
| 7852c0cc5b | |||
| 8e2a3855cf | |||
| b591eb537b | |||
| efefca0a96 | |||
| 2bb90fda04 | |||
| ecb27fda35 | |||
| 6480e94664 | |||
| cd35b4c882 | |||
| bae3e43226 | |||
| a7dfc1d5ec | |||
| d038ba16af | |||
| ca37f0dedf | |||
| 7fddb8ef04 | |||
| d3e46ec3d2 | |||
| 35ec99e35e | |||
| 06a73e4fc1 | |||
| 027e410c52 | |||
| 787ac72a66 | |||
| 7551012ccb | |||
| bc09df39a0 | |||
| 6155decd2b | |||
| bf5f472b94 | |||
| 07015a1189 | |||
| 9954340b89 | |||
| 27b25a4c1e | |||
| c642b64ca8 | |||
| 94039439b7 | |||
| f1dd4fd101 | |||
| bb33550fe3 | |||
| 0d072b26db | |||
| 849016e488 | |||
| 1f74262484 | |||
| 317a4a7be2 | |||
| ebdb7450f1 | |||
| fc311ab128 | |||
| 1590f8b9f1 | |||
| 4d689d4fa0 | |||
| 52002d9d6a | |||
| a852b335ab | |||
| a3690d496d | |||
| 792d7724ed | |||
| 1441e3457a | |||
| a276077efb | |||
| df2d6aca06 | |||
| 2062c8932c | |||
| e6a9b7c312 | |||
| 48107b6840 | |||
| 407f077678 | |||
| d0516c09c0 | |||
| 8df9b3774b | |||
| 13221db7ae | |||
| 9f07b3eda5 | |||
| 5467e33c13 | |||
| b3b5d988cf | |||
| f74046c55a | |||
| b12c6e35fd | |||
| e7571a84b7 | |||
| 1846ba0459 | |||
| 5e0b502d6f | |||
| 7b6883c8a7 | |||
| 15ba3bcdf9 | |||
| 7c3cefc32d | |||
| 9907ad0f62 | |||
| 15a6ea0fe5 | |||
| f2f9221e3f | |||
| 65d22fabc4 | |||
| dc50ddbac9 | |||
| 17e880e9c7 | |||
| a60659bda3 | |||
| f98eb04e6f | |||
| ae691fdea8 | |||
| 51e85eadef | |||
| cb7b239c76 | |||
| 8a429ee8cd | |||
| 5d120950fe | |||
| 7a202b1a74 | |||
| f23a0ee04c | |||
| 02e8053789 | |||
| fbfece1db7 | |||
| a4d336d79a | |||
| 2dcfce6c80 | |||
| 6e5a779760 | |||
| 92a8405d6b | |||
| 69b9877ced | |||
| 9144658ce4 | |||
| d80a35a246 | |||
| ab48e56b5d | |||
| ff98b61c1d | |||
| 9662f13690 | |||
| 87b5bd9638 | |||
| e614820bb8 | |||
| 033a8c9380 | |||
| b29c52bdb8 | |||
| 6fe97e89f9 | |||
| d239b3e15b | |||
| 55a384f66c | |||
| 524228e8bb | |||
| 168fc3d0b6 | |||
| 8b4be7fbd6 | |||
| 6ff801b606 | |||
| d21b92d900 | |||
| ebd9b907f3 | |||
| eeb4e81924 | |||
| 42663dddb6 | |||
| 2cbe3a6f1c | |||
| 15f461b1dd | |||
| 13365aabb2 | |||
| f1de117a96 | |||
| 6c6c9a3d70 | |||
| 9432fbe189 | |||
| d5ec15d0c2 | |||
| 61ded2cc90 | |||
| c149f722e0 | |||
| 90e8a38d40 | |||
| a6c3dfbe1f | |||
| c76467bd34 | |||
| 6457c2520f | |||
| f285cf6fc8 | |||
| 43aceface6 | |||
| be6e135a5a | |||
| 947850d130 | |||
| 55e72659ef | |||
| 25307037bb | |||
| 21d1e05298 | |||
| 7b67234c87 | |||
| b2242f4a60 | |||
| 2b52ed44a3 | |||
| 7b7837d513 | |||
| cdceeed72c | |||
| 9bb76c42ee | |||
| 7c8cc1a0ec | |||
| cfef7762f1 | |||
| d1bc070255 | |||
| 5c590c01ca | |||
| 8795f22f37 | |||
| bfca3c35e3 | |||
| 73449977a8 | |||
| b7573be248 | |||
| 6ce9fc4ca5 | |||
| a39de19378 | |||
| 95da47ae98 | |||
| 7995dec248 | |||
| 335ad4fe59 | |||
| 8f387909c7 | |||
| 25843a7742 | |||
| caff93d0f2 | |||
| 37f7fd8bf8 | |||
| a5440f4d15 | |||
| 29a942e5ce | |||
| ee8804b298 | |||
| 4dbbd4543e | |||
| 7df49156ef | |||
| 75adbb5010 | |||
| 22e7e73dcf | |||
| b2d44fa3ea | |||
| 184f066e85 | |||
| 61295a325c | |||
| 9cb0c56d99 | |||
| 137a864ec0 | |||
| 665aed6627 | |||
| d4ea8748c7 | |||
| ed2f74729f | |||
| 2efc32476b | |||
| d5c29e3797 | |||
| f4d871c234 | |||
| c408c2bf40 | |||
| f84d698248 | |||
| db07e290ca | |||
| 8a31e45e42 | |||
| 095e016e5b | |||
| 3a883ad963 | |||
| 9ead2963f1 | |||
| dd9795c484 | |||
| 6f1d0fd18e | |||
| c1dfc869e3 | |||
| cd0b5969ee | |||
| e2af671876 | |||
| 6d6ab64780 | |||
| be7bf6a802 | |||
| fa8190d302 | |||
| c6a9580b51 | |||
| 8147e5764f | |||
| ffe0e0c052 | |||
| 78fdc34941 | |||
| 2a77b1e630 | |||
| 727c06461a | |||
| 82222954e0 | |||
| d17c2259ff | |||
| 7fd70f70c4 | |||
| 162b4e63a3 | |||
| ab619cc080 | |||
| ee38d61539 | |||
| cd8a0fbd86 | |||
| a9a03b581f | |||
| 41056f5de3 | |||
| 27a143bdcb | |||
| 9be123ffe6 | |||
| 697269d4dc | |||
| c927f18f50 | |||
| a59a1768dc | |||
| 0f386d116a | |||
| 76847c0885 | |||
| 493ffde321 | |||
| 2ca5396708 | |||
| f6360ff6a6 | |||
| bab2a016dc | |||
| 00e6b78f5e | |||
| cb8308713c | |||
| 0d177f7e46 | |||
| 6cb7f934e4 | |||
| d9fafb7d6f | |||
| 57d9803a3f | |||
| f826bc6306 | |||
| 6008fd569f | |||
| 827fe4d0ce | |||
| b707611a3d | |||
| f94948d240 | |||
| 9ad96230ba | |||
| 096cb86312 | |||
| 8c6972fe12 | |||
| f3d204bf34 | |||
| 6a1fa24f84 | |||
| ee51ace1fb | |||
| bbcdd177de | |||
| 588692186f | |||
| 3af14ae25e | |||
| 745c9d5550 | |||
| 145eaefa27 | |||
| 6be4d93ea4 | |||
| 1f98de30d1 | |||
| ccf2062846 | |||
| b4282f535d | |||
| c601a3d702 | |||
| 28adf73121 | |||
| d30eaddc07 | |||
| 966474b2bf | |||
| 5fd391693c | |||
| 904db74e91 | |||
| 1fa7148817 | |||
| ed026eb003 | |||
| 6cad226fc2 | |||
| 8f0ee2f6aa | |||
| 640cad0d03 | |||
| 04c29fe90f | |||
| 5c146db6d9 | |||
| 89c2f4d081 | |||
| 1f98dd64e2 | |||
| e0f2019ad9 | |||
| 52756f53cc | |||
| 454aba0e87 | |||
| 387d7009ab | |||
| dfefd78fd1 | |||
| 7db0c9efab | |||
| f8d943afde | |||
| b3c00661f3 | |||
| 1f2b2972ac | |||
| 14849adcde | |||
| 971ce07b68 | |||
| c0530a2f9f | |||
| 5f14dd1fd8 | |||
| c9c8365dbe | |||
| d09990dec3 | |||
| cff8954b52 | |||
| c2318a3cac | |||
| 6ff404b5f3 | |||
| 53c39f0674 | |||
| 2b604e814b | |||
| e312d820e5 | |||
| 5d8e236258 | |||
| 2ea023b93b | |||
| 4da28f69dc | |||
| cba7c2690b | |||
| cbf5a7be0f | |||
| fcc9d761ba | |||
| 3ac104d1df | |||
| 127833f113 | |||
| 38f59ab010 | |||
| ed69a95311 | |||
| b2e680f454 | |||
| 0b93b30d7f | |||
| 186ea56cbb | |||
| 0e5188f6f8 | |||
| 3c15e85d7a | |||
| 682959a075 | |||
| 6913702897 | |||
| d36a7e2223 | |||
| c9e42e082c | |||
| bbc038d4d3 | |||
| 32f517ab81 | |||
| 9f5a673e5b | |||
| 3e6d5add2b | |||
| eff105483b | |||
| bb4feba434 | |||
| c6da2b4219 | |||
| fa981e8b24 | |||
| e3c36743fe | |||
| e82d25bc33 | |||
| 4def0a4f1d | |||
| cbe07fd2b3 | |||
| c778bcb9c7 | |||
| 0cb35d2de9 | |||
| d0ecb5561d | |||
| 9990c2717a | |||
| be0bb733f8 | |||
| 2ef84e5f2d | |||
| 54a868c789 | |||
| 9670bb3823 | |||
| b901c30ddd | |||
| c6d33ddef0 | |||
| 1088e17974 | |||
| 8889ac1e9f | |||
| d4817ac4cc | |||
| 1e3076675a | |||
| 9da37bb315 | |||
| 68515af7c1 | |||
| 70820f864e | |||
| f515f56083 | |||
| 31bf55ca2c | |||
| 05f609bc9b | |||
| eab6d005b6 | |||
| 477f905858 | |||
| 8a5efbd4ce | |||
| efb93c5556 | |||
| 4c9afbf2a4 | |||
| d141d56967 | |||
| 554949de9f | |||
| 382f36ae06 | |||
| c58b014a58 | |||
| 9ba1f2e8d3 | |||
| 31088c707a | |||
| ca5aef6e22 | |||
| ebdbfe4651 | |||
| 4eadf6a5b2 | |||
| afad02ea38 | |||
| d1bc8f5b1a | |||
| dfc6cf8515 | |||
| 05488d003b | |||
| 560271a7cf | |||
| daba2908ae | |||
| 1576383e92 | |||
| 35beb41484 | |||
| 94e4d3f30f | |||
| 5379f1d4ec | |||
| b7098b9038 | |||
| ebf18b7295 | |||
| 5dd28dde9a | |||
| 2e79ac104e | |||
| 4e8dfa54f5 | |||
| 99ad1619ae | |||
| 09e6e4bb05 | |||
| 319fb4ed27 | |||
| a714c5c235 | |||
| f86fd5e292 | |||
| d7a99c11f0 | |||
| f8a30ac911 | |||
| 8c95e1406a | |||
| 7091db9548 | |||
| 6edca36127 | |||
| 9b841ad810 | |||
| 20f13d83c6 | |||
| d1657e812f | |||
| be49b9637e | |||
| 1a59252c17 | |||
| 23cc5abb1d | |||
| 984e867a82 | |||
| b3aeb6cc7a | |||
| 95a3c5d145 | |||
| 31a7dd703c | |||
| c15c3a9de1 | |||
| 7edfd4b296 | |||
| a5bd5fe803 | |||
| 49d6de17ca | |||
| 562dfd1e60 | |||
| 8a02872188 | |||
| 6fd388da57 | |||
| 36c9843cf1 | |||
| f62a3aef99 | |||
| eafd3f340b | |||
| e1248d6ff2 | |||
| a08a0422d5 | |||
| 6e7d09d297 | |||
| a58dd3639e | |||
| 23117f17e2 | |||
| d013ccd211 | |||
| 8ca794ae99 | |||
| 44a471aff0 | |||
| 25a6a400e1 | |||
| 4ff2207907 | |||
| 877372f748 | |||
| c4658c126f | |||
| 5aadef842e | |||
| d6726fb9ee | |||
| 9e187019cf | |||
| 11ffc4ecc4 | |||
| b660ee2723 | |||
| 3075b0c401 | |||
| 4885b8de1a | |||
| e779bcd5f3 | |||
| fce4a46997 | |||
| cf2da0b193 | |||
| e378520794 | |||
| 7c59a29809 | |||
| 85a78c39c0 | |||
| 4912f0365b | |||
| 6378a8801d | |||
| 25dbc45096 | |||
| ba0642b16e | |||
| a6a42f773e | |||
| 089c7b2a6b | |||
| df32082db8 | |||
| a7f939d73a | |||
| c721aab31c | |||
| c396227fc1 | |||
| 4b31235aad | |||
| d93985bc47 | |||
| 41e45f1b62 | |||
| 5db8c51ad8 | |||
| 8d74f6fd46 | |||
| f1dc018107 | |||
| 53aedd8872 | |||
| 8bbaddd737 | |||
| 7a04403f0e | |||
| 66a0cbf565 | |||
| 6290732479 | |||
| 05ffe72b43 | |||
| bf9efa72a3 | |||
| 2e307cfee4 | |||
| 66e678f5e8 | |||
| d023ac207f | |||
| 267587ba30 | |||
| 8ed0ca89f6 | |||
| be09e9d9d5 | |||
| c9b7ebaf08 | |||
| 90c4a72887 | |||
| 1f577c53b2 | |||
| cb6c219937 | |||
| 77833cd9e5 | |||
| f37c0327ba | |||
| e7e42f21c2 | |||
| 27b3b72465 | |||
| 3a32b403a5 | |||
| 1ea2edcada | |||
| be3833bce0 | |||
| da258d31b8 | |||
| 54c7091ce5 | |||
| eb94fb1f6f | |||
| 644dcbc2c0 | |||
| eddac00bff | |||
| 0c67ceee0a | |||
| 793036a89b | |||
| 4977e5ccdc | |||
| c6caec2f3d | |||
| 90279a1339 | |||
| cc9f04e74c | |||
| 4d3a9b6af3 | |||
| bb86cc480f | |||
| a397296cda | |||
| b6f46e8c02 | |||
| 4478f786e0 | |||
| dc85aacb10 | |||
| 9f5948b8a3 | |||
| 3436fb34a1 | |||
| 62e9d86151 | |||
| b3edd4c11c | |||
| 0440d7e50c | |||
| e86b449526 | |||
| 4e3808e874 | |||
| 95eed594da | |||
| ed968219f1 | |||
| 5108120cd1 | |||
| ed786ba256 | |||
| 25c3a94f85 | |||
| 28558edca2 | |||
| 64a36107fb | |||
| cefbcf1fb0 | |||
| 1ca5c7d140 | |||
| 0556eb948d | |||
| 31d7b1613a | |||
| c9260cab50 | |||
| d47677228c | |||
| c4dd3a4fbf | |||
| f9b9f7d590 | |||
| 180a66c9a4 | |||
| d0155595f2 | |||
| 446e7f72e6 | |||
| 6b6e5d3d9c | |||
| d7c8182d61 | |||
| 6816684a93 | |||
| c2890708b9 | |||
| 5deb9d5b4e | |||
| ff6f8739a9 | |||
| 7b81a4b307 | |||
| a56436b71d | |||
| ee04eed0c9 | |||
| a8fc7b9f0b | |||
| 2bd9888bfd | |||
| b61dbc9219 | |||
| dd9be345e8 | |||
| 06a5aa5204 | |||
| c173110273 | |||
| 899bc667e7 | |||
| b1a6102420 | |||
| 1e057908f8 | |||
| ca0169c921 | |||
| 2658db5992 | |||
| 02020fd0db | |||
| 66c353a050 | |||
| 3cd238c57b | |||
| 4afaba4470 | |||
| 9a1cbaa330 | |||
| 4af38cd866 | |||
| 37225739a4 | |||
| ef7dec9c0d | |||
| 3d5edb5c9d | |||
| d4a0aa33ae | |||
| 799ee704dd | |||
| e3f30df4da | |||
| 563e160009 | |||
| b45d5d3094 | |||
| a7c2fc9919 | |||
| 258575eb4b | |||
| fc596df7f9 | |||
| 8ce7ac2fff | |||
| b6889a94b1 | |||
| eacbd2aed7 | |||
| 59ba17ff18 | |||
| f5687735c0 | |||
| b692ff6d8b | |||
| dd76aabb05 | |||
| 03956ecec8 | |||
| 7863622635 | |||
| 24818f4ba3 | |||
| 61cac662e0 | |||
| bc5fd47409 | |||
| fce643cdc1 | |||
| 673f1e2d90 | |||
| b93009c399 | |||
| 3cf0d8bc71 | |||
| fb2146bc49 | |||
| 7c4a9434c8 | |||
| 31b7aef1db | |||
| 411b11325c | |||
| 0bfd95bcbd | |||
| a789193dfd | |||
| 4e8f49e131 | |||
| 27db0d4b24 | |||
| d4b306a4ef | |||
| 57b3bba0b2 | |||
| 7a3f44b14b | |||
| 44df637602 | |||
| adf4d6160a | |||
| b1ab48abd6 | |||
| 8254459404 | |||
| d04f78fe1b | |||
| 39d013f74c | |||
| f102e442c6 | |||
| d977ba98de | |||
| 266027d880 | |||
| 2a287771f7 | |||
| 8fc939cae4 | |||
| 5b79b9cb2a | |||
| 10923afbf9 | |||
| 58a4448dda | |||
| 877e3e59a8 | |||
| 25531a9599 | |||
| 475fd275ec | |||
| 63c5504d12 | |||
| a4d9a6f66d | |||
| abc20f0a48 | |||
| e59ec6f72f | |||
| 45a7554ff6 | |||
| 8b47d0814d | |||
| c83f302b63 | |||
| 15dce078d3 | |||
| 29fe94bc99 | |||
| 8913343948 | |||
| 4e2e8d2066 | |||
| 6d981257d6 | |||
| 7ca175edc3 | |||
| dc2839e5da | |||
| 66223b982a | |||
| 530c5a5dfe | |||
| 4d83988764 | |||
| 32a5f1c184 | |||
| 3bd78278bf | |||
| 8c1f2fddda | |||
| 8871ca8dcd | |||
| 2060668327 | |||
| fd374f76fe | |||
| 55ba7e7857 | |||
| 5ab9c6ef7a | |||
| c366343e72 | |||
| d95379af40 | |||
| f21f1f1e30 | |||
| 78fa9b2d43 | |||
| bf9b5db6ca | |||
| e697371c90 | |||
| 4e1a5a87da | |||
| 9b76e0155a | |||
| 2a94274ad0 | |||
| d8683c7d87 | |||
| b7ac5a9cd2 | |||
| e931a9c028 | |||
| 4964a973c4 | |||
| 3a309cbc8f | |||
| 974b4446a9 | |||
| f4601cd910 | |||
| 197560545c | |||
| f779076b72 | |||
| 9a20f8ca24 | |||
| d554145356 | |||
| 9214638f03 | |||
| 5f0a12f061 | |||
| 48efa225d1 | |||
| 8a1983bc51 | |||
| c2c930e659 | |||
| 48ebdeff56 | |||
| e9ef7618d0 | |||
| 212f96d743 | |||
| 4fdb3f7ce4 | |||
| 78bd9d3cd3 | |||
| f4fd058c03 | |||
| 5dad87fbe5 | |||
| d48dee2119 | |||
| 7876c57416 | |||
| 578cc36012 | |||
| 21654f95fe | |||
| 688f798548 | |||
| 953e6328e0 | |||
| a819e76eef | |||
| 58d9a6184d | |||
| 365be38c83 | |||
| 200ac68721 | |||
| a925e9c2ef | |||
| 920f542ef1 | |||
| 009e578a67 | |||
| 8e9497fb45 | |||
| 9b0a66d91b | |||
| 76313f8bba | |||
| bbb56dee70 | |||
| 324efe2d33 | |||
| 2c095200a2 | |||
| 4144ef962e | |||
| bdee389b54 | |||
| 2025501edf | |||
| 7d9cfdcd0e | |||
| 3ae4f77113 | |||
| 369e330868 | |||
| 42cd1e7090 | |||
| e3574f7b20 | |||
| 8dd0dff13c | |||
| af7d444661 | |||
| bfd5d9f0d3 | |||
| 4d4d7b8227 | |||
| 0b30152166 | |||
| 8ec3532e39 | |||
| 75a6e5c601 | |||
| 4d80f2b122 | |||
| 68dce02a6d | |||
| bb6f0d3cef | |||
| 4f0e2e3546 | |||
| 89d66d6317 | |||
| b52185beee | |||
| 8877ad9d2f | |||
| 7b071b56d1 | |||
| abb3df50c7 | |||
| 96b5506d74 | |||
| ea883aae57 | |||
| 9fa7977a13 | |||
| 024e9ad746 | |||
| f9198b072d | |||
| 48abcc124f | |||
| fe13bdc811 | |||
| 4b6a541033 | |||
| b77a583906 | |||
| 62f09bf347 | |||
| 588a23b3c5 | |||
| a23fdf5676 | |||
| 1b9d42a132 | |||
| f7c07210d8 | |||
| 86fa741d58 | |||
| 36392c2205 | |||
| 61e9f8996b | |||
| 3c1512f49e | |||
| 0ae4384c7d | |||
| 02c4808ba8 | |||
| b76240b711 | |||
| b51dba9ce8 | |||
| 2ccc6255bf | |||
| aace1afda9 | |||
| aaf6f455d9 | |||
| b1ba81cd53 | |||
| b9dc851e68 | |||
| 4d14220335 | |||
| c1c8baf50a | |||
| 177cd2b09e | |||
| 98176058a1 | |||
| c7dee155cd | |||
| 6b850594e9 | |||
| 95213fe90c | |||
| 3fe0059f80 | |||
| 2ba8174bd4 | |||
| 66162cddc4 | |||
| 90199945e2 | |||
| fb0ee82291 | |||
| f00f11fa1b | |||
| 716cccb1ab | |||
| 59a978b8fd | |||
| 7cbbd46f51 | |||
| 6501ac3aaa | |||
| a3fcec0043 | |||
| 3bb1d69c6e | |||
| d2b37593a9 | |||
| 32436b1868 | |||
| 732e0bd382 | |||
| d96e876352 | |||
| b2f4cfe9c1 | |||
| b8d2b52111 | |||
| fc3d0d9e7f | |||
| 1d6b911052 | |||
| b46c16e0d6 | |||
| 45aa4d51c4 | |||
| b589e40ee8 | |||
| 6221b267ad | |||
| 7b38629e17 | |||
| 6c52c9573d | |||
| 8f34e5f84c | |||
| 00120af128 | |||
| 53006a5bff | |||
| 834c3aee2c | |||
| 2fbf52c3b9 | |||
| 22b8c89e7a | |||
| 60d9656ee3 | |||
| 0e9d1b84cc | |||
| b62080783a | |||
| 6c89a16f9b | |||
| 107afd61de | |||
| 43dda5e077 | |||
| b44fa99d10 | |||
| eff47031bf | |||
| 986a091e99 | |||
| 4cbdcccd61 | |||
| 1b3decbb27 | |||
| 6d58bd0572 | |||
| aa6701d9e5 | |||
| aea691306b | |||
| 9f7c89d6e4 | |||
| eea6a0eda2 | |||
| 807876d2f5 | |||
| 01e673b31b | |||
| d60eb5087d | |||
| 8b72322b3d | |||
| 092fc971f6 | |||
| 2b0aa074c0 | |||
| d267877de8 | |||
| 83675ea1b7 | |||
| 99cecddad6 | |||
| 2bc68c883f | |||
| f0943e9484 | |||
| bdab2f2542 | |||
| 495f589dc5 | |||
| 6aec6cecc5 | |||
| 068ec412bb | |||
| bfdbc715c5 | |||
| f971944ffb | |||
| 6e4ff04f5d | |||
| 4b265fcdbe | |||
| cd759ca84e | |||
| e8e32610a7 | |||
| 9ff6f1da26 | |||
| 840fc3f280 | |||
| 9b5c2a3918 | |||
| b8ba67e47c | |||
| 8bfa9c46b4 | |||
| 2940d19f08 | |||
| f037f608e2 | |||
| 5899b98936 | |||
| 1b3d2639bd | |||
| a5e39811a9 | |||
| b138837bdd | |||
| c67afdd608 | |||
| e034a8744e | |||
| 582a7d25f2 | |||
| ff00d23aac | |||
| 96d2973cc9 | |||
| 6fd2efbab3 | |||
| 0ac3b3f8ef | |||
| 4cdad75475 | |||
| 83d8308370 | |||
| ac78e36087 | |||
| 711233654d | |||
| 92d2fe548f | |||
| 2057219dce | |||
| 21af626dda | |||
| 5c7841d3b0 | |||
| 308bd84e2d | |||
| 9e0c7a3050 | |||
| a574d33792 | |||
| 2ea0753743 | |||
| 949fbb6c91 | |||
| b035941bfd | |||
| 3400801e27 | |||
| 8f875af4a8 | |||
| c4a73a6b7b | |||
| 0e8cf31c1e | |||
| 7adabe6b06 | |||
| bdf7eeadb6 | |||
| a7b7c50624 | |||
| bed34395c2 | |||
| 4700a233c6 | |||
| d01b3c2d20 | |||
| 92ed76434e | |||
| 1aa80801b9 | |||
| f2b2cd09b8 | |||
| cd5d0f2783 | |||
| 1d0cd9a797 | |||
| 2f2b60cc94 | |||
| b268e6eb11 | |||
| a112e4d333 | |||
| 64a5556559 | |||
| 9a81515812 | |||
| 2d19b93949 | |||
| c0de6b2959 | |||
| f008b08d1e | |||
| 0974ef3f15 | |||
| 09c6ce5846 | |||
| e4d3420585 | |||
| 1ea172415d | |||
| cde1f2caa8 | |||
| 88ae58e53c | |||
| e3d406cc70 | |||
| 663b91c6fe | |||
| b48bada49f | |||
| f84b1b39ca | |||
| 092a0a1d32 | |||
| aa180199cc | |||
| 87b88c55d8 | |||
| c55938300c | |||
| 07d29f507e | |||
| 41d5b42156 | |||
| f14ec82a9c | |||
| 9e51872ece | |||
| e3d9f19580 | |||
| 30a3f5af49 | |||
| 8ed84731d8 | |||
| e2d6446b22 | |||
| 872b3a7558 | |||
| a31f77c5c1 | |||
| 7c880679ee | |||
| 74407bc1b2 | |||
| d7b4c5f112 | |||
| 89fdfe1edb | |||
| 9b9346ecb4 | |||
| 08c9fb6c7d | |||
| 703afd7e15 | |||
| a454ca0c50 | |||
| a755274a25 | |||
| 719ed5d49a | |||
| f1ae44f8ac | |||
| f86efd9a29 | |||
| d4d7850b81 | |||
| 9ffefb8e4b | |||
| eebb52b399 | |||
| 3091c9623e | |||
| 39a85bb913 | |||
| 40d512e263 | |||
| a856391645 | |||
| 57d2172227 | |||
| a328326570 | |||
| a241f5c84b | |||
| 4729ecf20d | |||
| 686a96a4ac | |||
| 9b629f428a | |||
| 5df4c8e92d | |||
| 442ea69220 | |||
| d92cf2b0df | |||
| 6028f91084 | |||
| 5229fac41b | |||
| 1fbfb03896 | |||
| 7eb0688aac | |||
| 15d2170eda | |||
| 28f1123235 | |||
| 36dc39913d | |||
| ed754c06c5 | |||
| 6f0fa1c367 | |||
| 657c68d75e | |||
| 106e14bfef | |||
| 0df9d4aa70 | |||
| 7f8762a6d1 | |||
| 5ced21e2a4 | |||
| f5127bbe0c | |||
| 0e5612d573 | |||
| 378608e7dc | |||
| f9224f1b33 | |||
| df6d47d2cf | |||
| 2adf0455de | |||
| c71c685bba | |||
| fde5d5e7b6 | |||
| d6a1e74268 | |||
| 15f07fa821 | |||
| f19b624df2 | |||
| e145fc0e6e | |||
| 64bfd38d33 | |||
| 1b5a239801 | |||
| 4f5eaa3fd5 | |||
| ffa70f4205 | |||
| d568301316 | |||
| 0d3295c6a2 | |||
| bf17f4d256 | |||
| 0ecbdeb8e1 | |||
| c3bf5d3267 | |||
| d0f0400862 | |||
| 8d1c7d5019 | |||
| bd42e57027 | |||
| adbb4afed6 | |||
| 022496fead | |||
| 275c8f7815 | |||
| 056cb74a68 | |||
| 9c824ee659 | |||
| 4a6caedab9 | |||
| da68eff111 | |||
| 119df006ed | |||
| 6718c75d4a | |||
| 6de0f2f86a | |||
| fbbc8d3e22 | |||
| 4edf4ee159 | |||
| 42dc254085 | |||
| fe1601916d | |||
| 1323015e03 | |||
| 657f53fcb4 | |||
| 09191d8526 | |||
| 23780a7711 | |||
| f2b351edab | |||
| df53d812eb | |||
| d87c3b8040 | |||
| a9c9c31efd | |||
| 9c261f7d8a | |||
| b4293da182 | |||
| 727e53a70c | |||
| 030d77e8cd | |||
| d344458ddc | |||
| 1cfc55a1e7 | |||
| b097eea3c2 | |||
| b6b210676f | |||
| 479440d2f4 | |||
| b533196187 | |||
| e06736f0a7 | |||
| 0cf43c29e8 | |||
| f92ece762a | |||
| 678a581647 | |||
| 906f45f247 | |||
| 5b078ac743 | |||
| 8d00e46a48 | |||
| 79d1a0f2ef | |||
| e9477034be | |||
| 9b1b50dd98 | |||
| 54ad40699c | |||
| 1ffbef0344 | |||
| 6bf34c96d2 | |||
| 6bf2fb167d | |||
| c5824eba3b | |||
| c4b6a406ad | |||
| b5e5a50305 | |||
| 09f316dd15 | |||
| 3eb09a0f71 | |||
| e54718f48e | |||
| 6d5a963b3f | |||
| f6d13447e9 | |||
| 5cd23ccb54 | |||
| 9c1779f846 | |||
| 4b6ffcd6a1 | |||
| 6a414a7fb6 | |||
| ff92aa455f | |||
| 067bb74ff9 | |||
| fe95548a92 | |||
| 99b563ee9d | |||
| 1461f46548 | |||
| 098093dbc0 | |||
| e62e6db99a | |||
| b6b63f9c57 | |||
| f292de452d | |||
| f20f6178e5 | |||
| 9cfdda9207 | |||
| 993dc6b4bc | |||
| e7e5654bfd | |||
| 3769a52f5f | |||
| a08ae304f9 | |||
| c6459b8bd6 | |||
| 19a0b54afb | |||
| 06ec2fdbdc | |||
| 76bf1984a3 | |||
| d41f331060 | |||
| 3335dbf751 | |||
| 8b7c7a1aaa | |||
| eef2a0c0b9 | |||
| b1a6f949b0 | |||
| f15f275639 | |||
| c19c3f743c | |||
| 1d1107cb75 | |||
| db8c8fdfa6 | |||
| 91c02ae143 | |||
| 565f372726 | |||
| 99132c84ad | |||
| 48f21340e4 | |||
| db610e5f0d | |||
| 84a1c0f273 | |||
| 420540361b | |||
| 1d830662fe | |||
| 25a10a922d | |||
| c7682f1a22 | |||
| 3a1b79b8dd | |||
| 32341f857d | |||
| 9c8af6337f | |||
| 1c65afc17d | |||
| 2adc2fbb1b | |||
| e90c71ef23 | |||
| 94629c884f | |||
| 32ec308187 | |||
| 5b8233ce7f | |||
| 10ab9c33fa | |||
| a36187301d | |||
| 1cefb7c3fb | |||
| 1c1d2dce87 | |||
| 2bd09dc71f | |||
| 5abad53cfb | |||
| 155b7e47ff | |||
| 52442f1d82 | |||
| 372cb1b6b8 | |||
| bf0da39a3b | |||
| 3267091574 | |||
| 93ad887271 | |||
| 756781c27c | |||
| 13ef2444eb | |||
| 1c4154dcaf | |||
| 83e13850b6 | |||
| 9df986a9b7 | |||
| be03086f10 | |||
| 632a122471 | |||
| 50adc6401c | |||
| c0507b799e | |||
| bcbd4097cc | |||
| bb300cdd18 | |||
| 2128b9815e | |||
| d80be0cc1b | |||
| 5fc83853ca | |||
| 27c3abb7c2 | |||
| 8e8cfe9429 | |||
| 2a3f5a7c2c | |||
| ee5490db01 | |||
| 6be503aa02 | |||
| de87b5491a | |||
| 6667beccf3 | |||
| 375f6ae048 | |||
| 0ac35ca71d | |||
| 7906ec6553 | |||
| 3971cd0896 | |||
| e1c75a9cd9 | |||
| f245b70061 | |||
| b84d865004 | |||
| 3de9aa65bc | |||
| 2cb37d34f3 | |||
| fdf471db8c | |||
| dcad3b4355 | |||
| 6d9d722092 | |||
| b3586c05e6 | |||
| 688964785b | |||
| 4d17b96b5d | |||
| 558cb53aba | |||
| 9628299145 | |||
| 90c018e5c4 | |||
| 6b5ff6708a | |||
| c38a57b5b1 | |||
| 65dc049ff2 | |||
| ddcbf8de71 | |||
| 6aac143c9b | |||
| d64ffa0632 | |||
| 4421a872f4 | |||
| 1825dbb587 | |||
| 3f5c281422 | |||
| 38dc13bb19 | |||
| b1fceb7ad1 | |||
| 1319481a3d | |||
| 01978a6ff7 | |||
| 11b9fd4edd | |||
| 7d9613f55f | |||
| 4c7a909047 | |||
| 285b0de8af | |||
| 43233b4576 | |||
| 13782526d7 | |||
| 5ed69e56f8 | |||
| 1fbdd39e83 | |||
| a59338ba68 | |||
| 0a5f13ee42 | |||
| f8bd1c403c | |||
| 2eb1d67f15 | |||
| 84e8e65a21 | |||
| ec2ef303d5 | |||
| 713e151ffb | |||
| bc793401ee | |||
| 088ffea987 | |||
| a422a26554 | |||
| 87ca3181ab | |||
| 945f7700a7 | |||
| b471b8a873 | |||
| d2e422dede | |||
| 18a6c240f7 | |||
| 738c958195 | |||
| d3bad61f74 | |||
| 8811ab99cf | |||
| a31c3ea665 | |||
| 878c52daf0 | |||
| 939b8823cd | |||
| 525eb7b135 | |||
| 3db8a2df24 | |||
| 3c0b2cce6c | |||
| 2d924d1548 | |||
| 9fd4df68d4 | |||
| 278cf40d78 | |||
| 34e2c5c2ad | |||
| d915973f09 | |||
| 5df9d33741 | |||
| 27392dde2d | |||
| 15bee7ee56 | |||
| e2d2024cc2 | |||
| 4ee8dd67c6 | |||
| 137a5d3e3b | |||
| 62dcf4671d | |||
| 7b9fb2873c | |||
| 83dab93ea2 | |||
| 29be9eb3cc | |||
| 0c1eef4a87 | |||
| c5fe6f5326 | |||
| 0ea523f104 | |||
| d6e4c1a616 | |||
| 199dcb9baf | |||
| ca180c4b98 | |||
| 4d35016cfa | |||
| 7295968394 | |||
| 5d18be16e6 | |||
| 87a5b0913b | |||
| 86a629d9ad | |||
| 8bb43d915a | |||
| 08505a56ac | |||
| 12c9223ab2 | |||
| 9d10812945 | |||
| 000844c7ac | |||
| 0e754a70bb | |||
| 5931d8e603 | |||
| 502c53d1fb | |||
| e1da33e2df | |||
| 99821a9aba | |||
| ef4208a0ad | |||
| d3997ff0d7 | |||
| d358ac217d | |||
| f549a446c3 | |||
| 82f5a7821b | |||
| a48d90fd32 | |||
| 1f57455f67 | |||
| 0c8f515e83 | |||
| 5f4ba331d5 | |||
| e8210b467c | |||
| e9fe0ee512 | |||
| 18a9f562df | |||
| 11356f5e3b | |||
| 516aee0eec | |||
| cfa1b85454 | |||
| 5f96bef5a3 | |||
| 0083753218 | |||
| 103321aea2 | |||
| 28bf1fc477 | |||
| ab3583d542 | |||
| 919caffcb9 | |||
| 0ce8b9fa18 | |||
| 7494cd89d3 | |||
| 8d8eff747b | |||
| 711aab1c79 | |||
| abf073bd22 | |||
| cca1cd2c5d | |||
| 6e1ed5b26a | |||
| 2fa7aaea22 | |||
| 02e7cb5640 | |||
| 1eddd16466 | |||
| 97e110627e | |||
| 9a296a5f15 | |||
| 99307243d9 | |||
| 6e88350295 | |||
| 1de2d6b17e | |||
| 0d7f43cc22 | |||
| cfbd5902e6 | |||
| 38bd227c4b | |||
| fd049c5140 | |||
| a957d61087 | |||
| b20a816854 | |||
| a7144d0c4f | |||
| 0c9f755e5a | |||
| ba9dd014f3 | |||
| 26f5a0e42b |
0
.gitmodules
vendored
Normal file
0
.gitmodules
vendored
Normal file
@@ -1,4 +1,4 @@
|
||||
# NodeMgmt - Galera/NGINX Node Management
|
||||
|
||||
|
||||
bash <(curl -sL https://scity.xyz/install-nodemgmt)
|
||||
bash <(curl -sL https://go.scity.us/install-nodemgmt)
|
||||
|
||||
251
defaults.inc
251
defaults.inc
@@ -1,60 +1,223 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
VERS='2.02072019'
|
||||
NODEHOSTS=10.5.10.51,10.5.10.52,10.5.10.53
|
||||
NODESERVICES=mysql,nginx,gitea,haproxy,keepalived,maxscale
|
||||
REPL_CHECKS=
|
||||
CERT_DAEMON='/usr/bin/certbot'
|
||||
VERS='4.6.23-04302023'
|
||||
|
||||
#NODETYPES=WEB,LB
|
||||
NODETYPES=MYSQL,LB,WEB,NC,WPD,LPD,MM,PW
|
||||
MYSQLHOSTS=10.10.1.51,10.10.1.52
|
||||
WEBHOSTS=10.10.1.121,10.10.1.122
|
||||
LBHOSTS=10.10.10.81,10.10.10.82
|
||||
NCHOSTS=10.10.10.42
|
||||
WPDHOSTS=100.90.74.120,100.123.225.4,10.10.1.28
|
||||
LPDHOSTS=10.10.10.10,10.10.10.11
|
||||
MMHOSTS=10.10.1.24
|
||||
PRIMARYHOST=10.10.1.51
|
||||
MYSQLMANAGER=10.10.10.50
|
||||
GLHOSTS=10.10.1.41,10.10.1.42,10.10.1.121,10.10.1.122
|
||||
PWHOSTS=10.10.0.240
|
||||
|
||||
NODESERVICES=mariadb,mysql,nginx,gitea,pdnsadmin,pdnsadmin.socket,haproxy,keepalived,maxscale,postgresql,web,php5.6-fpm,php7.2-fpm,php7.3-fpm,php7.4-fpm,syncthing,pdns,proxysql,radarr,sonarr,jackett,qbittorrent,snap.tautulli.tautulli,ombi,glusterd,redis-server,mosquitto
|
||||
MYSQLSERVICES_CHECK=mariadb,proxysql,keepalived
|
||||
WEBSERVICES_CHECK=nginx,php5.6-fpm,php7.2-fpm,php7.3-fpm,php7.4-fpm,php8.2-fpm,gitea,keepalived
|
||||
LBSERVICES_CHECK=nginx,haproxy,keepalived
|
||||
NCSERVICES_CHECK=nginx,php8.1-fpm,redis-server
|
||||
WPDSERVICES_CHECK=pdns,mariadb,pdnsadmin,pdnsadmin.socket,proxysql
|
||||
LPDSERVICES_CHECK=pdns,mariadb,pdnsadmin,pdnsadmin.socket,keepalived
|
||||
MMSERVICES_CHECK=radarr,sonarr,jackett,qbittorrent,snap.tautulli.tautulli,ombi,nginx,php8.2-fpm
|
||||
PWSERVICES_CHECK=mosquitto
|
||||
|
||||
WEBDOCKER=phpmyadmin,phppgadmin
|
||||
#LBDOCKER=nginx-proxy_manager
|
||||
|
||||
noheader=' service status-check nightlyrephp7.3-fpm,new backup report check checkcerts gitea update-nodes copynpmcerts singleservercheck '
|
||||
CERT_DAEMON='/snap/bin/certbot'
|
||||
FOLDER=/opt/idssys/nodemgmt
|
||||
TMPFOLDER=${FOLDER}/.tmp
|
||||
SCRIPT=${FOLDER}/nodemgmt-scripts.sh
|
||||
LOGFILE=${FOLDER}/logfile
|
||||
RENOTIFY=900
|
||||
|
||||
[ ! -d ${TMPFOLDER} ] && mkdir ${TMPFOLDER}
|
||||
|
||||
|
||||
NM_SRVCOPT=(start stop restart reload enable disable)
|
||||
|
||||
#MYSQL_REPL_CHECK=( )
|
||||
#WEB_REPL_CHECK=(nginx www ssl lessh php pma pdnsa)
|
||||
WEB_REPL_CHECK=( web-data )
|
||||
LB_REPL_CHECK=( lb-data )
|
||||
#NC_REPL_CHECK=(apache nextcloud-php nextcloud-data)
|
||||
#NC_REPL_CHECK=( )
|
||||
|
||||
|
||||
|
||||
declare -A NM_HOSTNAMES
|
||||
NM_HOSTNAMES['10.10.1.121']='Webserver-Node1'
|
||||
NM_HOSTNAMES['10.10.1.122']='Webserver-Node2'
|
||||
NM_HOSTNAMES['10.10.1.51']='MySQL-Node1'
|
||||
NM_HOSTNAMES['10.10.1.52']='MySQL-Node2'
|
||||
NM_HOSTNAMES['10.10.10.81']='LB-Node1'
|
||||
NM_HOSTNAMES['10.10.10.82']='LB-Node2'
|
||||
NM_HOSTNAMES['10.10.10.10']='DNS-Node1'
|
||||
NM_HOSTNAMES['10.10.10.11']='DNS-Node2'
|
||||
NM_HOSTNAMES['10.10.10.42']='Nextcloud-Server'
|
||||
NM_HOSTNAMES['159.203.158.51']='PowerDNS-Node1'
|
||||
NM_HOSTNAMES['146.190.1.194']='PowerDNS-Node3'
|
||||
NM_HOSTNAMES['10.10.10.50']='MySQL-Manager'
|
||||
NM_HOSTNAMES['10.10.0.240']='PowerWall'
|
||||
NM_HOSTNAMES['100.90.74.120']='WAN-DNS1 (East)'
|
||||
NM_HOSTNAMES['100.123.225.4']='WAN-DNS2 (West)'
|
||||
|
||||
|
||||
declare -i errtime
|
||||
|
||||
IFS=,
|
||||
NODE_HOSTS=(${NODEHOSTS})
|
||||
NODE_TYPES=(${NODETYPES})
|
||||
MYSQL_HOSTS=(${MYSQLHOSTS})
|
||||
WEB_HOSTS=(${WEBHOSTS})
|
||||
LB_HOSTS=(${LBHOSTS})
|
||||
NC_HOSTS=(${NCHOSTS})
|
||||
WPD_HOSTS=(${WPDHOSTS})
|
||||
LPD_HOSTS=(${LPDHOSTS})
|
||||
MM_HOSTS=(${MMHOSTS})
|
||||
GL_HOSTS=(${GLHOSTS})
|
||||
PW_HOSTS=(${PWHOSTS})
|
||||
|
||||
NODE_SERVICES=(${NODESERVICES})
|
||||
MYSQL_SERVICES_CHECK=(${MYSQLSERVICES_CHECK})
|
||||
WEB_SERVICES_CHECK=(${WEBSERVICES_CHECK})
|
||||
LB_SERVICES_CHECK=(${LBSERVICES_CHECK})
|
||||
NC_SERVICES_CHECK=(${NCSERVICES_CHECK})
|
||||
WPD_SERVICES_CHECK=(${WPDSERVICES_CHECK})
|
||||
LPD_SERVICES_CHECK=(${LPDSERVICES_CHECK})
|
||||
MM_SERVICES_CHECK=(${MMSERVICES_CHECK})
|
||||
PW_SERVICES_CHECK=(${PWSERVICES_CHECK})
|
||||
LOCAL_SERVICES=(${LOCAL_SERVICES})
|
||||
|
||||
WEB_DOCKER=(${WEBDOCKER})
|
||||
LB_DOCKER=(${LBDOCKER})
|
||||
|
||||
unset IFS
|
||||
|
||||
declare -A NM_NODETYPES
|
||||
NM_NODETYPES['MYSQL']='MySQL'
|
||||
NM_NODETYPES['LB']='LoadBalance'
|
||||
NM_NODETYPES['WEB']='Webserver'
|
||||
NM_NODETYPES['NC']='Nextcloud'
|
||||
NM_NODETYPES['WPD']='WAN PowerDNS'
|
||||
NM_NODETYPES['LPD']='LAN PowerDNS'
|
||||
NM_NODETYPES['MM']='Media Manager'
|
||||
NM_NODETYPES['PW']='PowerWall'
|
||||
|
||||
declare -A NM_SERVICES
|
||||
NM_SERVICES['mysql']='MySQL'
|
||||
NM_SERVICES['nginx']='NGINX'
|
||||
NM_SERVICES['gogs']='Gogs'
|
||||
NM_SERVICES['gitea']='Gitea'
|
||||
NM_SERVICES['haproxy']='HAProxy'
|
||||
NM_SERVICES['keepalived']='Keepalived'
|
||||
NM_SERVICES['maxscale']='MaxScale'
|
||||
NM_SERVICES['mariadb']='MariaDB (MySQL)'
|
||||
NM_SERVICES['postgresql']='PostgreSQL'
|
||||
NM_SERVICES['apache2']='Apache Web Server'
|
||||
NM_SERVICES['nginx']='NGINX Web Server'
|
||||
NM_SERVICES['gogs']='Gogs Git Repository'
|
||||
NM_SERVICES['gitea']='Gitea Git Repository'
|
||||
NM_SERVICES['haproxy']='HAProxy Load Balancer'
|
||||
NM_SERVICES['keepalived']='Keepalived Load Balancer'
|
||||
NM_SERVICES['maxscale']='MaxScale Load Balancer'
|
||||
NM_SERVICES['cmon']='CC-Controller'
|
||||
NM_SERVICES['cmon-events']='CC-Events Manager'
|
||||
NM_SERVICES['cmon-cloud']='CC-Cloud Daemon'
|
||||
NM_SERVICES['php5.6-fpm']='PHP 5.6 FPM'
|
||||
NM_SERVICES['php7.2-fpm']='PHP 7.2 FPM'
|
||||
NM_SERVICES['php7.3-fpm']='PHP 7.3 FPM'
|
||||
NM_SERVICES['php7.4-fpm']='PHP 7.4 FPM'
|
||||
NM_SERVICES['php8.0-fpm']='PHP 8.0 FPM'
|
||||
NM_SERVICES['php8.1-fpm']='PHP 8.1 FPM'
|
||||
NM_SERVICES['php8.2-fpm']='PHP 8.2 FPM'
|
||||
NM_SERVICES['syncthing']='Syncthing'
|
||||
NM_SERVICES['pdns']='PowerDNS Server'
|
||||
NM_SERVICES['pdnsadmin']='PowerDNS-Admin'
|
||||
NM_SERVICES['pdnsadmin.socket']='PowerDNS-Admin Socket'
|
||||
NM_SERVICES['proxysql']='ProxySQL Load Balancer'
|
||||
NM_SERVICES['radarr']='Radarr'
|
||||
NM_SERVICES['sonarr']='Sonarr'
|
||||
NM_SERVICES['jackett']='Jackett'
|
||||
NM_SERVICES['qbittorrent']='qBittorrent'
|
||||
NM_SERVICES['snap.tautulli.tautulli']='Tautulli'
|
||||
NM_SERVICES['ombi']='Ombi'
|
||||
NM_SERVICES['glusterd']='Gluster FileSystem'
|
||||
NM_SERVICES['redis-server']='Redis Caching Server'
|
||||
NM_SERVICES['mosquitto']='Mosquitto MQTT Broker'
|
||||
|
||||
declare -A NM_DOCKERS
|
||||
NM_DOCKERS['phpmyadmin']='phpMyAdmin'
|
||||
NM_DOCKERS['phppgadmin']='phpPgAdmin'
|
||||
NM_DOCKERS['nginx-proxy_manager']='Nginx Proxy Manager'
|
||||
|
||||
declare -A NM_DOCKER_COMPOSE
|
||||
NM_DOCKER_COMPOSE['phpmyadmin']='/mnt/web-Data/phpmyadmin'
|
||||
NM_DOCKER_COMPOSE['phppgadmin']='/mnt/web-Data/phppgadmin'
|
||||
NM_DOCKER_COMPOSE['nginx-proxy_manager']='/opt/nginx-proxy'
|
||||
|
||||
declare -A NM_SRVCOPTS
|
||||
NM_SRVCOPTS['status']='Status'
|
||||
NM_SRVCOPTS['start']='Start'
|
||||
NM_SRVCOPTS['stop']='Stopp'
|
||||
NM_SRVCOPTS['restart']='Restart'
|
||||
NM_SRVCOPTS['reload']='Reload'
|
||||
NM_SRVCOPTS['enable']='Enabl'
|
||||
NM_SRVCOPTS['disable']='Disabl'
|
||||
NM_SRVCOPTS['daemon-reload']='Daemon-Reload'
|
||||
|
||||
NM_SRVCOPT=(start stop restart reload enable disable)
|
||||
|
||||
declare -A REPL_CHECKS
|
||||
REPL_CHECKS['nginx']='/etc/nginx'
|
||||
REPL_CHECKS['ssl']='/etc/letsencrypt'
|
||||
REPL_CHECKS['php']='/etc/php'
|
||||
REPL_CHECKS['www']='/var/www'
|
||||
REPL_CHECKS['git']='/var/lib/gitea'
|
||||
REPL_CHECKS['apache']='/etc/apache2'
|
||||
REPL_CHECKS['nginx']='/mnt/web-data/nginx'
|
||||
REPL_CHECKS['nginxproxy']='/opt/nginx-proxy'
|
||||
REPL_CHECKS['lb-data']='/opt/lb-data'
|
||||
REPL_CHECKS['ssl']='/mnt/web-data/letsencrypt'
|
||||
REPL_CHECKS['lessh']='/home/le/.ssh'
|
||||
REPL_CHECKS['php']='/mnt/web-data/php'
|
||||
REPL_CHECKS['www']='/mnt/web-data/www'
|
||||
REPL_CHECKS['web-data']='/mnt/web-data'
|
||||
REPL_CHECKS['git']='/mnt/web-data/gitea'
|
||||
REPL_CHECKS['gitssh']='/home/git'
|
||||
|
||||
REPL_CHECK=(nginx ssl php www git gitssh)
|
||||
REPL_CHECKS['pma']='/mnt/web-data/phpmyadmin'
|
||||
REPL_CHECKS['pdnsa']='/mnt/web-data/powerdns-admin'
|
||||
REPL_CHECKS['nextcloud-data']='/mnt/Nextcloud-Data'
|
||||
REPL_CHECKS['nextcloud-php']='/etc/php'
|
||||
|
||||
declare -A REPL_DESC
|
||||
REPL_DESC['apache']='Apache Settings'
|
||||
REPL_DESC['nginx']='NGINX Settings'
|
||||
REPL_DESC['nginxproxy']='NGINX-Proxy Settings'
|
||||
REPL_DESC['lb-data']='LB-Data (NGINX / SSL-Certs)'
|
||||
REPL_DESC['ssl']='SSL Certificates'
|
||||
REPL_DESC['lessh']='LetsEncrypt SSH Keys'
|
||||
REPL_DESC['php']='PHP Settings'
|
||||
REPL_DESC['www']='Webserver Files'
|
||||
REPL_DESC['web-data']='Web Data (NGINX/PHP)'
|
||||
REPL_DESC['git']='Gitea System'
|
||||
REPL_DESC['gitssh']='Gitea SSH Keys'
|
||||
REPL_DESC['pma']='phpMyAdmin Settings'
|
||||
REPL_DESC['pdnsa']='PowerDNS Admin'
|
||||
REPL_DESC['nextcloud-data']='Nextcloud Data'
|
||||
REPL_DESC['nextcloud-php']='Nextcloud PHP Settings'
|
||||
|
||||
declare -A BACKUP_ITEMS
|
||||
BACKUP_ITEMS[nginx-settings]=/etc/nginx
|
||||
BACKUP_ITEMS[letsencrypt-certs]=/etc/letsencrypt
|
||||
BACKUP_ITEMS[gitea]=/var/lib/gitea
|
||||
BACKUP_ITEMS[nginx-logs]='/var/www/!NGINX-Logs'
|
||||
#BACKUP_ITEMS[webserver-files]=/var/www
|
||||
|
||||
GET-CHECKCERT-DOMAINS(){
|
||||
declare -A CHECKCERT_DOMAINS
|
||||
IFS=$'\n'
|
||||
for LINE in `egrep -v '(^#|^$)' ${FOLDER}/ssl-cert-check/ssldomains`; do
|
||||
HOST=${LINE%% *}
|
||||
PORT=${LINE#* }
|
||||
IFS=" "
|
||||
CHECKCERT_DOMAINS[${HOST}]=${PORT}
|
||||
done
|
||||
unset IFS
|
||||
}
|
||||
|
||||
DISP_HEADER(){
|
||||
declare -i cw; declare -i spc1; declare -i c
|
||||
@@ -62,7 +225,7 @@ DISP_HEADER(){
|
||||
clear
|
||||
fi
|
||||
echo ""
|
||||
echo -e "${idsCL[LightGreen]} NodeMgmt - Galera/NGINX Node Management${idsCL[Default]} ${idsCL[DarkGray]}(ver-${VERS})${idsCL[Default]}"
|
||||
echo -e "${idsCL[LightGreen]} NodeMgmt - Node Monitoring & Management${idsCL[Default]} ${idsCL[DarkGray]}(ver-${VERS})${idsCL[Default]}"
|
||||
DIVIDER . lightGreen
|
||||
if [ "$2" = true ]; then
|
||||
echo -e " Node hostname : ${idsST[Bold]}${idsCL[LightCyan]}${NODE_HOSTNAME}${idsCL[Default]}${idsST[Reset]}"
|
||||
@@ -81,18 +244,25 @@ DISP_HEADER(){
|
||||
fi
|
||||
done
|
||||
DIVIDER
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
if [ $(ls -1 ${FOLDER}/*.lastrun 2>/dev/null | wc -l) != 0 ];then
|
||||
echo -e "${idsST[Bold]}Lastrun Items:${idsST[Reset]}"
|
||||
for lastrun in ${FOLDER}/*.lastrun ; do
|
||||
IFS='/'; lastrun_item=(${lastrun}); unset IFS
|
||||
lastrun_item=$(echo ${lastrun_item[4]} | sed "s/.lastrun//g")
|
||||
lastrun_item=$(echo ${lastrun_item} | sed "s/-/ /g")
|
||||
lastrun_date=$(stat -c %y ${lastrun})
|
||||
IFS=' '; lastrun_date=(${lastrun_date}); unset IFS
|
||||
IFS='.'; lastrun_time=(${lastrun_date[1]}); unset IFS
|
||||
c=0; cw=18; spc=''
|
||||
spc1=${cw}-${#lastrun_item}
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
echo -e " ${lastrun_item~}${spc}: ${lastrun_date[0]} ${lastrun_time}"
|
||||
done
|
||||
|
||||
DIVIDER(){
|
||||
if [ -z ${2+x} ]; then clr='yellow'
|
||||
else clr=$2
|
||||
DIVIDER
|
||||
fi
|
||||
fi
|
||||
echo -e "${idsCL[${clr~}]}-----------------------------------------------------------------------${idsCL[Default]}"
|
||||
if [ "$1" = true ]; then
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
CERT-CHECK(){
|
||||
@@ -113,16 +283,15 @@ CERT-CHECK(){
|
||||
fi
|
||||
}
|
||||
|
||||
CHECK_HOST(){
|
||||
if [ ! -z ${1+x} ]; then
|
||||
ping -c 3 ${1} > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo false
|
||||
else
|
||||
echo true
|
||||
fi
|
||||
else
|
||||
echo false
|
||||
fi
|
||||
SENDNOTICE(){
|
||||
[ "${PUSHOVER_APP_TOKEN}" != "" ] && PUSH_TO_MOBILE "${2}
|
||||
|
||||
$(date)" "${1}" ${3} &
|
||||
|
||||
[ "${EMAIL_NOTICE}" != "" ] && echo -e "${2}\n\n$(date)" | mail -s "${1}" ${EMAIL_NOTICE}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
438
inc/certs.inc
Executable file
438
inc/certs.inc
Executable file
@@ -0,0 +1,438 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
NEWCERT(){
|
||||
echo
|
||||
if [ -z ${1+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Create certificate for what name (comma seperated for mutiple) : ${idsCL[Default]}"
|
||||
read NEW_CERT
|
||||
echo
|
||||
else
|
||||
NEW_CERT=${1}
|
||||
fi
|
||||
if [[ ${NEW_CERT} == *","* ]]; then
|
||||
IFS=','; NEW_CERTS=(${NEW_CERT}); unset IFS
|
||||
MAIN_CERT=${NEW_CERTS[0]}
|
||||
else
|
||||
MAIN_CERT=${NEW_CERT}
|
||||
fi
|
||||
if [ "${NEW_CERT}" != "" ]; then
|
||||
echo -e "${idsCL[LightGreen]}Requesting Certificate for '${idsCL[Yellow]}${NEW_CERT}${idsCL[LightGreen]}'...${idsCL[Default]}"
|
||||
echo ""
|
||||
|
||||
# echo -en "${idsCL[LightYellow]}Stopping other Webservers... ${idsCL[Default]}"
|
||||
# for nip in "${WEB_HOSTS[@]}"; do
|
||||
# if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *"${nip}"* ]]; then
|
||||
# # `ssh root@${nip} service nginx stop`
|
||||
# # SERVICE nginx stop ${nip}
|
||||
# fi
|
||||
# done
|
||||
# echo -e "${idsCL[Green]}Completed${idsCL[Default]}"
|
||||
# echo
|
||||
|
||||
$CERT_DAEMON certonly --webroot -w /opt/lb-data/letsencrypt-acme-challenge -d ${NEW_CERT}
|
||||
# $CERT_DAEMON certonly --dry-run --webroot -w /var/www/html -d ${NEW_CERT}
|
||||
|
||||
chown -R root:le /opt/lb-data/letsencrypt
|
||||
chmod -R 6775 /opt/lb-data/letsencrypt
|
||||
|
||||
if [ -d /opt/lb-data/letsencrypt/live/${MAIN_CERT} ]; then
|
||||
|
||||
touch /opt/lb-data/letsencrypt/live/${MAIN_CERT}/newcert
|
||||
if [ -f /opt/lb-data/nginx/sites-enabled/${MAIN_CERT}.conf ]; then
|
||||
rm -f ${FOLDER}/cert-request.lastrun
|
||||
daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
echo -e "${NEW_CERT}\n${daterun}" > ${FOLDER}/cert-request.lastrun
|
||||
yes | cp -rfH ${FOLDER}/cert-request.lastrun /opt/lb-data/letsencrypt/cert-request.lastrun
|
||||
DIVIDER true
|
||||
echo -e -n "${idsCL[LightCyan]}Reload NGINX on LB Nodes (Y/n): ${idsCL[Default]}"
|
||||
read -n 1 NGINXRELOAD
|
||||
if [[ ${NGINXRELOAD} =~ ^[Nn]$ ]]; then
|
||||
tmp=''
|
||||
else
|
||||
echo
|
||||
echo -en "${idsCL[LightYellow]}Waiting for Cert replication across the nodes... ${idsCL[Default]}"
|
||||
for nip in "${LB_HOSTS[@]}"; do
|
||||
checkhost=$(CHECK_HOST ${nip})
|
||||
if [ "${checkhost}" != "false" ]; then
|
||||
if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *"${nip}"* ]]; then
|
||||
checked=false
|
||||
until [ "${checked}" = "" ]; do
|
||||
checked=`ssh root@${nip} "[ ! -f /opt/lb-data/letsencrypt/live/${MAIN_CERT}/newcert ] && echo '.'"`
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -f /opt/lb-data/letsencrypt/live/${MAIN_CERT}/newcert
|
||||
echo -e "${idsCL[Green]}Completed${idsCL[Default]}"
|
||||
|
||||
echo
|
||||
SERVICE nginx reload
|
||||
fi
|
||||
fi
|
||||
echo
|
||||
echo -e "${idsCL[Green]}Certificate has been successfully created for '${idsCL[Yellow]}${NEW_CERT}${idsCL[Green]}'...${idsCL[Default]}"
|
||||
else
|
||||
echo
|
||||
echo -e "${idsCL[Red]}Certificate could not be created for '${idsCL[Yellow]}${NEW_CERT}${idsCL[Red]}'...${idsCL[Default]}"
|
||||
fi
|
||||
|
||||
# echo
|
||||
# echo -en "${idsCL[LightYellow]}Starting other Webservers... ${idsCL[Default]}"
|
||||
# for nip in "${WEB_HOSTS[@]}"; do
|
||||
# if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *"${nip}"* ]]; then
|
||||
# `ssh root@${nip} service nginx start`
|
||||
# # SERVICE nginx start ${nip}
|
||||
# fi
|
||||
# done
|
||||
# echo -e "${idsCL[Green]}Completed${idsCL[Default]}"
|
||||
|
||||
echo ""
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
ENTER2CONTINUE
|
||||
fi
|
||||
else
|
||||
echo "You havent entered a site address."
|
||||
sleep 1
|
||||
NEWCERT
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
DEL-SSL(){
|
||||
if [ -z ${1+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Delete what SSL site address: ${idsCL[Default]}"
|
||||
read DEL_SSL
|
||||
echo ""
|
||||
else
|
||||
DEL_SSL=${1}
|
||||
fi
|
||||
if [ ! -z ${DEL_SSL+x} ] && [ "${DEL_SSL}" != "" ]; then
|
||||
if [ -d /etc/letsencrypt/live/${DEL_SSL} ]; then
|
||||
echo -e "${idsCL[LightRed]}Deleting the SSL certificates for '${idsCL[Red]}${DEL_SSL}${idsCL[LightRed]}'...${idsCL[Default]}"
|
||||
echo ""
|
||||
|
||||
echo -en "${idsCL[LightRed]}Removing Files and Folders... ${idsCL[Default]}"
|
||||
rm -rf /etc/letsencrypt/archive/${DEL_SSL}
|
||||
rm -rf /etc/letsencrypt/live/${DEL_SSL}
|
||||
rm -f /etc/letsencrypt/renewal/${DEL_SSL}.conf
|
||||
echo -e "${idsCL[Green]}OK${idsCL[Default]}"
|
||||
echo ""
|
||||
|
||||
|
||||
else
|
||||
echo -e "${idsCL[LightRed]}The SSL files folder for '${idsCL[Red]}${DEL_SSL}${idsCL[LightRed]}' could not be found.${idsCL[Default]}"
|
||||
exit 1
|
||||
fi
|
||||
if [ "${timeout}" != "true" ]; then
|
||||
echo -e "${idsCL[Green]}Completed${idsCL[Default]}"
|
||||
fi
|
||||
echo
|
||||
# SERVICE nginx reload
|
||||
echo -e "${idsCL[LightRed]}The SSL certificate has been removed fromt be nodes.${idsCL[Default]}"
|
||||
fi
|
||||
}
|
||||
|
||||
CERTRENEW(){
|
||||
echo -en "${idsCL[LightCyan]}Stopping Webserver-Node2...${idsCL[Default]}"
|
||||
ssh root@webserver-node2.scity.us service nginx stop
|
||||
echo -e "${idsCL[LightGreen]} Completed${idsCL[Default]}"
|
||||
echo
|
||||
echo -e "${idsCL[LightGreen]}Renewing Certificates...${idsCL[Default]}"
|
||||
echo
|
||||
sleep 5
|
||||
$CERT_DAEMON renew --webroot -w /var/www/html 2>&1 | tee ${FOLDER}/cert-renewal.lastrun
|
||||
# $CERT_DAEMON renew --force-renewal --preferred-chain "ISRG Root X1" --webroot -w /var/www/html 2>&1 | tee ${FOLDER}/cert-renewal.lastrun
|
||||
# $CERT_DAEMON --dry-run --preferred-chain "ISRG Root X1" renew --webroot -w /var/www/html 2>&1 | tee ${FOLDER}/cert-renewal.lastrun
|
||||
CONCAT_SSL
|
||||
chown -R root:letsencrypt /etc/letsencrypt 2>&1 | tee -a ${FOLDER}/cert-renewal.lastrun
|
||||
chmod -R 6775 /etc/letsencrypt 2>&1 | tee -a ${FOLDER}/cert-renewal.lastrun
|
||||
yes | cp -rfH ${FOLDER}/cert-renewal.lastrun /etc/letsencrypt/cert-renewal.lastrun
|
||||
daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
echo -e "${daterun}" >> /etc/letsencrypt/cert-renewal.lastrun
|
||||
DIVIDER true
|
||||
echo -en "${idsCL[LightCyan]}Starting Webserver-Node2 Back up...${idsCL[Default]}"
|
||||
ssh root@webserver-node2.scity.us service nginx start
|
||||
echo -e "${idsCL[LightGreen]} Completed${idsCL[Default]}"
|
||||
echo
|
||||
SERVICE nginx reload 2>&1 | tee -a ${FOLDER}/cert-renewal.lastrun
|
||||
echo -e "${idsCL[LightGreen]}The certificates have been renewed.${idsCL[Default]}"
|
||||
echo ""
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
ENTER2CONTINUE
|
||||
fi
|
||||
}
|
||||
NIGHTLYRENEW(){
|
||||
rm -f ${FOLDER}/cert-renewal.lastrun
|
||||
ssh root@webserver-node2.scity.us service nginx stop
|
||||
sleep 5
|
||||
$CERT_DAEMON renew --webroot -w /var/www/html &>> ${FOLDER}/cert-renewal.lastrun
|
||||
CONCAT_SSL
|
||||
chown -R root:letsencrypt /etc/letsencrypt &>> ${FOLDER}/cert-renewal.lastrun
|
||||
chmod -R 6775 /etc/letsencrypt &>> ${FOLDER}/cert-renewal.lastrun
|
||||
yes | cp -rfH ${FOLDER}/cert-renewal.lastrun /etc/letsencrypt/cert-renewal.lastrun
|
||||
daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
echo -e "${daterun}" >> /etc/letsencrypt/cert-renewal.lastrun
|
||||
ssh root@webserver-node2.scity.us service nginx start
|
||||
SERVICE nginx reload web &>> ${FOLDER}/cert-renewal.lastrun
|
||||
}
|
||||
|
||||
CONCAT_SSL(){
|
||||
rm -f /tmp/ssllist
|
||||
for certdir in /etc/letsencrypt/live/*/ ; do echo $certdir; done > /tmp/ssllist
|
||||
for certdir in $(</tmp/ssllist); do
|
||||
rm -f ${certdir}fullcert.pem
|
||||
cat ${certdir}privkey.pem ${certdir}fullchain.pem > ${certdir}fullcert.pem
|
||||
done
|
||||
}
|
||||
|
||||
LISTCERTS(){
|
||||
declare -i cw; declare -i spc1; declare -i c
|
||||
declare -A CHECKCERT_DOMAINS
|
||||
IFS=$'\n'
|
||||
for LINE in `egrep -v '(^#|^$)' ${FOLDER}/ssl-cert-check/ssldomains`; do
|
||||
HOST=${LINE%% *}
|
||||
PORT=${LINE#* }
|
||||
IFS=" "
|
||||
CHECKCERT_DOMAINS[${HOST}]=${PORT}
|
||||
done
|
||||
unset IFS
|
||||
if [ ! -z ${LOCAL_SERVICES+x} ]; then
|
||||
NCMD="ssh root@${MYSQL_HOSTS[0]}"
|
||||
#${NCMD} rm -f /tmp/ssllist
|
||||
#${NCMD} 'for certdir in /etc/letsencrypt/live/*/ ; do echo $certdir; done' > /tmp/ssllist
|
||||
else
|
||||
NCMD=''
|
||||
rm -f /tmp/ssllist
|
||||
#for certdir in /etc/letsencrypt/live/*/ ; do echo $certdir; done > /tmp/ssllist
|
||||
fi
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
fi
|
||||
echo
|
||||
echo -e "${idsCL[LightGreen]}Current Certificates on Node...${idsCL[Default]}"
|
||||
DIVIDER false yellow 120
|
||||
echo -e "Subject Name Monitored Expires Alternate Subject Names"
|
||||
DIVIDER false yellow 120
|
||||
|
||||
cw=30;
|
||||
c=0; spc2=''; until [ $c = ${cw} ]; do spc2="${spc2} "; c=`expr $c + 1`; done
|
||||
|
||||
#ssldir=$(${NCMD} find /opt/nginx-proxy/ssl/* -type l)
|
||||
ssldir=$(${NCMD} find /opt/lb-data/letsencrypt/live/* -type d)
|
||||
for certdir in ${ssldir[@]}; do
|
||||
SUBJECT=$(${NCMD} openssl x509 -in ${certdir}/cert.pem -noout -subject|grep -oP '(?<=CN = )[^,]+'|sort -uV)
|
||||
SUBJECTNAMES=$(${NCMD} openssl x509 -in ${certdir}/cert.pem -noout -text|grep -oP '(?<=DNS:|IP Address:)[^,]+'|sort -uV)
|
||||
CERTEXPIRE=$(date -d "$(: | ${NCMD} openssl x509 -in ${certdir}/cert.pem -text | grep 'Not After' |awk '{print $4,$5,$7}')" '+%s');
|
||||
|
||||
SUBJECTNAMES=${SUBJECTNAMES//$'\n'/, }
|
||||
# SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/\n/, /g")
|
||||
SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/${SUBJECT}, //g")
|
||||
SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/, ${SUBJECT}//g")
|
||||
SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/${SUBJECT}//g")
|
||||
IFS=', '; SUBJECT_NAMES=(${SUBJECTNAMES}); unset IFS
|
||||
DAYS=14; DUEIN=$(($(date +%s) + (86400*$DAYS)));
|
||||
|
||||
c=0; spc=''
|
||||
spc1=${cw}-${#SUBJECT}
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
if [ $CERTEXPIRE -le $DUEIN ]; then
|
||||
date="${idsST[Bold]}${idsCL[Red]}$(date -d @${CERTEXPIRE} '+%m-%d-%Y')${idsST[Reset]}${idsCL[Default]}"
|
||||
SENDNOTICE "SSL Expiring" "${SUBJECT} expires on ${date}" 1
|
||||
else
|
||||
date="${idsCL[Green]}$(date -d @${CERTEXPIRE} '+%m-%d-%Y')${idsCL[Default]}"
|
||||
fi
|
||||
|
||||
if [ "${CHECKCERT_DOMAINS[${SUBJECT}]}" = "" ]; then
|
||||
monitored='No '
|
||||
else
|
||||
monitored="${idsCL[Green]}Yes${idsCL[Default]}"
|
||||
fi
|
||||
if [ ${#SUBJECT_NAMES[@]} -lt 4 ]; then
|
||||
echo -e "${idsCL[Cyan]}${SUBJECT}${idsCL[Default]}${spc}${monitored} ${date} ${SUBJECTNAMES}"
|
||||
elif [ ${#SUBJECT_NAMES[@]} -lt 7 ]; then
|
||||
echo -e "${idsCL[Cyan]}${SUBJECT}${idsCL[Default]}${spc}${monitored} ${date} ${SUBJECT_NAMES[0]}, ${SUBJECT_NAMES[1]}, ${SUBJECT_NAMES[2]}"
|
||||
echo -e "${spc2} ${SUBJECT_NAMES[3]}, ${SUBJECT_NAMES[4]}, ${SUBJECT_NAMES[5]}"
|
||||
|
||||
fi
|
||||
DIVIDER false darkGray 120
|
||||
done
|
||||
echo
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
ENTER2CONTINUE
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
LISTCERTS_NPM(){
|
||||
declare -i cw; declare -i spc1; declare -i c
|
||||
declare -A CHECKCERT_DOMAINS
|
||||
IFS=$'\n'
|
||||
for LINE in `egrep -v '(^#|^$)' ${FOLDER}/ssl-cert-check/ssldomains`; do
|
||||
HOST=${LINE%% *}
|
||||
PORT=${LINE#* }
|
||||
IFS=" "
|
||||
CHECKCERT_DOMAINS[${HOST}]=${PORT}
|
||||
done
|
||||
unset IFS
|
||||
if [ ! -z ${LOCAL_SERVICES+x} ]; then
|
||||
NCMD="ssh root@${MYSQL_HOSTS[0]}"
|
||||
${NCMD} rm -f /tmp/ssllist
|
||||
${NCMD} 'for certdir in /opt/nginx-proxy/letsencrypt/live/*/ ; do echo $certdir; done' > /tmp/ssllist
|
||||
else
|
||||
NCMD=''
|
||||
rm -f /tmp/ssllist
|
||||
for certdir in /opt/nginx-proxy/letsencrypt/live/*/ ; do echo $certdir; done > /tmp/ssllist
|
||||
fi
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
fi
|
||||
echo
|
||||
echo -e "${idsCL[LightGreen]}Current Certificates on Node...${idsCL[Default]}"
|
||||
DIVIDER false yellow 120
|
||||
echo -e "Subject Name Monitored Expires Alternate Subject Names"
|
||||
DIVIDER false yellow 120
|
||||
|
||||
cw=30;
|
||||
c=0; spc2=''; until [ $c = ${cw} ]; do spc2="${spc2} "; c=`expr $c + 1`; done
|
||||
for certdir in $(</tmp/ssllist); do
|
||||
SUBJECT=$(${NCMD} openssl x509 -in ${certdir}cert.pem -noout -subject|grep -oP '(?<=CN = )[^,]+'|sort -uV)
|
||||
SUBJECTNAMES=$(${NCMD} openssl x509 -in ${certdir}cert.pem -noout -text|grep -oP '(?<=DNS:|IP Address:)[^,]+'|sort -uV)
|
||||
CERTEXPIRE=$(date -d "$(: | ${NCMD} openssl x509 -in ${certdir}cert.pem -text | grep 'Not After' |awk '{print $4,$5,$7}')" '+%s');
|
||||
|
||||
SUBJECTNAMES=${SUBJECTNAMES//$'\n'/, }
|
||||
# SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/\n/, /g")
|
||||
SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/${SUBJECT}, //g")
|
||||
SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/, ${SUBJECT}//g")
|
||||
SUBJECTNAMES=$(echo $SUBJECTNAMES | sed "s/${SUBJECT}//g")
|
||||
IFS=', '; SUBJECT_NAMES=(${SUBJECTNAMES}); unset IFS
|
||||
DAYS=14; DUEIN=$(($(date +%s) + (86400*$DAYS)));
|
||||
|
||||
c=0; spc=''
|
||||
spc1=${cw}-${#SUBJECT}
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
if [ $DUEIN -gt $CERTEXPIRE ]; then
|
||||
date="${idsST[Bold]}${idsCL[Red]}$(date -d @${CERTEXPIRE} '+%m-%d-%Y')${idsST[Reset]}${idsCL[Default]}"
|
||||
else
|
||||
date="${idsCL[Green]}$(date -d @${CERTEXPIRE} '+%m-%d-%Y')${idsCL[Default]}"
|
||||
fi
|
||||
|
||||
if [ "${CHECKCERT_DOMAINS[${SUBJECT}]}" = "" ]; then
|
||||
monitored='No '
|
||||
else
|
||||
monitored="${idsCL[Green]}Yes${idsCL[Default]}"
|
||||
fi
|
||||
if [ ${#SUBJECT_NAMES[@]} -lt 4 ]; then
|
||||
echo -e "${idsCL[Cyan]}${SUBJECT}${idsCL[Default]}${spc}${monitored} ${date} ${SUBJECTNAMES}"
|
||||
elif [ ${#SUBJECT_NAMES[@]} -lt 7 ]; then
|
||||
echo -e "${idsCL[Cyan]}${SUBJECT}${idsCL[Default]}${spc}${monitored} ${date} ${SUBJECT_NAMES[0]}, ${SUBJECT_NAMES[1]}, ${SUBJECT_NAMES[2]}"
|
||||
echo -e "${spc2} ${SUBJECT_NAMES[3]}, ${SUBJECT_NAMES[4]}, ${SUBJECT_NAMES[5]}"
|
||||
|
||||
fi
|
||||
DIVIDER false darkGray 120
|
||||
done
|
||||
echo
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
ENTER2CONTINUE
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
COPYCERTS_NPM(){
|
||||
ssldir='/opt/nginx-proxy/ssl'
|
||||
|
||||
if [ "${1}" = "reset" ]; then
|
||||
echo "Resetting ... Deleting all SSL symlink folders"
|
||||
ssldirs=$(find ${ssldir} -type l)
|
||||
for certdir in ${ssldirs[@]}; do
|
||||
rm ${certdir}
|
||||
done
|
||||
else
|
||||
baddirs=$(find $ssldir -type l ! -exec test -e {} \; -print)
|
||||
for od in ${baddirs[@]}; do
|
||||
echo "Removing bad symlink folder ... ${od}"
|
||||
rm -f ${od}
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
fi
|
||||
|
||||
ssls=$(find /opt/nginx-proxy/letsencrypt/live/* -type d)
|
||||
for certdir in ${ssls[@]}; do
|
||||
SUBJECT=$(openssl x509 -in ${certdir}/cert.pem -noout -subject|grep -oP '(?<=CN = )[^,]+'|sort -uV)
|
||||
if [ ! -L ${ssldir}/${SUBJECT} ]; then
|
||||
echo "${SUBJECT} ... creating"
|
||||
/bin/ln -s ${certdir} ${ssldir}/${SUBJECT}
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
echo
|
||||
DIVIDER true
|
||||
ENTER2CONTINUE
|
||||
echo
|
||||
fi
|
||||
}
|
||||
|
||||
CHECK_NPMCERTS(){
|
||||
ssls=$(find /opt/nginx-proxy/letsencrypt/live/* -type d)
|
||||
|
||||
for certdir in ${ssls[@]}; do
|
||||
SUBJECT=$(openssl x509 -in ${certdir}/cert.pem -noout -subject|grep -oP '(?<=CN = )[^,]+'|sort -uV)
|
||||
ENDDATE=$(openssl x509 -in ${certdir}/cert.pem -noout -enddate | awk -F '=' '{print $2}')
|
||||
DAYS=$(dateutils.ddiff today "$(date --date="${ENDDATE}" '+%F')" -f '%d')
|
||||
|
||||
c=0; cw=35; spc=''
|
||||
spc1=`expr ${cw} - ${#SUBJECT}`
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
[ ${DAYS} -lt 0 ] && spc=${spc::-1}
|
||||
|
||||
if [ ${DAYS} -lt 24 ]; then
|
||||
echo "${SUBJECT}:${spc}${DAYS} days remaining"
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
echo
|
||||
|
||||
}
|
||||
|
||||
CHECK-CERTS(){
|
||||
if [ "${1}" == "check" ]; then
|
||||
rm -f ${FOLDER}/ssl-cert-check.lastrun
|
||||
${FOLDER}/ssl-cert-check/ssl-cert-check -f ${FOLDER}/ssl-cert-check/ssldomains > ${FOLDER}/ssl-cert-check.lastrun
|
||||
SSLLOG="$(cat ${FOLDER}/ssl-cert-check.lastrun)"
|
||||
SENDNOTICE "SSL Certs Check" "SSL Certs Check\n$SSLLOG"
|
||||
else
|
||||
# ${FOLDER}/ssl-cert-check/ssl-cert-check -f ${FOLDER}/ssl-cert-check/ssldomains
|
||||
IFS=$'\n'
|
||||
for LINE in `egrep -v '(^#|^$)' ${FOLDER}/ssl-cert-check/ssldomains`; do
|
||||
HOST=${LINE%% *}
|
||||
PORT=${LINE#* }
|
||||
CERTINFO=$(${FOLDER}/ssl-cert-check/ssl-cert-check -p ${PORT} -s ${HOST} -N)
|
||||
CERTVALID=$(echo ${CERTINFO} | awk -F' valid' '{print $1}')
|
||||
CERTVALID=${CERTVALID: -1}
|
||||
CERTDAYS=${CERTINFO#*days=}
|
||||
if [ "${CERTVALID}" == "0" ] || [ "${CERTVALID}" == "E" ]; then
|
||||
printf "%-30s: %s\n" "${HOST}" "SSL is not valid"
|
||||
SENDNOTICE "SSL Not Valid" "The (${HOST}) SSL is not valid" 1
|
||||
|
||||
elif [ ${CERTDAYS} -lt 1 ]; then
|
||||
printf "%-30s: %s\n" "${HOST}" "SSL Expired! (${CERTDAYS} days)"
|
||||
SENDNOTICE "SSL Expired" "The (${HOST}) SSL is expired!! (${CERTDAYS} days)" 2
|
||||
|
||||
elif [ ${CERTDAYS} -lt 15 ]; then
|
||||
printf "%-30s: %s\n" "${HOST}" "SSL is expiring in $CERTDAYS days!"
|
||||
SENDNOTICE "SSL Expiring" "The (${HOST}) SSL is expiring in ${CERTDAYS} days" 1
|
||||
|
||||
else
|
||||
printf "%-30s: %s\n" "${HOST}" "SSL is valid for ${CERTDAYS} days"
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
}
|
||||
439
inc/sites.inc
Executable file
439
inc/sites.inc
Executable file
@@ -0,0 +1,439 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
DELSITE(){
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-site) DEL_SITE=${2};;
|
||||
-ssl) DEL_SSL=${2};;
|
||||
-list) DELSITES; exit 0;;
|
||||
-*)
|
||||
echo "Invalid option: '${1}' requires an argument" 1>&2
|
||||
echo ""
|
||||
echo -e "Usage: ${idsCL[Yellow]}nodemgmt delsite${idsCL[Default]} {"
|
||||
width=33
|
||||
printf "%-${width}s- %s\n" " -site {FQDN address}" "(*required)"
|
||||
printf "%-${width}s- %s\n" " -ssl {yes or [no]}" "Delete SSL certs as well"
|
||||
printf "%-${width}s- %s\n" " -list" "List sites (same as running nodemgmt delsites)"
|
||||
echo "}"
|
||||
exit 1;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if [ -z ${DEL_SITE+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Delete what site address: ${idsCL[Default]}"
|
||||
read DEL_SITE
|
||||
echo ""
|
||||
fi
|
||||
if [[ $DEL_SSL =~ ^[Nn]$ ]]; then
|
||||
DEL_SSL=no
|
||||
elif [[ $DEL_SSL =~ ^[Yy]$ ]]; then
|
||||
DEL_SSL=yes
|
||||
elif [ -z ${DEL_SSL+x} ]; then
|
||||
echo -e -n "${idsCL[LightRed]}Do you also want to delete the certs for '${DEL_SITE}' as well? [y/N]${idsCL[Default]} "
|
||||
read DEL_SSL
|
||||
fi
|
||||
if [ ! -z ${DEL_SITE+x} ] && [ "${DEL_SITE}" != "" ]; then
|
||||
echo -e "${idsCL[LightRed]}Deleting site '${idsCL[Red]}${DEL_SITE^^}${idsCL[LightRed]}'...${idsCL[Default]}"
|
||||
echo ""
|
||||
|
||||
echo -e "${idsCL[LightRed]}[[Removing Files and Folders]]${idsCL[Default]}"
|
||||
echo -e "${idsCL[LightRed]}-------------------------------------------${idsCL[Default]}"
|
||||
echo
|
||||
echo -en "${idsCL[LightCyan]}Removing files from all Nodes ... ${idsCL[Default]}"
|
||||
ssh root@10.10.1.120 rm -f /etc/nginx/sites-enabled/${DEL_SITE}* >/dev/null 2>&1
|
||||
ssh root@10.10.10.80 rm -f /etc/nginx/sites-enabled/${DEL_SITE}* >/dev/null 2>&1
|
||||
if [ "${DEL_SSL}" == "yes" ]; then
|
||||
ssh root@10.10.10.80 rm -rf /etc/letsencrypt/archive/${DEL_SITE} >/dev/null 2>&1
|
||||
ssh root@10.10.10.80 rm -rf /etc/letsencrypt/live/${DEL_SITE} >/dev/null 2>&1
|
||||
ssh root@10.10.10.80 rm -f /etc/letsencrypt/renewal/${DEL_SITE}.conf >/dev/null 2>&1
|
||||
fi
|
||||
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
||||
echo
|
||||
echo -en "${idsCL[LightCyan]}Reloading NGINX ... ${idsCL[Default]}"
|
||||
ssh root@10.10.10.80 nodemgmt service nginx reload >/dev/null 2>&1
|
||||
ssh root@10.10.1.120 nodemgmt service nginx reload >/dev/null 2>&1
|
||||
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
||||
|
||||
# nid=1
|
||||
# for nip in "${WEB_HOSTS[@]}"; do
|
||||
# if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) == *"${nip}"* ]]; then
|
||||
# nip='localhost '
|
||||
# NCMD=''
|
||||
# else
|
||||
# NCMD="ssh root@${nip}"
|
||||
# fi
|
||||
# echo -en "Removing from Webserver-Node${nid} ($nip)... ${idsCL[Default]}"
|
||||
# if [ "${NCMD}" != "" ]; then
|
||||
# checkhost=$(CHECK_HOST ${nip})
|
||||
# fi
|
||||
# if [ "${checkhost}" != "false" ]; then
|
||||
# #if [ -f /etc/nginx/sites-available/${DEL_SITE} ]; then
|
||||
# ${NCMD} rm -f /etc/nginx/sites-available/${DEL_SITE}*
|
||||
# ${NCMD} rm -f /etc/nginx/sites-enabled/${DEL_SITE}*
|
||||
# #fi
|
||||
# #if [ -d /var/www/${DEL_SITE} ]; then
|
||||
# ${NCMD} rm -rf /var/www/${DEL_SITE}
|
||||
# #fi
|
||||
# if [ "${DEL_SSL}" = "yes" ]; then
|
||||
# ${NCMD} rm -rf /etc/letsencrypt/archive/${DEL_SITE}
|
||||
# ${NCMD} rm -rf /etc/letsencrypt/live/${DEL_SITE}
|
||||
# ${NCMD} rm -f /etc/letsencrypt/renewal/${DEL_SITE}.conf
|
||||
# fi
|
||||
# echo -e "${idsCL[Green]}OK${idsCL[Default]}"
|
||||
# else
|
||||
# echo -e "${idsCL[Red]}Node is down${idsCL[Default]}"
|
||||
# fi
|
||||
# nid=`expr $nid + 1`
|
||||
# done
|
||||
# echo ""
|
||||
# SERVICE nginx reload ns
|
||||
echo -e "${idsCL[LightRed]}Site has been deleted.${idsCL[Default]}"
|
||||
else
|
||||
echo "Missing arguments"
|
||||
echo ""
|
||||
echo -e "Usage: ${idsCL[Yellow]}nodemgmt delsite${idsCL[Default]} {"
|
||||
width=33
|
||||
printf "%-${width}s- %s\n" " -site {FQDN address}" "Site to delete"
|
||||
printf "%-${width}s- %s\n" " -ssl {yes or [no]}" "Delete SSL certs as well"
|
||||
printf "%-${width}s- %s\n" " -list" "List sites (same as running nodemgmt delsites)"
|
||||
echo "}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
DELSITES(){
|
||||
echo
|
||||
echo -e "${idsCL[Red]}Select a site to delete...${idsCL[Default]}"
|
||||
DIVIDER true
|
||||
sid=1
|
||||
filels="( $(ssh root@${WEB_HOSTS[0]} ls '/etc/nginx/sites-available/*') )"
|
||||
# IFS='\n'
|
||||
for siteconf in $filels; do
|
||||
# for siteconf in /etc/nginx/sites-available/* ; do
|
||||
# [ -e "$siteconf" ] || continue
|
||||
if [ ${siteconf:0:1} == '/' ]; then
|
||||
IFS='/'; site_conf=(${siteconf}); unset IFS
|
||||
SITES[${sid}]=${site_conf[4]}
|
||||
sid=`expr $sid + 1`
|
||||
fi
|
||||
done
|
||||
for s in "${!SITES[@]}"; do
|
||||
echo " [${s}] ${SITES[${s}]}"
|
||||
done
|
||||
echo ""
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
echo " [B] Back"
|
||||
fi
|
||||
echo " [Q] Quit"
|
||||
echo ""
|
||||
echo -e -n "${idsCL[LightYellow]}Please select a site from above from above:${idsCL[Default]} "
|
||||
read selsite
|
||||
echo ""
|
||||
if [ -z ${SITES[$selsite]} ] && [ "${selsite}" != "Q" ] && [ "${selsite}" != "q" ] && [ "${selsite}" != "B" ] && [ "${selsite}" != "b" ]; then
|
||||
echo "Thats an invaild option,"
|
||||
echo "please select a valid option only."
|
||||
sleep 1
|
||||
DELSITES
|
||||
exit 0
|
||||
elif [ "${selsite}" = "Q" ] || [ "${selsite}" = "q" ]; then
|
||||
exit 0
|
||||
elif [ "${selsite}" = "B" ] || [ "${selsite}" = "b" ]; then
|
||||
GUI
|
||||
else
|
||||
while :
|
||||
do
|
||||
echo -e -n "${idsCL[LightRed]}Are you sure you want to delete '${idsCL[Red]}${SITES[${selsite}]^^}${idsCL[LightRed]}'? [y/N]${idsCL[Default]} "
|
||||
read response
|
||||
echo ""
|
||||
if [[ $response =~ ^[Yy]$ ]]; then
|
||||
echo -e -n "${idsCL[LightRed]}Do you also want to delete the certs for '${idsCL[Red]}${SITES[${selsite}]^^}${idsCL[LightRed]}', if they exist? [y/N]${idsCL[Default]} "
|
||||
read sslresponse
|
||||
DELSITE -site ${SITES[${selsite}]} -ssl ${sslresponse}
|
||||
echo ""
|
||||
DIVIDER
|
||||
ENTER2CONTINUE
|
||||
break
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
DELSITES
|
||||
exit 0
|
||||
fi
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
ENTER2CONTINUE
|
||||
fi
|
||||
}
|
||||
|
||||
NEWSITE(){
|
||||
echo
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-site) NEW_SITE=${2};;
|
||||
-type) SITE_TYPE=${2};;
|
||||
-ssl) CREATE_SSL=${2};;
|
||||
-proxy_scheme) PROXYSCHEME=${2};;
|
||||
-proxy_host) PROXYHOST=${2};;
|
||||
-proxy_port) PROXYPORT=${2};;
|
||||
-websocket) WEBSOCKET=${2};;
|
||||
-hsts) HSTS=${2};;
|
||||
-exploits) EXPLOITS=${2};;
|
||||
-secure) SECURE=${2};;
|
||||
-h | -help | --help)
|
||||
echo ""
|
||||
echo -e "Usage: ${idsCL[Yellow]}nodemgmt newcert${idsCL[Default]} {"
|
||||
width=33
|
||||
printf "%-${width}s- %s\n" " -site {FQDN address(,es)}" "(new site and aliases, comma separated)"
|
||||
printf "%-${width}s- %s\n" " -ssl {yes or no}" "(defaults to yes)"
|
||||
printf "%-${width}s- %s\n" " -type {'local' or 'proxy'}" "(defaults to local)"
|
||||
printf "%-${width}s- %s\n" " -proxy_port {host port}" "(proxy backend host)"
|
||||
printf "%-${width}s- %s\n" " -proxy_host {IP or FQDN}" "(proxy backend port)"
|
||||
printf "%-${width}s- %s\n" " -proxy_scheme {http or https}" "(proxy backend scheme)"
|
||||
printf "%-${width}s- %s\n" " -websocket {yes or no}" "(websocket support)"
|
||||
printf "%-${width}s- %s\n" " -hsts {yes or no}" "(hsts support)"
|
||||
printf "%-${width}s- %s\n" " -exploits {yes or no}" "(block exploits)"
|
||||
printf "%-${width}s- %s\n" " -secure {yes or no}" "(secure access [nginx/.htpasswd])"
|
||||
echo "}"
|
||||
exit 1;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
#if [ -z ${SITE_TYPE+x} ]; then SITE_TYPE=local; fi
|
||||
#if [ -z ${CREATE_SSL+x} ]; then CREATE_SSL=true; fi
|
||||
if [ -z ${NEW_SITE+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}New site domain name (comma seperated for multiple) : ${idsCL[Default]}"
|
||||
read NEW_SITE
|
||||
showdivide=yes
|
||||
fi
|
||||
|
||||
if [ -z ${CREATE_SSL+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Create SSL for site? [Y/n] ${idsCL[Default]}"
|
||||
read CREATE_SSL
|
||||
showdivide=yes
|
||||
if [[ $CREATE_SSL =~ ^[Yy]$ ]] || [ "${CREATE_SSL}" = "" ]; then
|
||||
CREATE_SSL=yes
|
||||
# echo -e -n "${idsCL[LightCyan]}Add additonal domain names to the SSL cert (comma seperated)? : ${idsCL[Default]}"
|
||||
# read ssladd
|
||||
else
|
||||
CREATE_SSL=no
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z ${SITE_TYPE+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Site type (local/{proxy}): ${idsCL[Default]}"
|
||||
read SITE_TYPE
|
||||
showdivide=yes
|
||||
if [ "${SITE_TYPE}" = "" ]; then
|
||||
SITE_TYPE=proxy
|
||||
fi
|
||||
fi
|
||||
if [ "${SITE_TYPE}" = "proxy" ]; then
|
||||
if [ -z ${PROXYHOST+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}What is the proxy backend address (IP or FQDN): ${idsCL[Default]}"
|
||||
read PROXYHOST
|
||||
showdivide=yes
|
||||
fi
|
||||
if [ -z ${PROXYPORT+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}What is the proxy backend port (tcp port): ${idsCL[Default]}"
|
||||
read PROXYPORT
|
||||
showdivide=yes
|
||||
fi
|
||||
if [ -z ${PROXYSCHEME+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}What is the proxy backend scheme (http/https): ${idsCL[Default]}"
|
||||
read PROXYSCHEME
|
||||
showdivide=yes
|
||||
fi
|
||||
if [ -z ${WEBSOCKET+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Enable Websocket Support (y/N): ${idsCL[Default]}"
|
||||
read WEBSOCKET
|
||||
showdivide=yes
|
||||
if [[ ${WEBSOCKET} =~ ^[Nn]$ ]] || [ "${WEBSOCKET}" = "" ]; then
|
||||
WEBSOCKET=no
|
||||
elif [[ ${WEBSOCKET} =~ ^[Yy]$ ]]; then
|
||||
WEBSOCKET=yes
|
||||
else
|
||||
WEBSOCKET=no
|
||||
fi
|
||||
fi
|
||||
if [ -z ${HSTS+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Enable HSTS Support (Y/n): ${idsCL[Default]}"
|
||||
read HSTS
|
||||
showdivide=yes
|
||||
[[ ${HSTS} =~ ^[Yy]$ ]] || [ "${HSTS}" = "" ] &&HSTS=yes || HSTS=no
|
||||
fi
|
||||
if [ -z ${EXPLOITS+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Block exploits (y/N): ${idsCL[Default]}"
|
||||
read EXPLOITS
|
||||
showdivide=yes
|
||||
if [[ ${EXPLOITS} =~ ^[Nn]$ ]] || [ "${EXPLOITS}" = "" ]; then
|
||||
EXPLOITS=no
|
||||
elif [[ ${EXPLOITS} =~ ^[Yy]$ ]]; then
|
||||
EXPLOITS=yes
|
||||
else
|
||||
EXPLOITS=no
|
||||
fi
|
||||
fi
|
||||
if [ -z ${SECURE+x} ]; then
|
||||
echo -e -n "${idsCL[LightCyan]}Secure site with passwords from [ nginx/.htpasswd ](y/N): ${idsCL[Default]}"
|
||||
read SECURE
|
||||
showdivide=yes
|
||||
if [[ ${SECURE} =~ ^[Nn]$ ]] || [ "${SECURE}" = "" ]; then
|
||||
SECURE=no
|
||||
elif [[ ${SECURE} =~ ^[Yy]$ ]]; then
|
||||
SECURE=yes
|
||||
else
|
||||
SECURE=no
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
[ "${showdivide}" == "yes" ] && DIVIDER
|
||||
echo
|
||||
width=14
|
||||
printf "%-${width}s: %s\n" "New site" "${NEW_SITE}"
|
||||
printf "%-${width}s: %s\n" "Create SSL" "${CREATE_SSL}"
|
||||
printf "%-${width}s: %s\n" "Site type" "${SITE_TYPE}"
|
||||
if [ "${SITE_TYPE}" = "proxy" ]; then
|
||||
printf "%-${width}s: %s\n" "Proxy host" "${PROXYHOST}"
|
||||
printf "%-${width}s: %s\n" "Proxy port" "${PROXYPORT}"
|
||||
printf "%-${width}s: %s\n" "Proxy scheme" "${PROXYSCHEME}"
|
||||
printf "%-${width}s: %s\n" "Websocket Support" "${WEBSOCKET}"
|
||||
printf "%-${width}s: %s\n" "HSTS Support" "${HSTS}"
|
||||
printf "%-${width}s: %s\n" "Block Exploits" "${EXPLOITS}"
|
||||
printf "%-${width}s: %s\n" "Secure Access" "${SECURE}"
|
||||
fi
|
||||
echo -e -n "${idsCL[LightRed]}Is this information correct? [Y/n]${idsCL[Default]} "
|
||||
read -n 1 response
|
||||
echo
|
||||
if [[ $response =~ ^[Yy]$ ]] || [ "${response}" = "" ]; then
|
||||
if [[ ${NEW_SITE} == *","* ]]; then
|
||||
IFS=','; NEW_SITES=(${NEW_SITE}); unset IFS
|
||||
MAIN_SITE=${NEW_SITES[0]}
|
||||
NGINX_SERVERNAME=${NEW_SITE//[,]/ }
|
||||
else
|
||||
MAIN_SITE=${NEW_SITE}
|
||||
NGINX_SERVERNAME=${NEW_SITE}
|
||||
|
||||
fi
|
||||
if [ "${SITE_TYPE}" = "proxy" ]; then
|
||||
if [ ! -z ${PROXYSCHEME+x} ] && [ ! -z ${PROXYHOST+x} ] && [ ! -z ${PROXYPORT+x} ]; then GO=true; fi
|
||||
else GO=true
|
||||
fi
|
||||
if [ "${GO}" = "true" ]; then
|
||||
echo -e "${idsCL[LightGreen]}Setting up new site for '${idsCL[Yellow]}${MAIN_SITE}${idsCL[LightGreen]}' {${NGINX_SERVERNAME}}...${idsCL[Default]}"
|
||||
echo ""
|
||||
|
||||
[ "${WEBSOCKET}" == "yes" ] && WEBSOCKET="include conf.d\/include\/websocket-support.conf;" || WEBSOCKET=""
|
||||
[ "${HSTS}" == "yes" ] && HSTS="include conf.d\/include\/hsts-support.conf;" || HSTS=""
|
||||
[ "${EXPLOITS}" == "yes" ] && EXPLOITS="include conf.d\/include\/block-exploits.conf;" || EXPLOITS=""
|
||||
[ "${SECURE}" == "yes" ] && SECURE="include conf.d\/include\/secure-access.conf;" || SECURE=""
|
||||
|
||||
|
||||
######################################### LOCAL
|
||||
if [ "${SITE_TYPE}" = "local" ]; then
|
||||
echo -e "server {
|
||||
listen 80;" > /etc/nginx/sites-available/${MAIN_SITE}
|
||||
if [ "${CREATE_SSL}" = "yes" ]; then
|
||||
echo -e " listen 443 ssl http2;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
fi
|
||||
echo -e "
|
||||
server_name ${NGINX_SERVERNAME};
|
||||
|
||||
set \$base /var/www/${MAIN_SITE};
|
||||
root \$base/public_html;
|
||||
|
||||
access_log /var/log/nginx/${MAIN_SITE}-access.log;
|
||||
error_log /var/log/nginx/${MAIN_SITE}-error.log warn;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
|
||||
if [ "${CREATE_SSL}" = "yes" ]; then
|
||||
echo -e "
|
||||
ssl_certificate /etc/letsencrypt/live/${MAIN_SITE}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/${MAIN_SITE}/privkey.pem;
|
||||
include conf.d/include/ssl-ciphers.conf;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
fi
|
||||
echo -e "
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
try_files \$uri \$uri/ /index.php?\$query_string;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
if [ "${CREATE_SSL}" = "yes" ]; then
|
||||
echo -e " include conf.d/include/force-ssl.conf;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
fi
|
||||
echo -e " }
|
||||
|
||||
location ~ \.php\$ {
|
||||
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
|
||||
include conf.d/include/php_fastcgi.conf;
|
||||
}
|
||||
|
||||
include conf.d/include/general.conf;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
if [ "${CREATE_SSL}" = "yes" ]; then
|
||||
echo -e " include conf.d/include/letsencrypt-acme-challenge.conf;" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
fi
|
||||
echo -e "}" >> /etc/nginx/sites-available/${MAIN_SITE}
|
||||
|
||||
|
||||
sudo -u www-data mkdir -p /var/www/${MAIN_SITE}/{public_html,nginx_logs}
|
||||
# echo -en "${idsCL[LightYellow]}Waiting for folder replication across the webserver nodes... ${idsCL[Default]}"
|
||||
# for nip in "${WEB_HOSTS[@]}"; do
|
||||
# checkhost=$(CHECK_HOST ${nip})
|
||||
# if [ "${checkhost}" != "false" ]; then
|
||||
# if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *"${nip}"* ]]; then
|
||||
# checked=false
|
||||
# until [ "${checked}" = "" ]; do
|
||||
# checked=`ssh root@${nip} "[ ! -d /var/www/${MAIN_SITE} ] && echo does not exist"`
|
||||
# done
|
||||
# fi
|
||||
# fi
|
||||
# done
|
||||
# echo -e "${idsCL[Green]}Completed${idsCL[Default]}"
|
||||
#
|
||||
# echo -en "${idsCL[LightYellow]}Setting folder permissions... ${idsCL[Default]}"
|
||||
# SET-PERMISSIONS ${MAIN_SITE}
|
||||
# echo -e "${idsCL[Green]}Completed${idsCL[Default]}"
|
||||
|
||||
|
||||
|
||||
######################################### PROXY
|
||||
else
|
||||
|
||||
cp ${FOLDER}/templates/nginx.proxy.site /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<SERVER_NAME>>/${NGINX_SERVERNAME}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<MAIN_SITE>>/${MAIN_SITE}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<PROXY_IP>>/${PROXYHOST}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<PROXY_PORT>>/${PROXYPORT}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<PROXY_SCHEME>>/${PROXYSCHEME}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<WEBSOCKET>>/${WEBSOCKET}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<HSTS>>/${HSTS}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<EXPLOITS>>/${EXPLOITS}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
sed -i "s/<<SECURE>>/${SECURE}/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
fi
|
||||
|
||||
if [ "${CREATE_SSL}" = "yes" ]; then
|
||||
[ "${ssladd}" != "" ] && NEWCERT ${NEW_SITE},${ssladd} || NEWCERT ${NEW_SITE}
|
||||
if [ "${SITE_TYPE}" == "proxy" ]; then
|
||||
sed -i "s/#ssl_certificate/ssl_certificate/g" /etc/nginx/sites-enabled/${MAIN_SITE}.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f ${FOLDER}/new-site.lastrun
|
||||
daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
echo -e "${NEW_SITE}\n${daterun}" > ${FOLDER}/new-site.lastrun
|
||||
# yes | cp -rfH ${FOLDER}/new-site.lastrun /etc/nginx/new-site.lastrun
|
||||
# yes | cp -rfH ${FOLDER}/new-site.lastrun /var/www/new-site.lastrun
|
||||
# daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
# echo -e "${daterun}" >> /etc/nginx/new-site.lastrun
|
||||
DIVIDER true
|
||||
echo ""
|
||||
echo -e "${idsCL[LightGreen]}The new site for '${idsCL[LightGreen]}${NEW_SITE}${idsCL[Default]}' has been created.${idsCL[Default]}"
|
||||
echo ""
|
||||
else
|
||||
echo "Missing proxy arguments"
|
||||
Exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
${SCRIPT} newsite
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
684
inc/status.inc
Executable file
684
inc/status.inc
Executable file
@@ -0,0 +1,684 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
STATUS(){
|
||||
start=`date +%s`
|
||||
ST_ACTION=${1}
|
||||
if [ "${ST_ACTION}" = "report" ]; then
|
||||
unset idsCL idsBG idsST
|
||||
idsCL=('')
|
||||
idsBG=('')
|
||||
idsST=('')
|
||||
elif [ "${ST_ACTION}" = "sync" ]; then
|
||||
ST_ACTION=repl
|
||||
fi
|
||||
declare -i cw; declare -i spc1; declare -i c
|
||||
|
||||
########################
|
||||
if [ "${ST_ACTION}" == "report" ] || [ "${ST_ACTION}" == "repl" ] || [ "${ST_ACTION}" == "check" ] || [ "${ST_ACTION}" == "" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -en "${idsCL[LightCyan]}Setting up replication checks ... ${idsCL[Default]}"
|
||||
fi
|
||||
for NTYPE in "${NODE_TYPES[@]}"; do
|
||||
PH=${NTYPE}_HOSTS[0]
|
||||
if [ ! -f ${FOLDER}/${!PH}.down ]; then
|
||||
PH_CMD="ssh root@${!PH}"
|
||||
var=${NTYPE}_REPL_CHECK[@]
|
||||
if [ ! -z ${!var+x} ]; then
|
||||
for rcheck in "${!var}"; do
|
||||
# echo "CHECK: ${NTYPE} - ${!PH} - ${REPL_CHECKS[${rcheck}]}"
|
||||
${PH_CMD} rm -f ${FOLDER}/test.repl
|
||||
daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
${PH_CMD} "echo -e \"Status-Check (${NODE_HOSTNAME})\n${daterun}\" > ${REPL_CHECKS[${rcheck}]}/test.repl" &
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
# replstart=`date +%s`
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
########################
|
||||
if [ "${ST_ACTION}" = "" ] || [ "${ST_ACTION}" = "report" ] || [ "${ST_ACTION}" = "services" ] || [ "${ST_ACTION}" = "dockers" ] || [ "${ST_ACTION}" = "check" ]; then
|
||||
if [ ! -z ${LOCAL_SERVICES+x} ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
lip=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
|
||||
uptime=`uptime -p`
|
||||
echo -e " ${idsST[Bold]}${idsCL[LightCyan]}${NODE_HOSTNAME} (${lip})${idsST[Reset]}${idsCL[LightCyan]} - ${uptime} - localhost${idsCL[Default]}"
|
||||
DIVIDER false green
|
||||
fi
|
||||
for srvc in "${LOCAL_SERVICES[@]}"; do
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
if [ "${ST_ACTION}" != "report" ]; then
|
||||
c=0; cw=30; spc=''
|
||||
spc1=${cw}-${#NM_SERVICES[${srvc}]}
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
else
|
||||
spc=' '
|
||||
fi
|
||||
echo -en " ${NM_SERVICES[${srvc}]}${spc}: "
|
||||
fi
|
||||
|
||||
if [ "$(systemctl is-active ${srvc})" != "active" ]; then
|
||||
if [ ! -f ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Red]}Not Running${idsCL[Default]}"
|
||||
fi
|
||||
SENDNOTICE "${NODE_HOSTNAME}" "${NM_SERVICES[${srvc}]} is down" 1
|
||||
touch ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down
|
||||
echo "$(date) - LOCAL - ${NODE_HOSTNAME} - ${NM_SERVICES[${srvc}]} is down" >> ${LOGFILE}
|
||||
else
|
||||
errtime=`date +%s`-$(stat -c %Y ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down)
|
||||
if [ $errtime -gt ${RENOTIFY} ]; then
|
||||
if [ ! -f ${FOLDER}/${NODE_HOSTNAME}-${srvc}.errtime ]; then
|
||||
mv ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down ${FOLDER}/${NODE_HOSTNAME}-${srvc}.errtime
|
||||
fi
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${NODE_HOSTNAME}-${srvc}.errtime)
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Red]}Not running for $(SHOW_TIME ${toterrtime})${idsCL[Default]}"
|
||||
fi
|
||||
touch ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Green]}Running${idsCL[Default]}"
|
||||
fi
|
||||
if [ -f ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down ]; then
|
||||
if [ -f ${FOLDER}/${NODE_HOSTNAME}-${srvc}.errtime ]; then
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${NODE_HOSTNAME}-${srvc}.errtime)
|
||||
else
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${NODE_HOSTNAME}-${srvc}.down)
|
||||
fi
|
||||
SENDNOTICE "${NODE_HOSTNAME}" "${NM_SERVICES[${srvc}]} is back UP! It was down for $(SHOW_TIME ${toterrtime})"
|
||||
rm -f ${FOLDER}/${NODE_HOSTNAME}-${srvc}.*
|
||||
echo "$(date) - LOCAL - ${NODE_HOSTNAME} - ${NM_SERVICES[${srvc}]} is back up" >> ${LOGFILE}
|
||||
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${ST_ACTION}" != "check" ]; then echo; fi
|
||||
fi
|
||||
########################
|
||||
|
||||
for NTYPE in "${NODE_TYPES[@]}"; do
|
||||
nid=1
|
||||
|
||||
dockers=${NTYPE}_DOCKER[@]
|
||||
hosts=${NTYPE}_HOSTS[@]
|
||||
|
||||
var=${NTYPE}_HOSTS[@]
|
||||
|
||||
if [[ ! -v ${NTYPE}_DOCKER ]] && [ "${ST_ACTION}" == "dockers" ]; then
|
||||
GOFORCHECK=false;
|
||||
else
|
||||
GOFORCHECK=true;
|
||||
fi
|
||||
|
||||
if [ ${GOFORCHECK} = true ]; then
|
||||
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsST[Bold]}"; DIVIDER
|
||||
if [ "${ST_ACTION}" = "dockers" ]; then
|
||||
echo -e "${idsCL[Yellow]} ${NM_NODETYPES[$NTYPE]}-Node Docker Status${idsCL[Default]}"
|
||||
else
|
||||
echo -e "${idsCL[Yellow]} ${NM_NODETYPES[$NTYPE]}-Node Service Status${idsCL[Default]}"
|
||||
fi
|
||||
DIVIDER; echo -e "${idsST[Reset]}"
|
||||
fi
|
||||
for nip in "${!var}"; do
|
||||
[ "${ST_ACTION}" != "check" ] && echo -en " ${idsST[Bold]}${idsCL[LightCyan]}${NM_NODETYPES[$NTYPE]}-Node${nid} (${nip})${idsST[Reset]}"
|
||||
|
||||
if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) == *"${nip}"* ]]; then NCMD=''; LH='- localhost'
|
||||
else NCMD="ssh root@${nip}"; LH=''
|
||||
fi
|
||||
if [ "${NCMD}" != "" ]; then
|
||||
checkhost=$(CHECK_HOST ${nip})
|
||||
fi
|
||||
if [ "${checkhost}" != "false" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
#echo -en " ${idsST[Bold]}${idsCL[LightCyan]}${NM_NODETYPES[$NTYPE]}-Node${nid} (${nip})${idsST[Reset]}"
|
||||
if ([ "${ST_ACTION}" == "report" ] && [ "${2}" == "email" ]) || [ "${ST_ACTION}" != "report" ]; then
|
||||
uptime=`${NCMD} uptime -p`
|
||||
echo -e "${idsCL[LightCyan]} - ${uptime} ${idsCL[LightYello]}${LH}${idsCL[Default]}"
|
||||
else
|
||||
echo -e "${idsCL[Default]}"
|
||||
fi
|
||||
|
||||
DIVIDER false green
|
||||
fi
|
||||
if [ -f ${FOLDER}/${nip}.down ]; then
|
||||
if [ -f ${FOLDER}/${nip}.errtime ]; then
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}.errtime)
|
||||
else
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}.down)
|
||||
fi
|
||||
rm -f ${FOLDER}/${nip}.*
|
||||
SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}-UP" "${NM_NODETYPES[$NTYPE]}-Node${nid} is back UP! It was down for $(SHOW_TIME ${toterrtime})"
|
||||
fi
|
||||
|
||||
if [ "${ST_ACTION}" != "dockers" ]; then
|
||||
srvcs=${NTYPE}_SERVICES_CHECK[@];
|
||||
srvcstotest="$(join_by " " ${!srvcs})"
|
||||
srvctst=(`${NCMD} systemctl is-active ${srvcstotest}`)
|
||||
sr=0
|
||||
for srvc in "${!srvcs}"; do
|
||||
[ "${srvc}" == "gitea" ] && [ "${NTYPE}" == "WEB" ] && [[ $($NCMD /sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *${WEB_HOSTS[0]}* ]] && NOGOCHK=false || NOGOCHK=true
|
||||
if [ ${NOGOCHK} == true ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
if [ "${ST_ACTION}" != "report" ]; then
|
||||
c=0; cw=30; spc=''; spc1=${cw}-${#NM_SERVICES[${srvc}]}; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
else
|
||||
spc=' '
|
||||
fi
|
||||
echo -en " ${NM_SERVICES[${srvc}]}$spc: "
|
||||
fi
|
||||
if [ "${srvctst[$sr]}" != "active" ] && [ "${srvc}" == "mysql" ]; then
|
||||
[ "$(${NCMD} systemctl is-active mariadb)" == "active" ] && mysqlgo=true || mysqlgo=false
|
||||
elif [ "${srvctst[$sr]}" != "active" ] && [ "${srvc}" = "mariadb" ]; then
|
||||
[ "$(${NCMD} systemctl is-active mysql)" == "active" ] && mysqlgo=true || mysqlgo=false
|
||||
elif [ "${srvctst[$sr]}" == "active" ] && ([ "${srvc}" == "mysql" ] || [ "${srvc}" == "mariadb" ]); then
|
||||
mysqlgo=true
|
||||
fi
|
||||
# echo "mysqlgo=${mysqlgo}"
|
||||
if [ "${srvctst[$sr]}" != "active" ] && [ "${mysqlgo}" != "true" ]; then
|
||||
if [ ! -f ${FOLDER}/${nip}-${srvc}.down ]; then
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[Red]}Not Running${idsCL[Default]}"
|
||||
SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_SERVICES[${srvc}]} is down" 1
|
||||
touch ${FOLDER}/${nip}-${srvc}.down
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - ${NM_SERVICES[${srvc}]} is down" >> ${LOGFILE}
|
||||
else
|
||||
errtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.down)
|
||||
if [ $errtime -gt ${RENOTIFY} ]; then
|
||||
[ ! -f ${FOLDER}/${nip}-${srvc}.errtime ] && mv ${FOLDER}/${nip}-${srvc}.down ${FOLDER}/${nip}-${srvc}.errtime
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.errtime)
|
||||
touch ${FOLDER}/${nip}-${srvc}.down
|
||||
# ([ "${srvc}" == "mysql" ] || [ "${srvc}" == "mariadb" ]) && ${NCMD} systemctl restart ${srvc} &
|
||||
fi
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[Red]}Not running for $(SHOW_TIME ${toterrtime})${idsCL[Default]}"
|
||||
fi
|
||||
else
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[Green]}Running${idsCL[Default]}"
|
||||
if [ -f ${FOLDER}/${nip}-${srvc}.down ]; then
|
||||
[ -f ${FOLDER}/${nip}-${srvc}.errtime ] && toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.errtime) || toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.down)
|
||||
SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_SERVICES[${srvc}]} is back UP! It was down for $(SHOW_TIME ${toterrtime})"
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - ${NM_SERVICES[${srvc}]} is back up, it was down for $(SHOW_TIME ${toterrtime})" >> ${LOGFILE}
|
||||
|
||||
rm -f ${FOLDER}/${nip}-${srvc}.*
|
||||
|
||||
fi
|
||||
# if [ "${srvc}" == "pdnsadmin.socket" ] || [ "${srvc}" == "pdnsadmin" ] || [ "${srvc}" == "gitea" ]; then
|
||||
if [ "${srvc}" == "gitea" ]; then
|
||||
rm -f ${FOLDER}/*-${srvc}.*
|
||||
fi
|
||||
fi
|
||||
[ "${mysqlgo}" = "true" ] && unset mysqlgo
|
||||
fi
|
||||
sr=`expr $sr + 1`
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# for srvc in "${!var2}"; do
|
||||
# NOGOCHK=true;
|
||||
# [ "${srvc}" == "gitea" ] && [ "${NTYPE}" == "WEB" ] && [[ $($NCMD /sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *${WEB_HOSTS[0]}* ]] && NOGOCHK=false;
|
||||
# if [ ${NOGOCHK} = true ]; then
|
||||
# if [ "${ST_ACTION}" != "check" ]; then
|
||||
# if [ "${ST_ACTION}" != "report" ]; then
|
||||
# c=0; cw=30; spc=''
|
||||
# spc1=${cw}-${#NM_SERVICES[${srvc}]}
|
||||
# until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
# else
|
||||
# spc=' '
|
||||
# fi
|
||||
# echo -en " ${NM_SERVICES[${srvc}]}$spc: "
|
||||
# fi
|
||||
# srvctst=$(${NCMD} systemctl is-active ${srvc})
|
||||
# if [ "${srvctst}" != "active" ] && [ "${srvc}" = "mysql" ]; then
|
||||
# mysqlgo=false;
|
||||
# [ "$(${NCMD} systemctl is-active mariadb)" = "active" ] && mysqlgo=true;
|
||||
# elif [ "${srvctst}" != "active" ] && [ "${srvc}" = "mariadb" ]; then
|
||||
# mysqlgo=false;
|
||||
# [ "$(${NCMD} systemctl is-active mysql)" = "active" ] && mysqlgo=true;
|
||||
# elif [ "${srvctst}" = "active" ] && ([ "${srvc}" = "mysql" ] || [ "${srvc}" = "mariadb" ]); then
|
||||
# mysqlgo=true
|
||||
# fi
|
||||
# # echo "mysqlgo=${mysqlgo}"
|
||||
# if [ "${srvctst}" != "active" ] && [ "${mysqlgo}" != "true" ]; then
|
||||
# if [ ! -f ${FOLDER}/${nip}-${srvc}.down ]; then
|
||||
# if [ "${ST_ACTION}" != "check" ]; then
|
||||
# echo -e "${idsCL[Red]}Not Running${idsCL[Default]}"
|
||||
# fi
|
||||
# SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_SERVICES[${srvc}]} is down" 1
|
||||
# touch ${FOLDER}/${nip}-${srvc}.down
|
||||
# echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - ${NM_SERVICES[${srvc}]} is down" >> ${LOGFILE}
|
||||
#
|
||||
# else
|
||||
# errtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.down)
|
||||
# if [ $errtime -gt ${RENOTIFY} ]; then
|
||||
# if [ ! -f ${FOLDER}/${nip}-${srvc}.errtime ]; then
|
||||
# mv ${FOLDER}/${nip}-${srvc}.down ${FOLDER}/${nip}-${srvc}.errtime
|
||||
# fi
|
||||
# toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.errtime)
|
||||
# touch ${FOLDER}/${nip}-${srvc}.down
|
||||
# if [ "${srvc}" = "mysql" ]; then
|
||||
# ${NCMD} systemctl restart ${srvc}
|
||||
# fi
|
||||
# fi
|
||||
# if [ "${ST_ACTION}" != "check" ]; then
|
||||
# echo -e "${idsCL[Red]}Not running for $(SHOW_TIME ${toterrtime})${idsCL[Default]}"
|
||||
# fi
|
||||
# fi
|
||||
# else
|
||||
# if [ "${ST_ACTION}" != "check" ]; then
|
||||
# echo -e "${idsCL[Green]}Running${idsCL[Default]}"
|
||||
# fi
|
||||
# if [ -f ${FOLDER}/${nip}-${srvc}.down ]; then
|
||||
# if [ -f ${FOLDER}/${nip}-${srvc}.errtime ]; then
|
||||
# toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.errtime)
|
||||
# else
|
||||
# toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${srvc}.down)
|
||||
# fi
|
||||
# SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_SERVICES[${srvc}]} is back UP! It was down for $(SHOW_TIME ${toterrtime})"
|
||||
# echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - ${NM_SERVICES[${srvc}]} is back up, it was down for $(SHOW_TIME ${toterrtime})" >> ${LOGFILE}
|
||||
#
|
||||
# rm -f ${FOLDER}/${nip}-${srvc}.down
|
||||
# rm -f ${FOLDER}/${nip}-${srvc}.errtime
|
||||
#
|
||||
# fi
|
||||
# # if [ "${srvc}" == "pdnsadmin.socket" ] || [ "${srvc}" == "pdnsadmin" ] || [ "${srvc}" == "gitea" ]; then
|
||||
# if [ "${srvc}" == "gitea" ]; then
|
||||
# rm -f ${FOLDER}/*-${srvc}.down
|
||||
# rm -f ${FOLDER}/*-${srvc}.errtime
|
||||
# fi
|
||||
# fi
|
||||
# [ "${mysqlgo}" = "true" ] && unset mysqlgo
|
||||
# fi
|
||||
# done
|
||||
fi
|
||||
|
||||
if [[ -v ${NTYPE}_DOCKER ]] && [ "${ST_ACTION}" != "services" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo
|
||||
echo -e "${idsCL[Yellow]} Docker Service(s) Status${idsCL[Default]}"
|
||||
echo -e "${idsCL[Yellow]}---------------------------------------------${idsCL[Default]}"
|
||||
fi
|
||||
|
||||
for docker in "${!dockers}"; do
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
if [ "${ST_ACTION}" != "report" ]; then
|
||||
c=0; cw=30; spc=''
|
||||
spc1=`expr ${cw} - ${#NM_DOCKERS[${docker}]}`
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
else
|
||||
spc=' '
|
||||
fi
|
||||
echo -en " ${NM_DOCKERS[${docker}]}$spc: "
|
||||
fi
|
||||
|
||||
if [ ! "$(${NCMD} docker ps -q -f name=${docker})" ]; then
|
||||
if [ "$(${NCMD} docker ps -aq -f status=exited -f name=${docker})" ]; then
|
||||
${NCMD} docker rm ${docker} >/dev/null 2>&1
|
||||
fi
|
||||
${NCMD} docker-compose -f ${NM_DOCKER_COMPOSE[${docker}]}/docker-compose.yml up -d >/dev/null 2>&1
|
||||
sleep 10s
|
||||
if [ "$(${NCMD} docker ps -q -f name=${docker})" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Green]}Running - Fixed${idsCL[Default]}"
|
||||
fi
|
||||
SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_DOCKERS[${docker}]} is fixed"
|
||||
rm -f ${FOLDER}/${nip}-${docker}.down
|
||||
rm -f ${FOLDER}/${nip}-${docker}.errtime
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - ${NM_DOCKERS[${docker}]} (docker) is fixed" >> ${LOGFILE}
|
||||
|
||||
else
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Red]}Not Running - Could Not Fix!${idsCL[Default]}"
|
||||
|
||||
if [ ! -f ${FOLDER}/${nip}-${docker}.down ]; then
|
||||
SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_DOCKERS[${docker}]} is down" 1
|
||||
touch ${FOLDER}/${nip}-${docker}.down
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - ${NM_DOCKERS[${docker}]} (docker) is down" >> ${LOGFILE}
|
||||
else
|
||||
errtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${docker}.down)
|
||||
if [ $errtime -gt ${RENOTIFY} ]; then
|
||||
if [ ! -f ${FOLDER}/${nip}-${docker}.errtime ]; then
|
||||
mv ${FOLDER}/${nip}-${docker}.down ${FOLDER}/${nip}-${docker}.errtime
|
||||
fi
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}-${docker}.errtime)
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Red]}Not running for $(SHOW_TIME ${toterrtime})${idsCL[Default]}"
|
||||
fi
|
||||
touch ${FOLDER}/${nip}-${docker}.down
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Green]}Running${idsCL[Default]}"
|
||||
fi
|
||||
rm -f ${FOLDER}/${nip}-${docker}.down
|
||||
rm -f ${FOLDER}/${nip}-${docker}.errtime
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
else
|
||||
if [ ! -f ${FOLDER}/${nip}.down ]; then
|
||||
touch ${FOLDER}/${nip}.down
|
||||
if [ ! -f ${FOLDER}/${nip}.errtime ]; then
|
||||
touch ${FOLDER}/${nip}.errtime
|
||||
fi
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}.errtime)
|
||||
echo -e "${idsCL[Red]} - Node is down!${idsCL[Default]}"
|
||||
fi
|
||||
SENDNOTICE "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" "${NM_NODETYPES[$NTYPE]}-Node${nid} is down" 1
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - Node is down" >> ${LOGFILE}
|
||||
else
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
toterrtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}.errtime)
|
||||
echo -e "${idsCL[Red]} - Node has been down for $(SHOW_TIME ${toterrtime}) ${idsCL[LightYello]}${LH}${idsCL[Default]}"
|
||||
fi
|
||||
errtime=`date +%s`-$(stat -c %Y ${FOLDER}/${nip}.down)
|
||||
# if [ $errtime -gt ${RENOTIFY} ] && [ "${EMAIL_NOTICE}" != "" ]; then
|
||||
# echo "${NM_NODETYPES[$NTYPE]}-Node${nid} has been down for $(SHOW_TIME ${toterrtime})" | mail -s "${NM_NODETYPES[$NTYPE]}-Node${nid}-${nip}" ${EMAIL_NOTICE}
|
||||
# fi
|
||||
fi
|
||||
|
||||
fi
|
||||
if [ "${ST_ACTION}" != "check" ]; then echo; fi
|
||||
nid=`expr $nid + 1`
|
||||
done
|
||||
|
||||
fi #GOFORCHECK
|
||||
|
||||
done
|
||||
|
||||
fi
|
||||
########################
|
||||
## REPLICATION CHECK
|
||||
########################
|
||||
|
||||
if [ "${ST_ACTION}" == "report" ] || [ "${ST_ACTION}" == "repl" ] || [ "${ST_ACTION}" == "check" ] || [ "${ST_ACTION}" == "" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsST[Bold]}"; DIVIDER
|
||||
echo -e "${idsCL[Yellow]} Replication Status Between the Primary and Secondary Nodes${idsCL[Default]}"
|
||||
DIVIDER; echo -e "${idsST[Reset]}"
|
||||
echo -en " ${idsCL[LightCyan]}Starting processes to collect/monitor replication status : "
|
||||
fi
|
||||
for NTYPE in "${NODE_TYPES[@]}"; do
|
||||
PH=${NTYPE}_HOSTS[0]
|
||||
PH_CMD="ssh root@${!PH}"
|
||||
var=${NTYPE}_REPL_CHECK[@]
|
||||
if [ ! -z ${!var+x} ]; then
|
||||
var=${NTYPE}_HOSTS[@]
|
||||
for nip in "${!var}"; do
|
||||
if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *"${nip}"* ]] && [ "${nip}" != "${!PH}" ]; then
|
||||
if [ ! -f ${FOLDER}/${!PH}.down ] && [ ! -f ${FOLDER}/${nip}.down ]; then
|
||||
var2=${NTYPE}_REPL_CHECK[@]
|
||||
for rcheck in "${!var2}"; do
|
||||
REPLCHECK "${rcheck}" "${nip}" "${PH_CMD}" "${ST_ACTION}" & >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[Green]}Done${idsCL[Default]}\n"
|
||||
|
||||
for NTYPE in "${NODE_TYPES[@]}"; do
|
||||
PH=${NTYPE}_HOSTS[0]
|
||||
PH_CMD="ssh root@${!PH}"
|
||||
var=${NTYPE}_REPL_CHECK[@]
|
||||
if [ ! -z ${!var+x} ]; then
|
||||
var=${NTYPE}_HOSTS[@]
|
||||
for nip in "${!var}"; do
|
||||
if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) != *"${nip}"* ]] && [ "${nip}" != "${!PH}" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e " ${idsCL[LightCyan]}${NM_NODETYPES[$NTYPE]}-Node1 (${!PH}) <--> ${idsST[Bold]}${NM_NODETYPES[$NTYPE]}-Node${nid} (${nip})${idsST[Reset]}${idsCL[Default]}"
|
||||
DIVIDER false green
|
||||
fi
|
||||
if [ ! -f ${FOLDER}/${!PH}.down ] && [ ! -f ${FOLDER}/${nip}.down ]; then
|
||||
var2=${NTYPE}_REPL_CHECK[@]
|
||||
for rcheck in "${!var2}"; do
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
if [ "${ST_ACTION}" != "report" ]; then
|
||||
c=0; cw=30; spc=''; spc1=${cw}-${#REPL_DESC[${rcheck}]}; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
else
|
||||
spc=' '
|
||||
fi
|
||||
echo -en " ${REPL_DESC[${rcheck}]}${spc}: "
|
||||
|
||||
fi
|
||||
|
||||
checked=""
|
||||
until [ "${checked}" != "" ]; do
|
||||
if [ -f ${TMPFOLDER}/repl.${rcheck}.${nip}.good ]; then
|
||||
checked=good
|
||||
elif [ -f ${TMPFOLDER}/repl.${rcheck}.${nip}.timeout ]; then
|
||||
checked=timeout
|
||||
fi
|
||||
rm -f ${TMPFOLDER}/repl.${rcheck}.${nip}.*
|
||||
done
|
||||
if [ "${checked}" == "timeout" ]; then
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[Red]}Timeout${idsCL[Default]}"
|
||||
if [ ! -f ${FOLDER}/${nip}-${rcheck}.down ]; then
|
||||
touch ${FOLDER}/${nip}-${rcheck}.down
|
||||
SENDNOTICE "Repl-Timeout-'${NM_NODETYPES[$NTYPE]}-Node${nid}'" "${REPL_DESC[${rcheck}]} (${REPL_CHECKS[${rcheck}]})" 1
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - (${REPL_DESC[${rcheck}]}) Replicated folder timeout, it is not syncing" >> ${LOGFILE}
|
||||
fi
|
||||
else
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[Green]}Good${idsCL[Default]}"
|
||||
if [ -f ${FOLDER}/${nip}-${rcheck}.down ]; then
|
||||
rm -f ${FOLDER}/${nip}-${rcheck}.down
|
||||
SENDNOTICE "Repl-Timeout-'${NM_NODETYPES[$NTYPE]}-Node${nid}'" "Replicated folder is back up!\n${REPL_DESC[${rcheck}]} (${REPL_CHECKS[${rcheck}]})"
|
||||
echo "$(date) - ${nip} - ${NM_NODETYPES[$NTYPE]}-Node${nid} - (${REPL_DESC[${rcheck}]}) Replicated folder is back up" >> ${LOGFILE}
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
[ -f ${FOLDER}/${!PH}.down ] && echo -e "${idsCL[Red]}${NM_NODETYPES[$NTYPE]}-Node1 (${!PH}) is offline${idsCL[Default]}"
|
||||
[ -f ${FOLDER}/${nip}.down ] && echo -e "${idsCL[Red]}${NM_NODETYPES[$NTYPE]}-Node${nip: -1} (${nip}) is offline${idsCL[Default]}"
|
||||
fi
|
||||
fi
|
||||
if [ "${ST_ACTION}" != "check" ]; then echo; fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
##########################
|
||||
# REMOVE REPL CHECK FILES
|
||||
##########################
|
||||
if [ "${ST_ACTION}" = "report" ] || [ "${ST_ACTION}" = "repl" ] || [ "${ST_ACTION}" = "check" ] || [ "${ST_ACTION}" = "" ]; then
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -en "${idsCL[LightCyan]}Cleaning up status checks... ${idsCL[Default]}"
|
||||
fi
|
||||
#NHCMD="ssh root@${MYSQL_HOSTS[0]}"
|
||||
#LBHCMD="ssh root@${LB_HOSTS[0]}"
|
||||
#WHCMD="ssh root@${WEB_HOSTS[0]}"
|
||||
for NTYPE in "${NODE_TYPES[@]}"; do
|
||||
PH=${NTYPE}_HOSTS[0]
|
||||
if [ ! -f ${FOLDER}/${!PH}.down ]; then
|
||||
PH_CMD="ssh root@${!PH}"
|
||||
var=${NTYPE}_REPL_CHECK[@]
|
||||
if [ ! -z ${!var+x} ]; then
|
||||
for rcheck in "${!var}"; do
|
||||
${PH_CMD} rm -f ${FOLDER}/test.repl
|
||||
daterun=`date +%Y-%m-%d-%H-%M-%S`
|
||||
if [ "${PH_CMD}" = "" ]; then
|
||||
rm -f ${FOLDER}/test.repl &
|
||||
rm -f ${REPL_CHECKS[${rcheck}]}/test.repl &
|
||||
else
|
||||
${PH_CMD} rm -f ${FOLDER}/test.repl &
|
||||
${PH_CMD} rm -f ${REPL_CHECKS[${rcheck}]}/test.repl &
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -Rf ${FOLDER}/test.repl
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
########################
|
||||
## FREE SPACE CHECK
|
||||
########################
|
||||
#if [ "${ST_ACTION}" = "" ] || [ "${ST_ACTION}" = "report" ] || [ "${ST_ACTION}" = "freespace" ]; then
|
||||
if [ "${ST_ACTION}" = "freespace" ]; then
|
||||
if [ "${ST_ACTION}" != "repl" ] && [ "${ST_ACTION}" != "services" ]; then
|
||||
for NTYPE in "${NODE_TYPES[@]}"; do
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e "${idsST[Bold]}"; DIVIDER
|
||||
echo -e "${idsCL[Yellow]} ${NM_NODETYPES[$NTYPE]}-Node Free Space Scan${idsCL[Default]}"
|
||||
DIVIDER; echo -e "${idsST[Reset]}"
|
||||
fi
|
||||
nid=1
|
||||
var=${NTYPE}_HOSTS[@]
|
||||
for nip in "${!var}"; do
|
||||
if [[ $(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) == *"${nip}"* ]]; then NCMD=''; LH='- localhost'
|
||||
else NCMD="ssh root@${nip}"; LH=''
|
||||
fi
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo -e " ${idsST[Bold]}${idsCL[LightCyan]}${NM_NODETYPES[$NTYPE]}-Node${nid} (${nip})${idsST[Reset]}${idsCL[LightCyan]} ${idsCL[LightYello]}${LH}${idsCL[Default]}"
|
||||
DIVIDER false green
|
||||
fi
|
||||
|
||||
[ "${ST_ACTION}" != "check" ] && echo -en " ${idsCL[LightCyan]}Getting drives from server ... ${idsCL[Default]}"
|
||||
declare -A partitions
|
||||
DRIVEINFO=$(ssh root@${nip} df -BM | grep -vE '^Filesystem|tmpfs|cdrom|@|ram|loop|udev|veeamimage|nvme|localhost|shm|mmcblk|overlay|-volume|Music|Software' | awk '{ print $1 " " $2 " " $4 }')
|
||||
DRIVEINFO=(${DRIVEINFO})
|
||||
echo -en "\e[1A";
|
||||
echo -e "\e[0K\r"
|
||||
|
||||
NUMDRIVES=$((${#DRIVEINFO[@]} / 3))
|
||||
for ((i = 0 ; i <= $((${NUMDRIVES}-1)) ; i++)); do
|
||||
ii=$((${i}*3))
|
||||
pname=`echo "${DRIVEINFO[${ii}]}" | awk -F'/' ' { print $NF } '` >/dev/null 2>&1
|
||||
pname=${pname#*vg-}
|
||||
if [ ${DRIVEINFO[$((${ii}+1))]//M/} -gt 1024 ]; then
|
||||
freespace=${DRIVEINFO[$((${ii}+2))]//M/}
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
c=0; cw=20; spc=''
|
||||
spc1=${cw}-${#pname}
|
||||
until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
echo -en " ${pname}$spc: "
|
||||
fi
|
||||
if [[ ${freespace} -gt 1024 ]]; then
|
||||
fsgb=$(bc <<< "scale=2; ${freespace}/1024")
|
||||
fsdsp="${fsgb} GB"
|
||||
else
|
||||
fsdsp="${freespace} MB"
|
||||
fi
|
||||
if [ "${freespace}" -le "1024" ]; then
|
||||
fs_status='error'
|
||||
fs_status_color='Red'
|
||||
SENDNOTICE "Free Space Critical: '${NM_NODETYPES[$NTYPE]}-Node${nid}'" "${partition} : ${fsdsp} free" 1
|
||||
elif [ "${freespace}" -le "5120" ]; then
|
||||
fs_status='warn'
|
||||
fs_status_color='Yellow'
|
||||
SENDNOTICE "Free Space Warning: '${NM_NODETYPES[$NTYPE]}-Node${nid}'" "${partition} : ${fsdsp} free"
|
||||
else
|
||||
fs_status=''
|
||||
fs_status_color='Green'
|
||||
fi
|
||||
[ "${ST_ACTION}" != "check" ] && echo -e "${idsCL[${fs_status_color}]}${fsdsp} ${idsCL[Default]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# for partition in "${partitions3[@]}"; do
|
||||
# if [ "${partition}" != "udev" ] && [ "${partition}" != "/dev/sda1" ]; then
|
||||
# pname=`echo "${partition}" | awk -F'/' ' { print $NF } '` >/dev/null 2>&1
|
||||
# pname=${pname#*vg-}
|
||||
# if [ "${ST_ACTION}" != "check" ]; then
|
||||
# c=0; cw=20; spc=''
|
||||
# spc1=${cw}-${#pname}
|
||||
# until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
||||
# echo -en " ${pname}$spc: "
|
||||
# fi
|
||||
#
|
||||
# # [[ "${partition}" == *"root"* ]] && prt="/" || prt=${partition}
|
||||
# # freespace=`${NCMD} df -hPBM ${prt} | awk '{print $4}' |tail -1|sed 's/M$//g'` >/dev/null 2>&1
|
||||
#
|
||||
# if [ "${freespace}" -le "1000" ]; then
|
||||
# fs_status='error'
|
||||
# fs_status_color='Red'
|
||||
# SENDNOTICE "Free Space Critical: '${NM_NODETYPES[$NTYPE]}-Node${nid}'" "${partition} : ${freespace} MB free" 1
|
||||
#
|
||||
# elif [ "${freespace}" -le "5000" ]; then
|
||||
# fs_status='warn'
|
||||
# fs_status_color='Yellow'
|
||||
# SENDNOTICE "Free Space Warning: '${NM_NODETYPES[$NTYPE]}-Node${nid}'" "${partition} : ${freespace} MB free"
|
||||
#
|
||||
# else
|
||||
# fs_status=''
|
||||
# fs_status_color='Green'
|
||||
#
|
||||
# fi
|
||||
# if [ "${ST_ACTION}" != "check" ]; then
|
||||
# if [[ ${freespace} -gt 1000 ]]; then
|
||||
# fsgb=$(bc <<< "scale=2; ${freespace}/1000")
|
||||
# fsdsp="${fsgb} GB"
|
||||
# else
|
||||
# fsdsp="${freespace} MB"
|
||||
# fi
|
||||
# echo -e "${idsCL[${fs_status_color}]}${fsdsp} ${idsCL[Default]}"
|
||||
#
|
||||
# fi
|
||||
# fi
|
||||
# done
|
||||
|
||||
nid=`expr $nid + 1`
|
||||
echo
|
||||
done
|
||||
done
|
||||
fi
|
||||
fi
|
||||
########################
|
||||
########################
|
||||
|
||||
if [ "${ST_ACTION}" != "check" ]; then
|
||||
echo ""
|
||||
if [ -z $action ] || [ "${action}" = "gui" ]; then
|
||||
DIVIDER true
|
||||
ENTER2CONTINUE
|
||||
fi
|
||||
fi
|
||||
end=`date +%s`
|
||||
runtime=$((end-start))
|
||||
echo "runtime: ${runtime}"
|
||||
}
|
||||
|
||||
|
||||
REPLCHECK(){
|
||||
rcheck=${1}
|
||||
nip=${2}
|
||||
PH_CMD=${3}
|
||||
if [ "${4}" != "check" ]; then
|
||||
timeout=`date --date='1 minutes' +%s`
|
||||
else
|
||||
timeout=`date --date='2 minutes' +%s`
|
||||
fi
|
||||
checked=false
|
||||
until [ "${checked}" == "" ]; do
|
||||
if [ "${PH_CMD}" == "" ]; then
|
||||
ssh -q root@${nip} [[ -f ${REPL_CHECKS[${rcheck}]}/test.repl ]] && checked=`ssh root@${nip} "cat ${REPL_CHECKS[${rcheck}]}/test.repl" | diff - ${REPL_CHECKS[${rcheck}]}/test.repl`
|
||||
else
|
||||
ssh -q root@${nip} [[ -f ${REPL_CHECKS[${rcheck}]}/test.repl ]] && checked="`${PH_CMD} \"ssh root@${nip} \"cat ${REPL_CHECKS[${rcheck}]}/test.repl\" | diff - ${REPL_CHECKS[${rcheck}]}/test.repl\"`"
|
||||
fi
|
||||
[ "`date +%s`" -gt "${timeout}" ] && timeout=true && break
|
||||
done
|
||||
[ "${timeout}" == "true" ] && touch ${TMPFOLDER}/repl.${rcheck}.${nip}.timeout || touch ${TMPFOLDER}/repl.${rcheck}.${nip}.good
|
||||
}
|
||||
1900
nodemgmt-scripts.sh
1900
nodemgmt-scripts.sh
File diff suppressed because it is too large
Load Diff
57
run.sh
57
run.sh
@@ -1,45 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
# NodeMgmt Loader
|
||||
|
||||
action=$1
|
||||
if [ -f /opt/idssys/settings/nodemgmt.conf ]; then
|
||||
mv /opt/idssys/settings/nodemgmt.conf /opt/idssys/nodemgmt/settings.conf
|
||||
fi
|
||||
|
||||
source /opt/idssys/defaults/colors.inc
|
||||
source /opt/idssys/defaults/default.inc
|
||||
if [ ! -f /opt/idssys/settings/nodemgmt.conf ]; then
|
||||
source /opt/idssys/nodemgmt/settings.conf
|
||||
else
|
||||
source /opt/idssys/settings/nodemgmt.conf
|
||||
fi
|
||||
source /opt/idssys/nodemgmt/settings.conf
|
||||
source /opt/idssys/nodemgmt/defaults.inc
|
||||
|
||||
if [ "$1" != "service" ] && [ "$1" != "status-check" ] && [ "$1" != "nightlyrenew" ] && [ "$1" != "backup" ]; then
|
||||
if [ "${1}" = "gui" ]; then
|
||||
DISP_HEADER
|
||||
fi
|
||||
if [ "${1}" != "gui" ]; then
|
||||
if [[ "${noheader}" != *" ${1} "* ]] && [[ "${noheader}" != *" ${2} "* ]]; then
|
||||
# if [ "${1}" = "gui" ]; then
|
||||
# DISP_HEADER
|
||||
# fi
|
||||
|
||||
# if [ "${1}" != "guiX" ]; then
|
||||
if curl -m 15 -s --head --request GET https://git.schroedercity.com | grep "HTTP/2 200" > /dev/null; then
|
||||
if [ "${2}" != "q" ]; then
|
||||
echo -en "${idsCL[LightCyan]}Checking for updates...${idsCL[Default]}"
|
||||
echo ""
|
||||
fi
|
||||
cd /opt/idssys/defaults
|
||||
if [ "`git log --pretty=%H ...refs/heads/master^ | head -n 1`" != "`git ls-remote origin -h refs/heads/master |cut -f1`" ]; then
|
||||
if [ "${2}" != "q" ]; then
|
||||
echo -en "\e[1A";
|
||||
echo -e "\e[0K\r ${idsCL[LightCyan]}Installing updates...${idsCL[Default]}"
|
||||
fi
|
||||
git fetch origin master >/dev/null 2>&1
|
||||
git reset --hard origin/master >/dev/null 2>&1
|
||||
git reflog expire --expire=now --all >/dev/null 2>&1
|
||||
git repack -ad >/dev/null 2>&1
|
||||
git prune >/dev/null 2>&1
|
||||
git pull >/dev/null 2>&1
|
||||
git submodule update --remote >/dev/null 2>&1
|
||||
fi
|
||||
cd /opt/idssys/nodemgmt
|
||||
if [ "`git log --pretty=%H ...refs/heads/master^ | head -n 1`" != "`git ls-remote origin -h refs/heads/master |cut -f1`" ]; then
|
||||
git fetch origin master >/dev/null 2>&1
|
||||
git reset --hard origin/master >/dev/null 2>&1
|
||||
cd ${FOLDER}
|
||||
# if [ "`git log --pretty=%H ...refs/heads/master^ | head -n 1`" != "`git ls-remote origin -h refs/heads/master |cut -f1`" ]; then
|
||||
if [ "`git log --pretty=%H ...refs/heads/dev^ | head -n 1`" != "`git ls-remote origin -h refs/heads/dev |cut -f1`" ]; then
|
||||
if [ "${2}" != "q" ]; then
|
||||
echo -en "\e[1A";
|
||||
echo -e "\e[0K\r ${idsCL[LightCyan]}Installing updates...${idsCL[Default]}"
|
||||
fi
|
||||
# git fetch origin master >/dev/null 2>&1
|
||||
# git reset --hard origin/master >/dev/null 2>&1
|
||||
git fetch origin dev >/dev/null 2>&1
|
||||
git reset --hard origin/dev >/dev/null 2>&1
|
||||
git reflog expire --expire=now --all >/dev/null 2>&1
|
||||
git repack -ad >/dev/null 2>&1
|
||||
git prune >/dev/null 2>&1
|
||||
git pull >/dev/null 2>&1
|
||||
fi
|
||||
git submodule update --remote >/dev/null 2>&1
|
||||
/bin/chmod +x /opt/idssys/nodemgmt/nodemgmt-scripts.sh 2>&1
|
||||
if [ "${2}" != "q" ]; then
|
||||
echo -en "\e[1A";
|
||||
echo -e "\e[0K\r ${idsCL[Green]}Updates Completed${idsCL[Default]}"
|
||||
fi
|
||||
elif [ "${2}" != "q" ]; then
|
||||
echo -en "\e[1A";
|
||||
echo -e "\e[0K\r ${idsCL[LightCyan]}No Updates Available${idsCL[Default]}"
|
||||
fi
|
||||
else
|
||||
echo -e "${idsCL[Red]}Could not connect to 'git.schroedercity.com' for updates${idsCL[Default]}"
|
||||
fi
|
||||
fi
|
||||
/opt/idssys/nodemgmt/nodemgmt-scripts.sh ${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11} ${12} ${13} ${14}
|
||||
${SCRIPT} ${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11} ${12} ${13} ${14} ${15} ${16} ${17} ${18} ${19} ${20} ${21} ${22} ${23} ${24} ${25}
|
||||
exit 0
|
||||
|
||||
226
runcerts.old
226
runcerts.old
@@ -1,226 +0,0 @@
|
||||
#!/bin/bash
|
||||
# My Cert Processes for LetsEncrypt
|
||||
|
||||
Color_Off='\033[0m'
|
||||
Blue='\033[0;34m'
|
||||
BBlue='\033[1;34m'
|
||||
Green='\033[0;32m'
|
||||
LGreen='\033[1;32m'
|
||||
BOrange='\033[0;33m'
|
||||
DGray='\033[1;30m'
|
||||
Red='\033[10;31m'
|
||||
LRed='\033[1;31m'
|
||||
|
||||
DAEMON='/usr/bin/certbot'
|
||||
|
||||
redirect_artica-ssl_files () {
|
||||
MYDIR="/etc/nginx/certificates"
|
||||
DIRS=`ls -l $MYDIR | egrep '^d' | awk '{print $9}'`
|
||||
for DIR in $DIRS; do
|
||||
if [ $DIR != 'new' ] && [ $DIR != 'default' ]
|
||||
then
|
||||
echo -e "${LGreen}Checking cetificate redirections for \"${LRed}${DIR}${Green}\"...${Color_Off}"
|
||||
|
||||
#rm -f /etc/nginx/certificates/${DIR}/CAkey.pem
|
||||
#rm -f /etc/nginx/certificates/${DIR}/certificate.pem
|
||||
#rm -f /etc/nginx/certificates/${DIR}/private_key.key
|
||||
#mv /etc/nginx/certificates/${DIR}/CAkey.pem.bak /etc/nginx/certificates/${DIR}/CAkey.pem
|
||||
#mv /etc/nginx/certificates/${DIR}/certificate.pem.bak /etc/nginx/certificates/${DIR}/certificate.pem
|
||||
#mv /etc/nginx/certificates/${DIR}/private_key.key.bak /etc/nginx/certificates/${DIR}/private_key.key
|
||||
|
||||
if [ ! -f /etc/nginx/certificates/${DIR}/CAkey.pem.bak ]
|
||||
then
|
||||
certs_array=('certs1=(CAkey.pem private_key.key certificate.pem)' 'certs2=(chain.pem privkey.pem fullchain.pem)')
|
||||
for elt in "${certs_array[@]}";do eval $elt;done
|
||||
for ((i=0;i<=2;i++));
|
||||
do
|
||||
mv /etc/nginx/certificates/${DIR}/${certs1[${i}]} /etc/nginx/certificates/${DIR}/${certs1[${i}]}.bak
|
||||
ln -s /etc/letsencrypt/live/${DIR}/${certs2[${i}]} /etc/nginx/certificates/${DIR}/${certs1[${i}]}
|
||||
echo -e "${Green}Certificate redirected for \"${DGray}.../${DIR}/${BOrange}${certs1[${i}]}${Green}\"${Color_Off}"
|
||||
done
|
||||
else
|
||||
echo -e "${Green}No changes needed to be made at this time.${Color_Off}"
|
||||
fi
|
||||
echo
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
|
||||
start)
|
||||
sleep 15
|
||||
echo -e "${BBlue}HAProxy Starting...${Color_Off}"
|
||||
service haproxy start
|
||||
ssh root@10.5.10.52 service haproxy start
|
||||
ssh root@10.5.10.53 service haproxy start
|
||||
echo -e "${BBlue}NGINX Reload...${Color_Off}"
|
||||
service nginx reload
|
||||
ssh root@10.5.10.52 service nginx reload
|
||||
ssh root@10.5.10.53 service nginx reload
|
||||
|
||||
exit 0
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo -e "${BBlue}HAProxy Stopping...${Color_Off}"
|
||||
service haproxy stop
|
||||
ssh root@10.5.10.52 service haproxy stop
|
||||
ssh root@10.5.10.53 service haproxy stop
|
||||
exit 0;;
|
||||
|
||||
gogs-start)
|
||||
echo -e "${BBlue}Gogs Starting...${Color_Off}"
|
||||
service gogs start
|
||||
ssh root@10.5.10.52 service gogs start
|
||||
ssh root@10.5.10.53 service gogs start
|
||||
exit 0;;
|
||||
|
||||
gogs-stop)
|
||||
echo -e "${BBlue}Gogs Stopping...${Color_Off}"
|
||||
service gogs stop
|
||||
ssh root@10.5.10.52 service gogs stop
|
||||
ssh root@10.5.10.53 service gogs stop
|
||||
exit 0;;
|
||||
|
||||
gogs-restart)
|
||||
echo -e "${BBlue}Gogs Restarting...${Color_Off}"
|
||||
service gogs restart
|
||||
ssh root@10.5.10.52 service gogs restart
|
||||
ssh root@10.5.10.53 service gogs restart
|
||||
exit 0;;
|
||||
|
||||
nginx-start)
|
||||
echo -e "${BBlue}NGINX Starting...${Color_Off}"
|
||||
service nginx start
|
||||
ssh root@10.5.10.52 service nginx start
|
||||
ssh root@10.5.10.53 service nginx start
|
||||
exit 0;;
|
||||
|
||||
nginx-stop)
|
||||
echo -e "${BBlue}NGINX Stopping...${Color_Off}"
|
||||
service nginx stop
|
||||
ssh root@10.5.10.52 service nginx stop
|
||||
ssh root@10.5.10.53 service nginx stop
|
||||
exit 0;;
|
||||
|
||||
nginx-restart)
|
||||
echo -e "${BBlue}NGINX Restarting...${Color_Off}"
|
||||
service nginx restart
|
||||
ssh root@10.5.10.52 service nginx restart
|
||||
ssh root@10.5.10.53 service nginx restart
|
||||
exit 0;;
|
||||
|
||||
reload)
|
||||
service nginx reload
|
||||
ssh root@10.5.10.52 service nginx reload
|
||||
ssh root@10.5.10.53 service nginx reload
|
||||
exit 0
|
||||
;;
|
||||
|
||||
new)
|
||||
# "$0" stop
|
||||
echo -e "${Green}Requesting Certificate for '${BBlue}$2${Green}'...${Color_Off}"
|
||||
# $DAEMON certonly --standalone -d $2
|
||||
$DAEMON certonly --webroot -w /var/www/html -d $2
|
||||
# chown -R root:letsencrypt /etc/letsencrypt
|
||||
# chmod -R 6775 /etc/letsencrypt
|
||||
# "$0" start
|
||||
# redirect_artica-ssl_files
|
||||
exit 0
|
||||
;;
|
||||
|
||||
new-mass)
|
||||
echo -e "${Green}Requesting Certificate for '${BBlue}$2${Green}'...${Color_Off}"
|
||||
# $DAEMON certonly --standalone -d $2
|
||||
$DAEMON certonly --webroot -w /var/www/html -d $2
|
||||
# chown -R root:letsencrypt /etc/letsencrypt
|
||||
# chmod -R 6775 /etc/letsencrypt
|
||||
# redirect_artica-ssl_files
|
||||
exit 0
|
||||
;;
|
||||
|
||||
renew)
|
||||
"$0" stop
|
||||
echo -e "${Green}Renewing Certificates...${Color_Off}"
|
||||
# $DAEMON renew
|
||||
$DAEMON renew certonly --webroot -w /var/www/html -d $2
|
||||
chown -R root:letsencrypt /etc/letsencrypt
|
||||
chmod -R 6775 /etc/letsencrypt
|
||||
"$0" start
|
||||
# redirect_artica-ssl_files
|
||||
exit 0
|
||||
;;
|
||||
|
||||
nightlyrenew)
|
||||
rm -f /opt/runcerts/cert-renewal-run-$(hostname)
|
||||
"$0" stop >> /opt/runcerts/cert-renewal-run-$(hostname)
|
||||
# $DAEMON renew >> /opt/runcerts/cert-renewal-run-$(hostname)
|
||||
$DAEMON renew certonly --webroot -w /var/www/html -d $2 >> /opt/runcerts/cert-renewal-run-$(hostname)
|
||||
chown -R root:letsencrypt /etc/letsencrypt
|
||||
chmod -R 6775 /etc/letsencrypt
|
||||
"$0" start >> /opt/runcerts/cert-renewal-run-$(hostname)
|
||||
exit 0
|
||||
;;
|
||||
|
||||
|
||||
redirect-ssl)
|
||||
redirect_artica-ssl_files
|
||||
service nginx restart
|
||||
|
||||
read -n 1 -t 10 -p "Are you sure you wish to reboot (y/N)?" redirect_choice
|
||||
case "$redirect_choice" in
|
||||
[Yy]) if [ "$EUID" -ne 0 ]
|
||||
then
|
||||
service artica-webservices restart
|
||||
fi
|
||||
exit 0;;
|
||||
esac
|
||||
exit 0
|
||||
;;
|
||||
|
||||
*)
|
||||
echo
|
||||
echo
|
||||
echo "Usage: $0 {new|new-mass|renew|redirect-ssl|stop|start}"
|
||||
echo
|
||||
echo "'new' - Creates a new certificate."
|
||||
echo "---------------------------------------------------------------------------------------"
|
||||
echo "examples:"
|
||||
echo " single-domain = 'runcerts new www.example.com'"
|
||||
echo " multiple-domains = 'runcerts new www.example.com,dev.example.com,...'"
|
||||
echo
|
||||
echo "'new-mass' - Creates a new certificate, but doesnt go through the"
|
||||
echo " process of stopping and restarting nginx each time"
|
||||
echo "---------------------------------------------------------------------------------------"
|
||||
echo "examples (same as 'new'):"
|
||||
echo " single-domain = 'runcerts new-mass www.example.com'"
|
||||
echo " multiple-domains = 'runcerts new-mass www.example.com,dev.example.com,...'"
|
||||
echo
|
||||
echo "'renew' - Renews all certificates. This command could be run routinly by adding this"
|
||||
echo " line into crontab: \"0 4 * * 0 /usr/local/bin/runcerts renew\""
|
||||
echo "---------------------------------------------------------------------------------------"
|
||||
echo "examples:"
|
||||
echo " 'runcerts renew'"
|
||||
echo
|
||||
echo "'redirect-ssl' - Redirects the configured Artica certificates to use the LetsEncrypt certificates"
|
||||
echo "---------------------------------------------------------------------------------------"
|
||||
echo "examples:"
|
||||
echo " 'runcerts redirect-ssl'"
|
||||
echo
|
||||
echo "'stop' - Stops any process that interfere with creating a standalone server"
|
||||
echo "---------------------------------------------------------------------------------------"
|
||||
echo "examples:"
|
||||
echo " 'runcerts stop'"
|
||||
echo
|
||||
echo "'start' - Starts any process that had interfered with creating a standalone server"
|
||||
echo "---------------------------------------------------------------------------------------"
|
||||
echo "examples:"
|
||||
echo " 'runcerts start'"
|
||||
echo
|
||||
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
exit 0
|
||||
@@ -9,16 +9,226 @@
|
||||
# Author: Matty < matty91 at gmail dot com >
|
||||
#
|
||||
# Current Version: 3.30
|
||||
|
||||
#
|
||||
# Revision History:
|
||||
#
|
||||
# Version 3.31
|
||||
# - Fixed the test for the -servername flag -- Kitson Consulting.
|
||||
#
|
||||
# Version 3.30
|
||||
# - Use highest returncode for Nagios output -- Marcel Pennewiss
|
||||
# - Set RETCODE to 3 (unknown) if a certificate file does not exist -- Marcel Pennewiss
|
||||
# - Add a "-d" option to specify a directory or file mask pattern -- Marcel Pennewiss
|
||||
# - Add a "-N" option to create summarized Nagios output -- Marcel Pennewiss
|
||||
# - Cleaned up many formatting -- Marcel Pennewiss
|
||||
#
|
||||
# Versione 3.29a
|
||||
# - Added option to specify email sender address
|
||||
#
|
||||
# Version 3.29
|
||||
# - Add the openssl -servername flag if it shows up in help.
|
||||
#
|
||||
# Version 3.28
|
||||
# - Added a DEBUG option to assist with debugging folks who use the script
|
||||
#
|
||||
# Version 3.27
|
||||
# - Allow white spaces to exist in the certificate file list
|
||||
# - Add an additional check to pick up bad / non-existent certificates
|
||||
# - Add a check to look for the existence of a mail program. Error out if it's not present.
|
||||
# - Enable the TLS -servername extension by default - Juergen Knaack & Johan Denoyer
|
||||
#
|
||||
# Version 3.26
|
||||
# - Allow the certificate type (PEM, DER, NET) to be passed on the command line
|
||||
#
|
||||
# Version 3.25
|
||||
# - Check for "no route to host" errors -- Dan Doyle
|
||||
# - Set RETCODE to 3 (unknown) if a connection error occurs -- Dan Doyle
|
||||
# - Documentation fixes
|
||||
#
|
||||
# Version 3.24
|
||||
# - Utilize the -clcerts option to limit the results to client certificates - Eitan Katznelson
|
||||
#
|
||||
# Version 3.23
|
||||
# - Fixed typo in date2julian routine -- Ken Cook
|
||||
#
|
||||
# Version 3.22
|
||||
# - Change the validation option to "-V"
|
||||
# - Add a "-v" option to specify a specific protocol version (ssl2, ssl3 or tls)
|
||||
#
|
||||
# Version 3.21
|
||||
# - Adjust e-mail checking to avoid exiting if notifications aren't enabled -- Nick Anderson
|
||||
# - Added the number of days until expiration to the Nagios output -- Nick Anderson
|
||||
#
|
||||
# Version 3.20
|
||||
# - Fixed a bug in certificate length checking -- Tim Nowaczyk
|
||||
#
|
||||
# Version 3.19
|
||||
# - Added check to verify the certificate retrieved is valid
|
||||
#
|
||||
# Version 3.18
|
||||
# - Add support for connecting to FTP servers -- Paul A Sand
|
||||
#
|
||||
# Version 3.17
|
||||
# - Add support for connecting to imap servers -- Joerg Pareigis
|
||||
#
|
||||
# Version 3.16
|
||||
# - Add support for connecting to the mail sbmission port -- Luis E. Munoz
|
||||
#
|
||||
# Version 3.15
|
||||
# - Adjusted the file checking logic to use the correct certificate -- Maciej Szudejko
|
||||
# - Add sbin to the default search paths for OpenBSD compatibility -- Alex Popov
|
||||
# - Use cut instead of substring processing to ensure compatibility -- Alex Popov
|
||||
#
|
||||
# Version 3.14
|
||||
# - Fixed the Common Name parser to handle DN's where the CN is not the last item
|
||||
# eg. EmailAddr -- Jason Brothers
|
||||
# - Added the ability to grab the serial number -- Jason Brothers
|
||||
# - Added the "-b" option to print results without a header -- Jason Brothers
|
||||
# - Added the "-v" option for certificate validation -- Jason Brothers
|
||||
#
|
||||
# Version 3.13
|
||||
# - Updated the subject line to include the hostname as well as
|
||||
# the common name embedded in the X509 certificate (if it's
|
||||
# available) -- idea proposed by Mike Burns
|
||||
#
|
||||
# Version 3.12
|
||||
# - Updated the license to allow redistribution and modification
|
||||
#
|
||||
# Version 3.11
|
||||
# - Added ability to comment out lines in files passed
|
||||
# to the "-f" option -- Brett Stauner
|
||||
# - Fixed comment next to file processing logic
|
||||
#
|
||||
# Version 3.10
|
||||
# - Fixed POP3 port -- Simon Matter
|
||||
#
|
||||
# Version 3.9
|
||||
# - Switched binary location logic to use which utility
|
||||
#
|
||||
# Version 3.8
|
||||
# - Fixed display on 80 column displays
|
||||
# - Cleaned up the formatting
|
||||
#
|
||||
# Version 3.7
|
||||
# - Fixed bug in NAGIOS tests -- Ben Allen
|
||||
#
|
||||
# Version 3.6
|
||||
# - Added support for certificates stored in PKCS#12 databases -- Ken Gallo
|
||||
# - Cleaned up comments
|
||||
# - Adjusted variables to be more consistent
|
||||
#
|
||||
# Version 3.5
|
||||
# - Added support for NAGIOS -- Quanah Gibson-Mount
|
||||
# - Added additional checks for mail -- Quanah Gibson-Mount
|
||||
# - Convert tabs to spaces -- Quanah Gibson-Mount
|
||||
# - Cleaned up usage() routine
|
||||
# - Added additional checks for openssl
|
||||
#
|
||||
# Version 3.4
|
||||
# - Added a missing "{" to line 364 -- Ken Gallo
|
||||
# - Move mktemp to the start of the main body to avoid errors
|
||||
# - Adjusted default binary paths to make sure the script just works
|
||||
# w/ Solaris, BSD and Linux hosts
|
||||
#
|
||||
# Version 3.3
|
||||
# - Added common name from X.509 certificate file to E-mail body / header -- Doug Curtis
|
||||
# - Fixed several documentation errors
|
||||
# - Use mktemp to create temporary files
|
||||
# - Convert printf, sed and awk to variables
|
||||
# - Check for printf, sed, awk and mktemp binaries
|
||||
# - Add additional logic to make sure mktemp returned a valid temporary file
|
||||
#
|
||||
# Version 3.2
|
||||
# - Added option to list certificates in the file passed to "-f".
|
||||
#
|
||||
# Version 3.1
|
||||
# - Added handling for starttls for smtp -- Marco Amrein
|
||||
# - Added handling for starttls for pop3 (without s) -- Marco Amrein
|
||||
# - Removed extra spacing at end of script
|
||||
#
|
||||
# Version 3.0
|
||||
# - Added "-i" option to print certificate issuer
|
||||
# - Removed $0 from Subject line of outbound e-mails
|
||||
# - Fixed some typographical errors
|
||||
# - Removed redundant "-b" option
|
||||
#
|
||||
# Version 2.0
|
||||
# - Fixed an issue with e-mails formatting incorrectly
|
||||
# - Added additional space to host column -- Darren-Perot Spruell
|
||||
# - Replaced GNU date dependency with CHRIS F. A. JOHNSON's
|
||||
# date2julian shell function. This routine can be found on
|
||||
# page 170 of Chris's book "Shell Scripting Recipes: A
|
||||
# Problem-Solution Approach," ISBN #1590594711. Julian function
|
||||
# was created based on a post to comp.unix.shell by Tapani Tarvainen.
|
||||
# - Cleaned up function descriptions
|
||||
# - Removed several lines of redundant code
|
||||
# - Adjusted the help message
|
||||
#
|
||||
# Version 1.1
|
||||
# - Added "-c" flag to report expiration status of a PEM encoded
|
||||
# certificate -- Hampus Lundqvist
|
||||
# - Updated the prints messages to display the reason a connection
|
||||
# failed (connection refused, connection timeout, bad cert, etc)
|
||||
# - Updated the GNU date checking routines
|
||||
# - Added checks for each binary required
|
||||
# - Added checks for connection timeouts
|
||||
# - Added checks for GNU date
|
||||
# - Added a "-h" option
|
||||
# - Cleaned up the documentation
|
||||
#
|
||||
# Version 1.0
|
||||
# Initial Release
|
||||
#
|
||||
# Last Updated: 12-12-2016
|
||||
#
|
||||
# Purpose:
|
||||
# ssl-cert-check checks to see if a digital certificate in X.509 format
|
||||
# has expired. ssl-cert-check can be run in interactive and batch mode,
|
||||
# and provides facilities to alarm if a certificate is about to expire.
|
||||
#
|
||||
# License:
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# Requirements:
|
||||
# Requires openssl
|
||||
#
|
||||
# Installation:
|
||||
# Copy the shell script to a suitable location
|
||||
#
|
||||
# Tested platforms:
|
||||
# -- Solaris 9 using /bin/bash
|
||||
# -- Solaris 10 using /bin/bash
|
||||
# -- OS X 10.4.2 using /bin/bash
|
||||
# -- OpenBSD using /bin/sh
|
||||
# -- FreeBSD using /bin/sh
|
||||
# -- Centos Linux 3, 4, 5 & 6 using /bin/bash
|
||||
# -- Redhat Enterprise Linux 3, 4, 5 & 6 using /bin/bash
|
||||
# -- Gentoo using /bin/bash
|
||||
#
|
||||
# Usage:
|
||||
# Refer to the usage() sub-routine, or invoke ssl-cert-check
|
||||
# with the "-h" option.
|
||||
#
|
||||
# Examples:
|
||||
# Please refer to the following site for documentation and examples:
|
||||
# http://prefetch.net/articles/checkcertificate.html
|
||||
|
||||
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sfw/bin
|
||||
export PATH
|
||||
|
||||
# Who to page when an expired certificate is detected (cmdline: -e)
|
||||
ADMIN="david@sc"
|
||||
ADMIN="root"
|
||||
|
||||
# Email sender address for alarm notifications
|
||||
SENDER="iDS-CertChecker@scity.us"
|
||||
SENDER="postmaster@localhost.localdomain"
|
||||
|
||||
# Number of days in the warning threshhold (cmdline: -x)
|
||||
WARNDAYS=30
|
||||
21
ssl-cert-check/ssldomains
Normal file
21
ssl-cert-check/ssldomains
Normal file
@@ -0,0 +1,21 @@
|
||||
cloud.schroedercity.com 443
|
||||
dns.scity.us 443
|
||||
dyndns.scity.us 443
|
||||
git.schroedercity.com 443
|
||||
go.scity.us 443
|
||||
mail.scity.us 443
|
||||
media.scity.us 443
|
||||
mysql.scity.us 443
|
||||
pma.scity.us 443
|
||||
plex.scity.us 32400
|
||||
plex.schroedercity.com 443
|
||||
pwd.schroedercity.com 443
|
||||
status.scity.us 443
|
||||
statusint.scity.us 443
|
||||
stdiscosrv.scity.us 443
|
||||
unifistats.scity.us 443
|
||||
vcenter.scity.us 443
|
||||
vpn.scity.us 4433
|
||||
wdns.scity.us 443
|
||||
www.schroedercity.com 443
|
||||
www.scity.us 443
|
||||
@@ -1,3 +0,0 @@
|
||||
cloud.schroedercity.com 443
|
||||
git.schroedercity.com 443
|
||||
www.schroedercity.com 443
|
||||
146
templates/haproxy.config
Executable file
146
templates/haproxy.config
Executable file
@@ -0,0 +1,146 @@
|
||||
global
|
||||
pidfile /var/run/haproxy.pid
|
||||
daemon
|
||||
user haproxy
|
||||
group haproxy
|
||||
stats socket /var/run/haproxy.socket user haproxy group haproxy mode 600 level admin
|
||||
node haproxy_%NIP%
|
||||
description haproxy server
|
||||
|
||||
#* Performance Tuning
|
||||
maxconn 8192
|
||||
spread-checks 3
|
||||
quiet
|
||||
defaults
|
||||
#log global
|
||||
mode tcp
|
||||
option dontlognull
|
||||
option tcp-smart-accept
|
||||
option tcp-smart-connect
|
||||
#option dontlog-normal
|
||||
retries 3
|
||||
option redispatch
|
||||
maxconn 8192
|
||||
timeout check 3500ms
|
||||
timeout queue 3500ms
|
||||
timeout connect 3500ms
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
|
||||
userlist STATSUSERS
|
||||
group admin users admin
|
||||
user admin insecure-password Dc$@1910
|
||||
user stats insecure-password Dc$@1910
|
||||
|
||||
listen admin_page
|
||||
bind *:9600
|
||||
mode http
|
||||
stats enable
|
||||
stats refresh 60s
|
||||
stats uri /
|
||||
acl AuthOkay_ReadOnly http_auth(STATSUSERS)
|
||||
acl AuthOkay_Admin http_auth_group(STATSUSERS) admin
|
||||
stats http-request auth realm admin_page unless AuthOkay_ReadOnly
|
||||
# stats admin if AuthOkay_Admin
|
||||
|
||||
listen MySQL_3307_rw
|
||||
bind *:3307
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
server 10.5.10.51 10.5.10.51:3306 check
|
||||
server 10.5.10.52 10.5.10.52:3306 check backup
|
||||
server 10.5.10.53 10.5.10.53:3306 check backup
|
||||
|
||||
|
||||
listen MySQL_3308_ro
|
||||
bind *:3308
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
server 10.5.10.51 10.5.10.51:3306 check
|
||||
server 10.5.10.52 10.5.10.52:3306 check
|
||||
server 10.5.10.53 10.5.10.53:3306 check backup
|
||||
|
||||
listen NGINX_http
|
||||
bind *:80
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
# tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
cookie SERVERUSED insert indirect nocache
|
||||
server 10.5.10.121 10.5.10.121:80 cookie s1 check port 80 send-proxy
|
||||
server 10.5.10.122 10.5.10.122:80 cookie s2 check port 80 send-proxy
|
||||
server 10.5.10.123 10.5.10.123:80 cookie s3 check port 80 send-proxy backup
|
||||
|
||||
listen NGINX_https
|
||||
bind *:443
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
# tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
cookie SERVERUSED insert indirect nocache
|
||||
server 10.5.10.121 10.5.10.121:443 cookie s1 check port 443 send-proxy
|
||||
server 10.5.10.122 10.5.10.122:443 cookie s2 check port 443 send-proxy
|
||||
server 10.5.10.123 10.5.10.123:443 cookie s3 check port 443 send-proxy backup
|
||||
|
||||
listen Gitea
|
||||
bind *:3000
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
# tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
cookie SERVERUSED insert indirect nocache
|
||||
server 10.5.10.121 10.5.10.121:3000 cookie s1 check port 3000
|
||||
server 10.5.10.122 10.5.10.122:3000 cookie s2 check port 3000 backup
|
||||
server 10.5.10.123 10.5.10.123:3000 cookie s3 check port 3000 backup
|
||||
|
||||
listen Nextcloud
|
||||
bind *:3001
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
# tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
cookie SERVERUSED insert indirect nocache
|
||||
server 10.5.10.42 10.5.10.42:443 cookie s1 check port 443 send-proxy
|
||||
server 10.5.10.43 10.5.10.43:443 cookie s2 check port 443 send-proxy backup
|
||||
|
||||
listen Maxscale_rw
|
||||
bind *:3309
|
||||
mode tcp
|
||||
timeout client 10800s
|
||||
timeout server 10800s
|
||||
tcp-check expect string is\ running
|
||||
balance leastconn
|
||||
option tcp-check
|
||||
# option allbackups
|
||||
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
|
||||
server 10.5.10.51 10.5.10.51:4008 check
|
||||
server 10.5.10.52 10.5.10.52:4008 check backup
|
||||
# server 10.5.10.53 10.5.10.53:4008 check backup
|
||||
32
templates/keepalive.config
Executable file
32
templates/keepalive.config
Executable file
@@ -0,0 +1,32 @@
|
||||
#haproxy - You can add more types manually after this.
|
||||
|
||||
vrrp_script chk_haproxy {
|
||||
script "killall -0 haproxy" # verify the pid existance
|
||||
interval 2 # check every 2 seconds
|
||||
weight 2 # add 2 points of prio if OK
|
||||
}
|
||||
vrrp_instance VI_HAPROXY {
|
||||
interface ens192 # interface to monitor
|
||||
state MASTER
|
||||
virtual_router_id 51 # Assign one ID for this route
|
||||
priority 104
|
||||
unicast_src_ip 10.5.10.51
|
||||
unicast_peer {
|
||||
10.5.10.52
|
||||
10.5.10.53
|
||||
10.5.10.120
|
||||
10.5.10.121
|
||||
|
||||
}
|
||||
virtual_ipaddress {
|
||||
10.5.10.56 # the virtual IP
|
||||
}
|
||||
track_script {
|
||||
chk_haproxy
|
||||
}
|
||||
# notify /usr/local/bin/notify_keepalived.sh
|
||||
}
|
||||
|
||||
# DO NOT REMOVE THE NEXT LINE
|
||||
#@S9S_NEXT_SECTION@
|
||||
|
||||
31
templates/nginx.proxy.site
Normal file
31
templates/nginx.proxy.site
Normal file
@@ -0,0 +1,31 @@
|
||||
server {
|
||||
set $forward_scheme <<PROXY_SCHEME>>;
|
||||
set $server "<<PROXY_IP>>";
|
||||
set $port <<PROXY_PORT>>;
|
||||
|
||||
listen 80;
|
||||
listen 443 ssl http2;
|
||||
|
||||
server_name <<SERVER_NAME>>;
|
||||
|
||||
<<SECURE>>
|
||||
|
||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||
include conf.d/include/ssl-ciphers.conf;
|
||||
#ssl_certificate /opt/lb-data/letsencrypt/live/<<MAIN_SITE>>/fullchain.pem;
|
||||
#ssl_certificate_key /opt/lb-data/letsencrypt/live/<<MAIN_SITE>>/privkey.pem;
|
||||
|
||||
access_log /var/log/nginx/<<MAIN_SITE>>.proxy.log proxy;
|
||||
error_log /var/log/nginx/<<MAIN_SITE>>.error.log warn;
|
||||
|
||||
<<EXPLOITS>>
|
||||
<<WEBSOCKET>>
|
||||
<<HSTS>>
|
||||
|
||||
location / {
|
||||
<<WEBSOCKET>>
|
||||
<<HSTS>>
|
||||
include conf.d/include/force-ssl.conf;
|
||||
include conf.d/include/proxy.conf;
|
||||
}
|
||||
}
|
||||
24
templates/nginx.site
Executable file
24
templates/nginx.site
Executable file
@@ -0,0 +1,24 @@
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
server_name <<HOSTNAME>>;
|
||||
set $base <<HOSTNAME>>;
|
||||
root $base/public_html;
|
||||
|
||||
access_log /var/log/nginx/<<HOSTNAME>>-access.log;
|
||||
error_log /var/log/nginx/<<HOSTNAME>>-error.log warn;
|
||||
|
||||
index index.php index.html index.htm;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||
include conf.d/include/php_fastcgi.conf;
|
||||
}
|
||||
|
||||
include conf.d/include/general.conf;
|
||||
}
|
||||
31
templates/nginx.ssl.site
Executable file
31
templates/nginx.ssl.site
Executable file
@@ -0,0 +1,31 @@
|
||||
server {
|
||||
listen 80;
|
||||
listen 443 ssl http2;
|
||||
|
||||
server_name <<HOSTNAME>>;
|
||||
set $base <<HOSTNAME>>;
|
||||
root $base/public_html;
|
||||
|
||||
access_log /var/log/nginx/<<HOSTNAME>>-access.log;
|
||||
error_log /var/log/nginx/<<HOSTNAME>>-error.log warn;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/<<HOSTNAME>>/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/<<HOSTNAME>>/privkey.pem;
|
||||
include conf.d/include/ssl-ciphers.conf;
|
||||
|
||||
index index.php index.html index.htm;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
include conf.d/include/force-ssl.conf;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||
include conf.d/include/php_fastcgi.conf;
|
||||
}
|
||||
|
||||
include conf.d/include/general.conf;
|
||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
||||
}
|
||||
17
tmp-logrotate
Normal file
17
tmp-logrotate
Normal file
@@ -0,0 +1,17 @@
|
||||
su root syslog
|
||||
|
||||
/var/log/btmp {
|
||||
missingok
|
||||
daily
|
||||
create 0660 root utmp
|
||||
rotate 1
|
||||
maxsize 100k
|
||||
}
|
||||
|
||||
/var/log/wtmp {
|
||||
size 10M
|
||||
create 0664 root utmp
|
||||
rotate 3
|
||||
compress
|
||||
daily
|
||||
}
|
||||
Reference in New Issue
Block a user