├── .DS_Store ├── DB └── Adminer │ └── index.php ├── LICENSE ├── home └── demo │ ├── ssl │ ├── server.crt │ └── server.key │ └── public_html │ ├── index.html │ ├── ocp.php │ └── tz.php ├── keys ├── RPM-GPG-KEY-remi ├── nginx_signing.key ├── RPM-GPG-KEY-litespeed └── RPM-GPG-KEY-mysql ├── conf ├── vhosts │ ├── LLStack-demo.xml.bak │ └── LLStack-demo.xml ├── llstack.xml └── httpd_config.xml ├── Readme.md ├── vhost.sh ├── install-appnode.sh └── install.sh /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ivmm/LLStack/HEAD/.DS_Store -------------------------------------------------------------------------------- /DB/Adminer/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ivmm/LLStack/HEAD/DB/Adminer/index.php -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 MaiCong 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /home/demo/ssl/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDmjCCAoICCQDXpBwgyLMg8TANBgkqhkiG9w0BAQsFADCBjjELMAkGA1UEBhMC 3 | Q04xEDAOBgNVBAgMB0JlaWppbmcxEDAOBgNVBAcMB0JlaWppbmcxEDAOBgNVBAoM 4 | B0xMU3RhY2sxDTALBgNVBAsMBERlbW8xGDAWBgNVBAMMD3d3dy5sbHN0YWNrLmNv 5 | bTEgMB4GCSqGSIb3DQEJARYRYWRtaW5AbGxzdGFjay5jb20wHhcNMTkwMjA4MDgy 6 | NzA2WhcNMjkwMjA1MDgyNzA2WjCBjjELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0Jl 7 | aWppbmcxEDAOBgNVBAcMB0JlaWppbmcxEDAOBgNVBAoMB0xMU3RhY2sxDTALBgNV 8 | BAsMBERlbW8xGDAWBgNVBAMMD3d3dy5sbHN0YWNrLmNvbTEgMB4GCSqGSIb3DQEJ 9 | ARYRYWRtaW5AbGxzdGFjay5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK 10 | AoIBAQDMktA3jM5VaXGUeuafDptaEKxgW4cYY4MRCOKFBjQAgxaAyBcFoBwF2Dob 11 | 8P/rEVap7URwlN8PmyMQ+EWj70SeIFT9VyxH7hoHm8qFSeUZHBBD+rUtNNA9oxNE 12 | mciyrKC9AYKg6UYJ/pQ7QnWssVmxzLy1x7X4uJcMWS2F9Wvf77uT2Z2YlJ3Iiwig 13 | c8yD0bxK3JsWaYRWIfV9QOljNhhShBs2D1KhgBMH+3ToV3SobgQ06KmpXVqEOp6j 14 | 47M+0hS23t1Kv5KTQpREDpkzfOdQ/rSQu971lzNbmjcHvvPJRcUfCGHTuVik4pMI 15 | k/Ouj2qSr1kfKy0v0Lygk/LZjTGfAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAMbd 16 | vmuAcsPzw+i8u42mKRNAKl+zC+4CWqvDuVfi9b8uDw4kmHezbRW3vUjU4X2vIyQA 17 | dIvD+0SzYWcfC25W4NIREOmDcEGuHmKrvemB4LfcKx7Pa1zZCjWgGdvJ7eELmXC3 18 | +vyEWM+ZbQTCbgKIPZSuum5UA7BkwTmN5d5Wgq8kINmdnLbKlkd953Xf4OcU2gYj 19 | MnnjyUGwkGaD0HsfT7bZ4JRXbBaPJBNfyFKvlwPQB0mB4RuG6eUPLoioSKvIDOrW 20 | a/3lA8BMuXB+tRQf5vr3p0bOZNkY0JVD0VDxzwjflOL6WY61fP3OCe+M5yl35fWP 21 | +IAXXHcZlXjK31X9hHA= 22 | -----END CERTIFICATE----- 23 | -------------------------------------------------------------------------------- /keys/RPM-GPG-KEY-remi: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Version: GnuPG v1.4.7 (GNU/Linux) 3 | 4 | mQGiBEJny1wRBACRnbQgZ6qLmJSuGvi/EwrRL6aW610BbdpLQRL3dnwy5wI5t9T3 5 | /JEiEJ7GTvAwfiisEHifMfk2sRlWRf2EDQFttHyrrYXfY5L6UAF2IxixK5FL7PWA 6 | /2a7tkw1IbCbt4IGG0aZJ6/xgQejrOLi4ewniqWuXCc+tLuWBZrGpE2QfwCggZ+L 7 | 0e6KPTHMP97T4xV81e3Ba5MD/3NwOQh0pVvZlW66Em8IJnBgM+eQh7pl4xq7nVOh 8 | dEMJwVU0wDRKkXqQVghOxALOSAMapj5mDppEDzGLZHZNSRcvGEs2iPwo9vmY+Qhp 9 | AyEBzE4blNR8pwPtAwL0W3cBKUx7ZhqmHr2FbNGYNO/hP4tO2ochCn5CxSwAfN1B 10 | Qs5pBACOkTZMNC7CLsSUT5P4+64t04x/STlAFczEBcJBLF1T16oItDITJmAsPxbY 11 | iee6JRfXmZKqmDP04fRdboWMcRjfDfCciSdIeGqP7vMcO25bDZB6x6++fOcmQpyD 12 | 1Fag3ZUq2yojgXWqVrgFHs/HB3QE7UQkykNp1fjQGbKK+5mWTrQkUmVtaSBDb2xs 13 | ZXQgPFJQTVNARmFtaWxsZUNvbGxldC5jb20+iGAEExECACAFAkZ+MYoCGwMGCwkI 14 | BwMCBBUCCAMEFgIDAQIeAQIXgAAKCRAATm9HAPl/Vv/UAJ9EL8ioMTsz/2EPbNuQ 15 | MP5Xx/qPLACeK5rk2hb8VFubnEsbVxnxfxatGZ25AQ0EQmfLXRAEANwGvY+mIZzj 16 | C1L5Nm2LbSGZNTN3NMbPFoqlMfmym8XFDXbdqjAHutGYEZH/PxRI6GC8YW5YK4E0 17 | HoBAH0b0F97JQEkKquahCakj0P5mGuH6Q8gDOfi6pHimnsSAGf+D+6ZwAn8bHnAa 18 | o+HVmEITYi6s+Csrs+saYUcjhu9zhyBfAAMFA/9Rmfj9/URdHfD1u0RXuvFCaeOw 19 | CYfH2/nvkx+bAcSIcbVm+tShA66ybdZ/gNnkFQKyGD9O8unSXqiELGcP8pcHTHsv 20 | JzdD1k8DhdFNhux/WPRwbo/es6QcpIPa2JPjBCzfOTn9GXVdT4pn5tLG2gHayudK 21 | 8Sj1OI2vqGLMQzhxw4hJBBgRAgAJBQJCZ8tdAhsMAAoJEABOb0cA+X9WcSAAn11i 22 | gC5ns/82kSprzBOU0BNwUeXZAJ0cvNmY7rvbyiJydyLsSxh/la6HKw== 23 | =6Rbg 24 | -----END PGP PUBLIC KEY BLOCK----- 25 | -------------------------------------------------------------------------------- /keys/nginx_signing.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Version: GnuPG v2.0.22 (GNU/Linux) 3 | 4 | mQENBE5OMmIBCAD+FPYKGriGGf7NqwKfWC83cBV01gabgVWQmZbMcFzeW+hMsgxH 5 | W6iimD0RsfZ9oEbfJCPG0CRSZ7ppq5pKamYs2+EJ8Q2ysOFHHwpGrA2C8zyNAs4I 6 | QxnZZIbETgcSwFtDun0XiqPwPZgyuXVm9PAbLZRbfBzm8wR/3SWygqZBBLdQk5TE 7 | fDR+Eny/M1RVR4xClECONF9UBB2ejFdI1LD45APbP2hsN/piFByU1t7yK2gpFyRt 8 | 97WzGHn9MV5/TL7AmRPM4pcr3JacmtCnxXeCZ8nLqedoSuHFuhwyDnlAbu8I16O5 9 | XRrfzhrHRJFM1JnIiGmzZi6zBvH0ItfyX6ttABEBAAG0KW5naW54IHNpZ25pbmcg 10 | a2V5IDxzaWduaW5nLWtleUBuZ2lueC5jb20+iQE+BBMBAgAoAhsDBgsJCAcDAgYV 11 | CAIJCgsEFgIDAQIeAQIXgAUCV2K1+AUJGB4fQQAKCRCr9b2Ce9m/YloaB/9XGrol 12 | kocm7l/tsVjaBQCteXKuwsm4XhCuAQ6YAwA1L1UheGOG/aa2xJvrXE8X32tgcTjr 13 | KoYoXWcdxaFjlXGTt6jV85qRguUzvMOxxSEM2Dn115etN9piPl0Zz+4rkx8+2vJG 14 | F+eMlruPXg/zd88NvyLq5gGHEsFRBMVufYmHtNfcp4okC1klWiRIRSdp4QY1wdrN 15 | 1O+/oCTl8Bzy6hcHjLIq3aoumcLxMjtBoclc/5OTioLDwSDfVx7rWyfRhcBzVbwD 16 | oe/PD08AoAA6fxXvWjSxy+dGhEaXoTHjkCbz/l6NxrK3JFyauDgU4K4MytsZ1HDi 17 | MgMW8hZXxszoICTTiQEcBBABAgAGBQJOTkelAAoJEKZP1bF62zmo79oH/1XDb29S 18 | YtWp+MTJTPFEwlWRiyRuDXy3wBd/BpwBRIWfWzMs1gnCjNjk0EVBVGa2grvy9Jtx 19 | JKMd6l/PWXVucSt+U/+GO8rBkw14SdhqxaS2l14v6gyMeUrSbY3XfToGfwHC4sa/ 20 | Thn8X4jFaQ2XN5dAIzJGU1s5JA0tjEzUwCnmrKmyMlXZaoQVrmORGjCuH0I0aAFk 21 | RS0UtnB9HPpxhGVbs24xXZQnZDNbUQeulFxS4uP3OLDBAeCHl+v4t/uotIad8v6J 22 | SO93vc1evIje6lguE81HHmJn9noxPItvOvSMb2yPsE8mH4cJHRTFNSEhPW6ghmlf 23 | Wa9ZwiVX5igxcvaIRgQQEQIABgUCTk5b0gAKCRDs8OkLLBcgg1G+AKCnacLb/+W6 24 | cflirUIExgZdUJqoogCeNPVwXiHEIVqithAM1pdY/gcaQZmIRgQQEQIABgUCTk5f 25 | YQAKCRCpN2E5pSTFPnNWAJ9gUozyiS+9jf2rJvqmJSeWuCgVRwCcCUFhXRCpQO2Y 26 | Va3l3WuB+rgKjsQ= 27 | =EWWI 28 | -----END PGP PUBLIC KEY BLOCK----- 29 | -------------------------------------------------------------------------------- /home/demo/ssl/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAzJLQN4zOVWlxlHrmnw6bWhCsYFuHGGODEQjihQY0AIMWgMgX 3 | BaAcBdg6G/D/6xFWqe1EcJTfD5sjEPhFo+9EniBU/VcsR+4aB5vKhUnlGRwQQ/q1 4 | LTTQPaMTRJnIsqygvQGCoOlGCf6UO0J1rLFZscy8tce1+LiXDFkthfVr3++7k9md 5 | mJSdyIsIoHPMg9G8StybFmmEViH1fUDpYzYYUoQbNg9SoYATB/t06Fd0qG4ENOip 6 | qV1ahDqeo+OzPtIUtt7dSr+Sk0KURA6ZM3znUP60kLve9ZczW5o3B77zyUXFHwhh 7 | 07lYpOKTCJPzro9qkq9ZHystL9C8oJPy2Y0xnwIDAQABAoIBAQC45HgLvNc/mu1s 8 | pSeK2kjOPgONkyumf0oWO1F/qPuW+uN7wVwNWYf6QFNErayfaCxLqIYSunpgQHaQ 9 | /9LxN29s+wvVbNQ4rpoYBlYj4YWODC8nQZA+K12KV7kyZ0tdMWiVaqgFhtAmeFDA 10 | vnBchG3spH5qTPXKtgrOvkrGp+m3mfTQUZ5A7p9wafAxpA9Y0dOmryr8JJv8toya 11 | p88DSR4ve6C+ZlShloKUAwb5S9blyqhVXDWnRjKNTPQGAKanV1h4Ih4g+qEbhzT4 12 | P4zAhuscQeMkOa9mXnzBcn+mBX+rg3730VxK/fKnsaS7Clyv7QKp8wQiYshp3wzA 13 | My1aMpQBAoGBAPz0uceL7gToK5NGFSe7t1fWywWZnRQwIPBhZcqMbgTHJaXmXY9N 14 | X7gj8tuWH7sCslrdVwJGDsTdWn35jxBXwiWtG39k5LnrURQYViE09TL+rHG7GcFD 15 | OJsjlRCI2ndwhvbfv0h+C0n4iHC/0JIKUdGSQDTibb2jpqXVrJS4yf+RAoGBAM8J 16 | CYGaoggTpJuLPdyIED4JkA4te7PpWM1vt8+ubk+ZpBfYB/tyFxIY+spL6abmc9Ik 17 | PRpNnHnoKC2VfucNPiDCss/8Jy5O+mtKDwZyV/B4THR1hqWmI4aEKNP18x8Odm10 18 | djzBlOVvNAv2aEZroez9tnICe/iwpPF0MA6Lq+YvAoGAL1vqRG/wWj7VmbcvUscU 19 | Zn+ydxPxkswH/rldg3STTJW0eMEOlzvXRfSFDZOn0S2KEvUJy0UukrEWtis5G8gy 20 | czdbxJgxMpXaEjcUORdfKPMBejGbetGJEZKx3+yfamlI+4OcnofquSis8t8Wv6Dq 21 | /J+zIbOa9DxlgPrmWtnWB+ECgYBD6qgGry52TdNS/1OU08HYSBTMwdjxxRvPkNWQ 22 | uJ0RWcp90+2Sa/PriOxEjrCggrr99cthpJIvX5xGj+Mocqyt3JECL6q+w0PdDFdv 23 | evUkOqKCFcfM8Xp390TZe7Z8uqbY8zqSZcKtnVRKlFPSvh5Je1VtgykeBPynBMF7 24 | FBCZGwKBgQCdlcX07MCX63hwN19osG0v71pyfeuCw3v7twPIHoAOgMhW05jrXtrk 25 | tYigNHrou6df45xZ2opLl99MRuUNdpUHj2K/T0ZfO9moPQ6ORv4cO/2QjBqI96IX 26 | qcqaDAz+ZcArbOa1oYpQ6hKpL8Kj3v4v5mdrSek44sYfWZIzUqAfCQ== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /keys/RPM-GPG-KEY-litespeed: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Version: GnuPG v1.4.5 (GNU/Linux) 3 | Comment: LiteSpeed Tech GnuPG Key 4 | Comment: http://www.litespeedtech.com 5 | 6 | mQGiBE9XwX4RBACjx8WNDIBaeguJkv3+p1VHj43N2efnHQyfSrRvXqMVe/g6B5tS 7 | G6HPQ0oOUUVLhiaq81EHoyCb7G3r1gplqYIJFBnc3vYEjlouHg91zS1rk5tLnuDt 8 | xH7Qa6jZKg87V+HcTN/GXgeIT/WQMllYBwPSJrSAYkVJsnLMIaXRpqXw4wCgk9QN 9 | VhVGpzjAnMzsyEN9dK7iGFcD/2vk6yWFCA1pC3TFZYRz31DCPzGiG0ol8UzPBlTt 10 | ObomXMBkMgbPpVXFdd87FVGu3ggqQ1/Fx4PvZ2doato+BinRnLlskMWtmQ356F/g 11 | 7Nj0l6zNYdoUsR7Sj6lY92mQA3gDmy9+BneFmVYCvJy+M4pyq2/uhpdNjuVZ9lo9 12 | RWiMBACcNXbMs8fIZOOdCdzd2483nQIU5DAKkFXVtt4oOJmlOYky1ViqPitS5Grv 13 | IErnwuEfpnTZNQ7vGusZM3MA/EgsyW/jfYtS+b4jbZpwP2IhpUMuk1DLfZ2kbY2E 14 | WSEuyL+Ltv5M+jAZJ4JxxWYsFKCDVCp1f/EUzg9qmo4OhLYYoLRCTGl0ZVNwZWVk 15 | IFRlY2ggSW5jLiAoTGl0ZVNwZWVkIEdudVBHIEtleSkgPGluZm9AbGl0ZXNwZWVk 16 | dGVjaC5jb20+iGAEExECACAFAk9XwX4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX 17 | gAAKCRA/b2JwgwhNDnAVAJ9If0Ddukq8r+AIBfxoogtVfhkbmQCePlj2WQGDT3Zd 18 | t0uRPR2GmHJUpvm5Ag0ET1fBgRAIAJd9QDjr1ew5nq5U7QcD/yvttY5Q8qaAZ2IC 19 | VzB9q4JaBHSLAlNbI0Wnjnpy1nLdrIq8o7vieTVmKMriXirvM5hb/QVZOwCXZkxV 20 | tZ2LdVMlw1jBcgY/OejGRTfIpze/ZvU3FblCaKxnfvoumIJoikL2DZW5CjY2DAqM 21 | YPT4XrwmQwTGDAenjWNo5R+qREn2yVmnxXqQSlUCOPEpMRayOpylVbTfIuDOJLlB 22 | 9M5+YbCt55CYt/WiRjAU72J99wFSFHozEWxN3788Wqk+nZ1iZObPH+zIFmQ+Hxu7 23 | X0t7ck8urnKYNbHAcltYJFMfeEN0u0ryjxmhP0uWcBzvYdr52w8AAwUIAIM10iTF 24 | wDlLGvVeAU4nSIxYIwAT5IAafPWlz10u3CTdtWuRBX3dixTapkwB1dsctzUI7rSj 25 | fYN7qbwCh91v9R1+dO4GRk32vDTKRWMezIWEi2bDhmWkG079RpA+FOG06pwAn36Y 26 | 5fP4RkFqR8fGZDHA+bmFiwm2LZ98drnxJqMOFrhHRHh2uHAubwPwLuj7PEc70bHw 27 | sK8Z/96+rE99N+7MS/apAYXBGxaN0iBK7j7mwwpfd0RpvckInS7BrjDYGpKzt8ZN 28 | TWKaMAjBIwc1cQyxoVGE1xy5v9tw8pR9MTSzH38miUQiZPdbSFENZaDi1Cbyf3gC 29 | A6fmRzbm1TFO3rKISQQYEQIACQUCT1fBgQIbDAAKCRA/b2JwgwhNDmoKAJ9PDNxj 30 | 42siG97x5czm0lMAT0cbOACeM59kD5QIVVCUCVES1L3pgh04smw= 31 | =BTpD 32 | -----END PGP PUBLIC KEY BLOCK----- 33 | -------------------------------------------------------------------------------- /conf/vhosts/LLStack-demo.xml.bak: -------------------------------------------------------------------------------- 1 | 2 | 3 | $VH_ROOT/public_html 4 | demo@llstack.com 5 | 1 6 | 7 | 8 | 1 9 | $VH_ROOT/logs/$VH_ROOT_errors.log 10 | ERROR 11 | 100M 12 | 13 | 14 | 0 15 | $VH_ROOT/logs/$VH_NAME.access.log 16 | 3 17 | 100M 18 | 30 19 | 1 20 | 21 | 22 | 23 | 0 24 | index.html, index.htm, index.php 25 | 26 | 27 | 28 | php 29 | lsapi 30 | lsphp73 31 | 32 | 33 | 34 | 1 35 | 36 | 37 | 38 | $VH_ROOT/cache 39 | 0 40 | 41 | 42 | 43 | 44 | lsapi 45 | lsphp73 46 |
uds://tmp/lshttpd/lsphp73.sock
47 | 35 48 | PHP_LSAPI_MAX_REQUESTS=5000 49 | PHP_LSAPI_CHILDREN=35 50 | 180 51 | 0 52 | 1 53 | 30 54 | 0 55 | 1 56 | /usr/bin/lsphp73 57 | 100 58 | 1 59 | 10 60 | 0 61 | 1024M 62 | 1024M 63 | 400 64 | 500 65 |
66 |
67 |
68 | -------------------------------------------------------------------------------- /conf/vhosts/LLStack-demo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $VH_ROOT/public_html 4 | demo@llstack.com 5 | 1 6 | 7 | 8 | 1 9 | $VH_ROOT/logs/$VH_ROOT_errors.log 10 | ERROR 11 | 100M 12 | 13 | 14 | 0 15 | $VH_ROOT/logs/$VH_NAME.access.log 16 | 3 17 | 100M 18 | 30 19 | 1 20 | 21 | 22 | 23 | 0 24 | index.html, index.htm, index.php 25 | 26 | 27 | 28 | php 29 | lsapi 30 | lsphp73 31 | 32 | 33 | 34 | 1 35 | 36 | 37 | 38 | $VH_ROOT/cache 39 | 0 40 | 41 | 42 | 43 | 44 | lsapi 45 | lsphp73 46 |
uds://tmp/lshttpd/lsphp73.sock
47 | 35 48 | PHP_LSAPI_MAX_REQUESTS=5000 49 | PHP_LSAPI_CHILDREN=35 50 | 180 51 | 0 52 | 1 53 | 30 54 | 0 55 | 1 56 | /usr/bin/lsphp73 57 | 100 58 | 1 59 | 10 60 | 0 61 | 1024M 62 | 1024M 63 | 400 64 | 500 65 |
66 |
67 | 68 | 69 | cgi 70 | /cgi-bin/ 71 | $VH_ROOT/cgi-bin/ 72 | 73 | 74 | 75 | 76 | 77 | 78 | off 79 | 80 | 81 |
82 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | ![](https://www.llstack.com/favicon.png) 2 | 3 | # 什么是 LLStack ? 4 | 5 | LLStack 全称是 “Linux LiteSpeed Stack”,即在 Linux 上安装 LiteSpeed + PHP + MySQL/MariaDB(可选)的高性能 Web 运行环境,特别适合运行 PHP 程序。 6 | 7 | 更多具体问题和安装教程请看:https://www.llstack.com/ 8 | 9 | # LiteSpeed 介绍 10 | 11 | LiteSpeed 即 LiteSpeed Web Server(简称 LSWS),是一款企业级商用 Web 服务软件,可以完美的 Apache HTTPD 兼容体验,.htaccess 规则可以直接兼容而不像 Nginx 需要重写,并兼容常用的mod扩展。得益于基于事件的架构优势,静态内容比Apache Httpd 快 5 倍 ,动态内容更是快 40 倍,HTTPS 访问快 3 倍并可以应用硬件加速器。 12 | 13 | 同时作为商业 Web 服务软件,也率先研究并落地最新的 Web 技术,在 HTTP/2 和 HTTP/3(QUIC) 上均是第一个应用的 Web 服务软件,可以直接无缝使用 Brotli、LSCahe 等新特性而无需像 Nginx 一样需要额外配置非官方的扩展并担心 API 兼容性问题。 14 | 15 | ## LiteSpeed 特性 16 | 17 | ### 更高性能 18 | 19 | LiteSpeed Web Server使用事件驱动的体系结构,Apache是基于流程的。LiteSpeed Web Server及其事件驱动架构,可为几乎没有进程的所有连接提供服务,从而节省资源。 20 | 21 | ### 更加安全 22 | 23 | 同时 LiteSpeed 也支持 mod_Security,可以轻松实现基础的 WAF 能力,在没有极高的防御需求的时候仅使用 LiteSpeed 则无需额外购买高昂的商业WAF。 同时针对一些 CC 和 DDOS 攻击,LiteSpeed 也有做好优化和应对策略,可以降低攻击造成的影响。 24 | 25 | ### 开箱即用 26 | 27 | 相比 Nginx、Apache 安装一些高性能扩展,如 PageSpeed,Brotli,或者和 Varnish 这样的内存级 Web 加速软件,一些协议的支持上如TLS 1.3、QUIC,搭配都需要一定的经验以及复杂的配置,而这些特性在 LiteSpeed 上都是开箱即用的。 28 | 29 | ### 可视化后台 30 | 31 | 不同于 Nginx、Apache HTTPD 黑底白字的配置文件,LiteSpeed 即可以通过编辑配置文件操作也可以通过可视化控制台进行操作,降低操作门槛。 32 | 33 | ### Apache 兼容 34 | 35 | 不仅仅是兼容 Apache HTTPD 的特性和扩展,LiteSpeed 可以直接读取 Apache HTTPD 配置文件并转化,并且在不停机条件下直接从 Apache HTTPD 上完成无缝迁移。 36 | 37 | **更多特性和 LiteSpeed 介绍请看:** [LiteSpeed 介绍页](https://www.llstack.com/zh/LiteSpeed/) 38 | 39 | # 安装 40 | 41 | **注意** 42 | 43 | LLStack 仅适用于 RHEL 7 系操作系统及其衍生版,RHEL7、CentOS7、OracleLinux7、CloudLinux 7等。 RHEL 8 系正在测试中。 44 | 45 | **安全组/防火墙** 46 | 47 | 安装前务必要根据教程开启服务器安全组和防火墙中LLStack所依赖的端口。 教程: [**安全组设置**](https://www.llstack.com/zh/others/Security-group.html) 48 | 49 | 安装完 LLStack 后防火墙的设置请参考: [**安全组设置**](https://www.llstack.com/zh/others/firewall.html) 50 | 51 | ## 轻量版 52 | 53 | LLStack 轻量版脚本只提供 LiteSpeed 的图形化面板,其他 PHP、MySQL(MariaDB)的管理全部使用软件默认的配置文件,配置较为复杂,适合有经验高手和不习惯面板的同学使用。当然,也会更加简洁高效,同时资源利用率和安全性也更高。 54 | 55 | **安装脚本:** 56 | 57 | ```bash 58 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/ivmm/LLStack/master/install.sh)" 2>&1 | tee llstack-all.log 59 | ``` 60 | 61 | [轻量版详细教程 →](https://www.llstack.com/zh/Lite/) 62 | 63 | ## 面板版 64 | 65 | 面板版是深度集成了非常好用且Web应用非强制性的 APPNode 面板而来的版本,常见的服务器组件如 PHP、MySQL、Redis、Memcached 都提供了图形化支持,同时也提供软件管家、防火墙、文件管理、备份管理等众多实用功能,适合新手使用,也适合有大量服务器运维的同学使用。 66 | 67 | **安装脚本:** 68 | 69 | ```bash 70 | INSTALL_AGENT=1 INIT_SWAPFILE=1 INSTALL_PKGS='php73' bash -c "$(curl -sS http://dl.appnode.com/install.sh)" 71 | yum install appnode-app-mysqld appnode-app-php 72 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/ivmm/LLStack/master/install-appnode.sh)" 2>&1 | tee llstack-all.log 73 | ``` 74 | 75 | [面板版详细教程 →](https://www.llstack.com/zh/panel/) 76 | 77 | -------------------------------------------------------------------------------- /conf/llstack.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | /var/www/vhosts/$VH_NAME/ 4 | $SERVER_ROOT/conf/$VH_NAME.xml 5 | 1 6 | 1 7 | 1 8 | 2 9 | 0 10 | 11 | $VH_ROOT/html/ 12 | 1 13 | 14 | 15 | 1 16 | 17 | 18 | 0 19 | $SERVER_ROOT/logs/$VH_NAME.access.log 20 | 100M 21 | 7 22 | 1 23 | 24 | 25 | 26 | 0 27 | index.html, index.php 28 | 0 29 | /_autoindex/default.php 30 | 31 | 32 | 33 | php 34 | lsapi 35 | $VH_NAME_lsphp 36 | 37 | 38 | 39 | 31 40 | .htaccess 41 | 42 | 43 | 1 44 | 45 | 46 | 47 | 0 48 | gif, jpeg, jpg 49 | 1 50 | 1 51 | 52 | 53 | * 54 | 55 | 56 | 57 | 7 58 | 59 | /var/www/vhosts/lscache/ 60 | 1 61 | 62 | 63 | 1 64 | 65 | 66 | 67 | 68 | lsapi 69 | $VH_NAME_lsphp 70 |
uds://tmp/lshttpd/$VH_NAME_lsphp.sock
71 | 35 72 | PHP_LSAPI_CHILDREN=35 73 | 60 74 | 0 75 | 0 76 | 1 77 | /usr/local/lsws/lsphp74/bin/lsphp 78 | 100 79 | 1 80 | -1 81 | 0 82 | 2047M 83 | 2047M 84 | 3000 85 | 4000 86 |
87 |
88 | 89 | 1 90 | 0 91 | 92 | RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot 93 | RewriteRule ^/nospider/ - [F] 94 | 95 | 96 | 97 | /root/.acme.sh/certs/$VH_NAME/$VH_NAME.key 98 | /root/.acme.sh/certs/$VH_NAME/fullchain.cer 99 | 1 100 | 101 | 102 | 0 103 | 0 104 | 105 | 106 | 0 107 | $VH_ROOT/awstats 108 | /awstats/ 109 | localhost 110 | 127.0.0.1 localhost 111 | 86400 112 | 0 113 | 114 |
115 |
116 | -------------------------------------------------------------------------------- /keys/RPM-GPG-KEY-mysql: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Version: GnuPG v1.4.9 (SunOS) 3 | 4 | mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3 5 | RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ 6 | fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3 7 | BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW 8 | hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV 9 | K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE 10 | kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI 11 | QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep 12 | rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q2TXlTUUwgUmVs 13 | ZWFzZSBFbmdpbmVlcmluZyA8bXlzcWwtYnVpbGRAb3NzLm9yYWNsZS5jb20+iGkE 14 | ExECACkCGyMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAIZAQUCUwHUZgUJGmbLywAK 15 | CRCMcY07UHLh9V+DAKCjS1gGwgVI/eut+5L+l2v3ybl+ZgCcD7ZoA341HtoroV3U 16 | 6xRD09fUgeq0O015U1FMIFBhY2thZ2Ugc2lnbmluZyBrZXkgKHd3dy5teXNxbC5j 17 | b20pIDxidWlsZEBteXNxbC5jb20+iG8EMBECAC8FAk53Pa0oHSBidWlsZEBteXNx 18 | bC5jb20gd2lsbCBzdG9wIHdvcmtpbmcgc29vbgAKCRCMcY07UHLh9bU9AJ9xDK0o 19 | xJFL9vTl9OSZC4lX0K9AzwCcCrS9cnJyz79eaRjL0s2r/CcljdyIZQQTEQIAHQUC 20 | R6yUtAUJDTBYqAULBwoDBAMVAwIDFgIBAheAABIJEIxxjTtQcuH1B2VHUEcAAQGu 21 | kgCffz4GUEjzXkOi71VcwgCxASTgbe0An34LPr1j9fCbrXWXO14msIADfb5piEwE 22 | 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 94 | AcOphrnJ 95 | =443I 96 | -----END PGP PUBLIC KEY BLOCK----- 97 | -------------------------------------------------------------------------------- /home/demo/public_html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LLStack 初始页面 - Powered by LLStack 7 | 8 | 27 | 28 | 29 | 30 | 31 |
32 |
33 |
34 |

35 |
服务器环境建设完成
36 |

37 |
38 |

此页面为 LLStack 初始默认页面。

39 |

看到本页面表示您的服务器环境已经生效,请尽快创建虚拟主机,并删除本示例主机。

40 |

服务器管理工具: sh /root/vhost.sh

41 |

环境Toolkit: 探针 OpCache phpMyAdmin

42 |

环境说明书: 进入 LLStack 官网查看更多教程

43 |
44 | 47 |
48 |
49 |
50 | 51 | 52 | -------------------------------------------------------------------------------- /conf/httpd_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $HOSTNAME 4 | 2 5 | nobody 6 | nobody 7 | 0 8 | / 9 | 0 10 | 120M 11 | /tmp/lshttpd/swap 12 | 1 13 | 0 14 | $SERVER_ROOT/conf/mime.properties 15 | 0 16 | 86400 17 | 1 18 | root@localhost 19 | 20 | 21 | $SERVER_ROOT/logs/error.log 22 | DEBUG 23 | 0 24 | 10M 25 | 1 26 | 1 27 | 28 | 29 | $SERVER_ROOT/logs/access.log 30 | 10M 31 | 30 32 | 0 33 | 34 | 35 | index.html, index.php 36 | 37 | 31 38 | .htaccess 39 | 40 | 41 | 1 42 | image/*=A604800, text/css=A604800, application/x-javascript=A604800, application/javascript=A604800,font/*=A604800,application/x-font-ttf=A604800 43 | 44 | 45 | 10000 46 | 10000 47 | 300 48 | 10000 49 | 5 50 | 0 51 | 0 52 | 8192 53 | 16380 54 | 500M 55 | 8K 56 | 500M 57 | 4096 58 | 20M 59 | 256K 60 | 40M 61 | 1 62 | 1 63 | 4 64 | 1 65 | text/*, application/x-javascript, application/javascript, application/xml, image/svg+xml, application/rss+xml 66 | 1 67 | 1 68 | 1 69 | 6 70 | 1M 71 | 300 72 | 73 | 74 | 1 75 | 76 | 77 | 78 | 1 79 | 0 80 | 000 81 | 000 82 | 83 | 84 | 0 85 | 0 86 | 0 87 | 0 88 | 10000 89 | 10000 90 | 15 91 | 300 92 | 93 | 94 | 200 95 | 11 96 | 10 97 | 0 98 | 300 99 | 600 100 | 1450M 101 | 1500M 102 | 1400 103 | 1450 104 | 105 | 106 | 0 107 | 0 108 | deny,log,status:403 109 | 1 110 | 111 | 112 | / 113 | /etc/* 114 | /dev/* 115 | $SERVER_ROOT/conf/* 116 | $SERVER_ROOT/admin/conf/* 117 | 118 | 119 | ALL 120 | 121 | 122 | 123 | 124 | /var/www/lscache/ 125 | 126 | 127 | 128 | native 129 | 35 130 | PHP_LSAPI_CHILDREN=35 131 | 60 132 | 0 133 | 1 134 | 0 135 | 60 136 | 2047M 137 | 2047M 138 | 1400 139 | 1500 140 | 141 | 142 | 5 143 | LSAPI_MAX_IDLE=60 144 | 180 145 | 0 146 | 60 147 | 0 148 | 50 149 | 1 150 | 3 151 | 2047M 152 | 2047M 153 | 400 154 | 500 155 | 156 | 157 | 158 | HTTP 159 |
*:80
160 | 0 161 |
162 | 163 | HTTPS 164 |
*:443
165 | 1 166 | 1 167 | /usr/local/lsws/admin/conf/webadmin.key 168 | /usr/local/lsws/admin/conf/webadmin.crt 169 |
170 |
171 | 172 | 173 | llstack 174 | $SERVER_ROOT/conf/templates/llstack.xml 175 | HTTP, HTTPS 176 | 177 | localhost 178 | *, localhost 179 | 180 | 181 | 182 | centralConfigLog 183 | $SERVER_ROOT/conf/templates/ccl.xml 184 | Default 185 | 186 | 187 | PHP_SuEXEC 188 | $SERVER_ROOT/conf/templates/phpsuexec.xml 189 | Default 190 | 191 | 192 | EasyRailsWithSuEXEC 193 | $SERVER_ROOT/conf/templates/rails.xml 194 | Default 195 | 196 | 197 |
198 | -------------------------------------------------------------------------------- /vhost.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # 4 | # CentOS 7 LLStack 5 | # Author: ivmm 6 | # Home: https://www.llstack.com 7 | # Blog: https://www.mf8.biz 8 | # 9 | # * LiteSpeed Enterprise Web Server 10 | # * MySQL 5.5/5.6/5.7/8.0(MariaDB 5.5/10.0/10.1/10.2/10.3) 11 | # * PHP 5.4/5.5/5.6/7.0/7.1/7.2/7.3 12 | # * phpMyAdmin(Adminer) 13 | # 14 | # https://github.com/ivmm/LLStack/ 15 | # 16 | # Usage: sh vhost.sh 17 | # 18 | 19 | # check root 20 | [ "$(id -g)" != '0' ] && die 'Script must be run as root.' 21 | 22 | clear 23 | echo "=====================================================================" 24 | echo -e "\033[32mLLStack for CentOS/RedHat 7\033[0m" 25 | echo "=====================================================================" 26 | echo -e "\033[32mA tool to auto-compile & install LiteSpeed+MySQL(MariaDB)+PHP on Linux\033[0m" 27 | echo "" 28 | echo -e "\033[32mFor more information please visit https://www.llstack.com/\033[0m" 29 | echo "=====================================================================" 30 | 31 | #Domain name 32 | domain="mf8.biz" 33 | echo "Please input domain:" 34 | read -p "(Default domain: mf8.biz):" domain 35 | if [ "$domain" = "" ]; then 36 | domain="mf8.biz" 37 | fi 38 | 39 | if [ ! -f "//usr/local/lsws/conf/vhosts/$domain.xml" ]; then 40 | echo "===========================" 41 | echo "domain=$domain" 42 | echo "===========================" 43 | else 44 | echo "===========================" 45 | echo "$domain is exist!" 46 | echo "===========================" 47 | exit 0 48 | fi 49 | 50 | #WebMaster's Email 51 | webmasteremail="admin@mf8.biz" 52 | echo "Please input The WebMaster's Email:" 53 | read -p "(Example: admin@mf8.biz):" webmasteremail 54 | if [ "$webmasteremail" = "" ]; then 55 | webmasteremail="admin@mf8.biz" 56 | fi 57 | 58 | #LSPHP Version 59 | Llsphpversion=$(cat /usr/share/lsphp-default-version) 60 | echo "Please input The PHP Version(If you have installed multiple versions of PHP): " 61 | read -p "PHP Version,Example: lsphp71,lsphp70 or lsphp56: " -r -e -i "${Llsphpversion}" lsphpversion 62 | if [ "$lsphpversion" = "" ]; then 63 | lsphpversion=$(cat /usr/share/lsphp-default-version) 64 | fi 65 | 66 | 67 | #More domain name 68 | read -p "Do you want to add more domain name? (y/n)" add_more_domainame 69 | 70 | if [ "$add_more_domainame" = 'y' ] || [ "$add_more_domainame" = 'Y' ]; then 71 | echo "Please input domain name,example(www.mf8.biz,statics.mf8.biz,imgs.mf8.biz)" 72 | read -p "Please use \",\" between each domain: " moredomain 73 | echo "===========================" 74 | echo domain list="$moredomain" 75 | echo "===========================" 76 | moredomainame=" $moredomain" 77 | fi 78 | 79 | #Enable SSL 80 | read -p "Do you want to enable HTTPS? (y/n)" enablessl 81 | 82 | if [ "$enablessl" = 'y' ] || [ "$enablessl" = 'Y' ]; then 83 | echo "Please input the Private Key File Path" 84 | read -p "Example:/home/demo/ssl/www.mf8.biz.key " privatekeypath 85 | echo "Please input the Certificate File Path" 86 | read -p "Example:/home/demo/ssl/www.mf8.biz.crt " certificatepath 87 | read -p "Do you want to enable HTTP/3(QUIC)? (y/n) " enablequic 88 | echo "===========================" 89 | echo Private Key File Path="$privatekeypath" 90 | echo Certificate File Path="$certificatepath" 91 | echo "===========================" 92 | chown lsadm:lsadm $privatekeypath 93 | chown lsadm:lsadm $certificatepath 94 | fi 95 | 96 | get_char() { 97 | SAVEDSTTY=`stty -g` 98 | stty -echo 99 | stty cbreak 100 | dd if=/dev/tty bs=1 count=1 2> /dev/null 101 | stty -raw 102 | stty echo 103 | stty $SAVEDSTTY 104 | } 105 | 106 | echo "" 107 | echo "Press any key to start or CTRL+C to cancel." 108 | char=`get_char` 109 | 110 | #Mkdir for vhost 111 | mkdir -p /home/$domain/{public_html,logs,ssl,cgi-bin,cache} 112 | chown -R nobody:nobody /home/$domain/public_html 113 | 114 | #add httpd conf Virtual host 115 | cp -f /usr/local/lsws/conf/httpd_config.xml /usr/local/lsws/conf/httpd_config.xml.bak 116 | v1="" 117 | v2="$domain<\/name>" 118 | v3="\/home\/$domain<\/vhRoot>" 119 | v4="\$SERVER_ROOT\/conf\/vhosts\/$domain.xml<\/configFile>" 120 | v5="1<\/allowSymbolLink>" 121 | v6="1<\/enableScript>" 122 | v7="0<\/restrained>" 123 | v8="2<\/setUIDMode>" 124 | v9="0<\/chrootMode>" 125 | v10="<\/virtualHost>" 126 | vend="<\/virtualHostList>" 127 | sed -i 's/'$vend'/'$v1'\n'$v2'\n'$v3'\n'$v4'\n'$v5'\n'$v6'\n'$v7'\n'$v8'\n'$v9'\n'$v10'\n&/' /usr/local/lsws/conf/httpd_config.xml 128 | 129 | if [ "$enablessl" = 'y' ] || [ "$enablessl" = 'Y' ]; then 130 | 131 | #add httpd conf listen (https) 132 | l1="" 133 | l2="$domain<\/vhost>" 134 | l3="$domain,$moredomain<\/domain>" 135 | l4="<\/vhostMap>" 136 | lend="<\/vhostMapList>" 137 | sed -i 's/'$lend'/'$l1'\n'$l2'\n'$l3'\n'$l4'\n&/' /usr/local/lsws/conf/httpd_config.xml 138 | 139 | if [ "$add_more_domainame" = 'y' ] || [ "$add_more_domainame" = 'Y' ]; then 140 | l1="" 141 | l2="$domain<\/vhost>" 142 | l3="$domain,$moredomain<\/domain>" 143 | l4="<\/vhostMap>" 144 | lend="<\/vhostMapList>" 145 | sed -i 's/'$lend'/'$l1'\n'$l2'\n'$l3'\n'$l4'\n&/' /usr/local/lsws/conf/httpd_config.xml 146 | else 147 | l1="" 148 | l2="$domain<\/vhost>" 149 | l3="$domain<\/domain>" 150 | l4="<\/vhostMap>" 151 | lend="<\/vhostMapList>" 152 | sed -i 's/'$lend'/'$l1'\n'$l2'\n'$l3'\n'$l4'\n&/' /usr/local/lsws/conf/httpd_config.xml 153 | fi 154 | 155 | #add vhost conf (https) 156 | cat >>/usr/local/lsws/conf/vhosts/$domain.xml< 158 | 159 | /home/$domain/public_html 160 | $webmasteremail 161 | 1 162 | 163 | 164 | 1 165 | /home/$domain/logs/$domain_errors.log 166 | ERROR 167 | 100M 168 | 169 | 170 | 0 171 | /home/$domain/logs/$domain.access.log 172 | 3 173 | 100M 174 | 30 175 | 1 176 | 177 | 178 | 179 | 0 180 | index.html, index.htm, index.php 181 | 182 | 183 | 184 | php 185 | lsapi 186 | $lsphpversion 187 | 188 | 189 | 190 | 1 191 | 192 | 193 | 194 | /home/$domain/cache 195 | 0 196 | 197 | 198 | 199 | 200 | lsapi 201 | $lsphpversion 202 |
uds://tmp/lshttpd/$domain-$lsphpversion.sock
203 | 35 204 | PHP_LSAPI_MAX_REQUESTS=5000 205 | PHP_LSAPI_CHILDREN=35 206 | 180 207 | 0 208 | 1 209 | 30 210 | 0 211 | 1 212 | /usr/bin/$lsphpversion 213 | 100 214 | 1 215 | 10 216 | 0 217 | 1024M 218 | 1024M 219 | 400 220 | 500 221 |
222 |
223 | 224 | 225 | cgi 226 | /cgi-bin/ 227 | /home/$domain/cgi-bin/ 228 | 229 | 230 | 231 | 232 | 233 | 234 | off 235 | 236 | 237 | 238 | $privatekeypath 239 | $certificatepath 240 | 1 241 | 1 242 | 1 243 | 1 244 | 4 245 | 0 246 | 247 |
248 | EOF 249 | 250 | if [ "$enablequic" = 'y' ] || [ "$enablequic" = 'Y' ]; then 251 | sed -i "s@0@1@g" /usr/local/lsws/conf/vhosts/$domain.xml 252 | fi 253 | 254 | else 255 | 256 | #add httpd conf listen(http) 257 | l1="" 258 | l2="$domain<\/vhost>" 259 | l3="$domain,$moredomain<\/domain>" 260 | l4="<\/vhostMap>" 261 | lend="<\/vhostMapList>" 262 | sed -i 's/'$lend'/'$l1'\n'$l2'\n'$l3'\n'$l4'\n&/' /usr/local/lsws/conf/httpd_config.xml 263 | 264 | if [ "$add_more_domainame" = 'y' ] || [ "$add_more_domainame" = 'Y' ]; then 265 | l1="" 266 | l2="$domain<\/vhost>" 267 | l3="$domain,$moredomain<\/domain>" 268 | l4="<\/vhostMap>" 269 | lend="<\/vhostMapList>" 270 | sed -i 's/'$lend'/'$l1'\n'$l2'\n'$l3'\n'$l4'\n&/' /usr/local/lsws/conf/httpd_config.xml 271 | else 272 | l1="" 273 | l2="$domain<\/vhost>" 274 | l3="$domain<\/domain>" 275 | l4="<\/vhostMap>" 276 | lend="<\/vhostMapList>" 277 | sed -i 's/'$lend'/'$l1'\n'$l2'\n'$l3'\n'$l4'\n&/' /usr/local/lsws/conf/httpd_config.xml 278 | fi 279 | 280 | #add vhost conf (http) 281 | cat >>/usr/local/lsws/conf/vhosts/$domain.xml< 283 | 284 | /home/$domain/public_html 285 | $webmasteremail 286 | 1 287 | 288 | 289 | 1 290 | /home/$domain/logs/$domain_errors.log 291 | ERROR 292 | 100M 293 | 294 | 295 | 0 296 | /home/$domain/logs/$domain.access.log 297 | 3 298 | 100M 299 | 30 300 | 1 301 | 302 | 303 | 304 | 0 305 | index.html, index.htm, index.php 306 | 307 | 308 | 309 | php 310 | lsapi 311 | $lsphpversion 312 | 313 | 314 | 315 | 1 316 | 317 | 318 | 319 | /home/$domain/cache 320 | 0 321 | 322 | 323 | 324 | 325 | lsapi 326 | $lsphpversion 327 |
uds://tmp/lshttpd/$domain-$lsphpversion.sock
328 | 35 329 | PHP_LSAPI_MAX_REQUESTS=5000 330 | PHP_LSAPI_CHILDREN=35 331 | 180 332 | 0 333 | 1 334 | 30 335 | 0 336 | 1 337 | /usr/bin/$lsphpversion 338 | 100 339 | 1 340 | 10 341 | 0 342 | 1024M 343 | 1024M 344 | 400 345 | 500 346 |
347 |
348 | 349 | 350 | cgi 351 | /cgi-bin/ 352 | /home/$domain/cgi-bin/ 353 | 354 | 355 | 356 | 357 | 358 | 359 | off 360 | 361 | 362 |
363 | EOF 364 | 365 | fi 366 | 367 | chown -R lsadm:lsadm /usr/local/lsws/conf/vhosts/$domain.xml 368 | 369 | 370 | service lsws restart 371 | 372 | echo "=========================================================================" 373 | echo "The Virtual host has been created" 374 | echo "The path of the Virtual host is /home/$domain/" 375 | echo "Please upload the web files into /home/$domain/public_html" 376 | echo "=========================================================================" 377 | -------------------------------------------------------------------------------- /home/demo/public_html/ocp.php: -------------------------------------------------------------------------------- 1 | 1 || php_sapi_name()=='cli' || empty($_SERVER['REMOTE_ADDR']) ) { die('Indirect access not allowed'); } // weak block against indirect access 11 | 12 | $time=time(); 13 | define('CACHEPREFIX',function_exists('opcache_reset')?'opcache_':(function_exists('accelerator_reset')?'accelerator_':'')); 14 | 15 | if ( !empty($_GET['RESET']) ) { 16 | if ( function_exists(CACHEPREFIX.'reset') ) { call_user_func(CACHEPREFIX.'reset'); } 17 | header( 'Location: '.str_replace('?'.$_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']) ); 18 | exit; 19 | } 20 | 21 | if ( !empty($_GET['RECHECK']) ) { 22 | if ( function_exists(CACHEPREFIX.'invalidate') ) { 23 | $recheck=trim($_GET['RECHECK']); $files=call_user_func(CACHEPREFIX.'get_status'); 24 | if (!empty($files['scripts'])) { 25 | foreach ($files['scripts'] as $file=>$value) { 26 | if ( $recheck==='1' || strpos($file,$recheck)===0 ) call_user_func(CACHEPREFIX.'invalidate',$file); 27 | } 28 | } 29 | header( 'Location: '.str_replace('?'.$_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']) ); 30 | } else { echo 'Sorry, this feature requires Zend Opcache newer than April 8th 2013'; } 31 | exit; 32 | } 33 | 34 | topheader(); 35 | 36 | if ( !function_exists(CACHEPREFIX.'get_status') ) { echo '

Opcache not detected?

'; exit; } 37 | 38 | if ( !empty($_GET['FILES']) ) { echo '

files cached

'; files_display(); echo ''; exit; } 39 | 40 | if ( !(isset($_REQUEST['GRAPHS']) && !$_REQUEST['GRAPHS']) && CACHEPREFIX=='opcache_') { graphs_display(); if ( !empty($_REQUEST['GRAPHS']) ) { exit; } } 41 | 42 | // some info is only available via phpinfo? sadly buffering capture has to be used 43 | ob_start(); 44 | phpinfo(8); 45 | $phpinfo = ob_get_contents(); 46 | ob_end_clean(); 47 | 48 | if ( !preg_match( '/module\_Zend (Optimizer\+|OPcache).+?(\]*\>.+?\<\/table\>).+?(\]*\>.+?\<\/table\>)/s', $phpinfo, $opcache) ) { } // todo 49 | 50 | if ( function_exists(CACHEPREFIX.'get_configuration') ) { echo '

general

'; $configuration=call_user_func(CACHEPREFIX.'get_configuration'); } 51 | 52 | $host=function_exists('gethostname')?@gethostname():@php_uname('n'); if (empty($host)) { $host=empty($_SERVER['SERVER_NAME'])?$_SERVER['HOST_NAME']:$_SERVER['SERVER_NAME']; } 53 | $version=array('Host'=>$host); 54 | $version['PHP Version']='PHP '.(defined('PHP_VERSION')?PHP_VERSION:'???').' '.(defined('PHP_SAPI')?PHP_SAPI:'').' '.(defined('PHP_OS')?' '.PHP_OS:''); 55 | $version['Opcache Version']=empty($configuration['version']['version'])?'???':$configuration['version'][CACHEPREFIX.'product_name'].' '.$configuration['version']['version']; 56 | print_table($version); 57 | 58 | if ( !empty($opcache[2]) ) { echo preg_replace('/\\[^>]+\<\/td\>\[0-9\,\. ]+\<\/td\>\<\/tr\>/','',$opcache[2]); } 59 | 60 | if ( function_exists(CACHEPREFIX.'get_status') && $status=call_user_func(CACHEPREFIX.'get_status') ) { 61 | $uptime=array(); 62 | if ( !empty($status[CACHEPREFIX.'statistics']['start_time']) ) { 63 | $uptime['uptime']=time_since($time,$status[CACHEPREFIX.'statistics']['start_time'],1,''); 64 | } 65 | if ( !empty($status[CACHEPREFIX.'statistics']['last_restart_time']) ) { 66 | $uptime['last_restart']=time_since($time,$status[CACHEPREFIX.'statistics']['last_restart_time']); 67 | } 68 | if (!empty($uptime)) {print_table($uptime);} 69 | 70 | if ( !empty($status['cache_full']) ) { $status['memory_usage']['cache_full']=$status['cache_full']; } 71 | 72 | echo '

memory

'; 73 | print_table($status['memory_usage']); 74 | unset($status[CACHEPREFIX.'statistics']['start_time'],$status[CACHEPREFIX.'statistics']['last_restart_time']); 75 | echo '

statistics

'; 76 | print_table($status[CACHEPREFIX.'statistics']); 77 | } 78 | 79 | if ( empty($_GET['ALL']) ) { meta_display(); exit; } 80 | 81 | if ( !empty($configuration['blacklist']) ) { echo '

blacklist

'; print_table($configuration['blacklist']); } 82 | 83 | if ( !empty($opcache[3]) ) { echo '

runtime

'; echo $opcache[3]; } 84 | 85 | $name='zend opcache'; 86 | $functions=get_extension_funcs($name); 87 | if (!$functions) { $name='zend optimizer+'; $functions=get_extension_funcs($name); } 88 | if ($functions) { echo '

functions

'; print_table($functions); } else { $name=''; } 89 | 90 | $level=trim(CACHEPREFIX,'_').'.optimization_level'; 91 | if (isset($configuration['directives'][$level])) { 92 | echo '

optimization levels

'; 93 | $levelset=strrev(base_convert($configuration['directives'][$level], 10, 2)); 94 | $levels=array( 95 | 1=>'Constants subexpressions elimination (CSE) true, false, null, etc.
Optimize series of ADD_STRING / ADD_CHAR
Convert CAST(IS_BOOL,x) into BOOL(x)
Convert INIT_FCALL_BY_NAME + DO_FCALL_BY_NAME into DO_FCALL', 96 | 2=>'Convert constant operands to expected types
Convert conditional JMP with constant operands
Optimize static BRK and CONT', 97 | 3=>'Convert $a = $a + expr into $a += expr
Convert $a++ into ++$a
Optimize series of JMP', 98 | 4=>'PRINT and ECHO optimization (defunct)', 99 | 5=>'Block Optimization - most expensive pass
Performs many different optimization patterns based on control flow graph (CFG)', 100 | 9=>'Optimize register allocation (allows re-usage of temporary variables)', 101 | 10=>'Remove NOPs' 102 | ); 103 | echo ''; 104 | foreach ($levels as $pass=>$description) { 105 | $disabled=substr($levelset,$pass-1,1)!=='1' || $pass==4 ? ' white':''; 106 | echo ''; 107 | } 108 | echo '
PassDescription
'.$pass.''.$description.'
'; 109 | } 110 | 111 | if ( isset($_GET['DUMP']) ) { 112 | if ($name) { echo '

ini

'; print_table(ini_get_all($name,true)); } 113 | foreach ($configuration as $key=>$value) { echo '

',$key,'

'; print_table($configuration[$key]); } 114 | exit; 115 | } 116 | 117 | meta_display(); 118 | 119 | echo ''; 120 | 121 | exit; 122 | 123 | #################### 124 | ### Functions ###### 125 | 126 | function time_since($time,$original,$extended=0,$text='ago') { 127 | $time = $time - $original; 128 | $day = $extended? floor($time/86400) : round($time/86400,0); 129 | $amount=0; $unit=''; 130 | if ( $time < 86400) { 131 | if ( $time < 60) { $amount=$time; $unit='second'; } 132 | elseif ( $time < 3600) { $amount=floor($time/60); $unit='minute'; } 133 | else { $amount=floor($time/3600); $unit='hour'; } 134 | } 135 | elseif ( $day < 14) { $amount=$day; $unit='day'; } 136 | elseif ( $day < 56) { $amount=floor($day/7); $unit='week'; } 137 | elseif ( $day < 672) { $amount=floor($day/30); $unit='month'; } 138 | else { $amount=intval(2*($day/365))/2; $unit='year'; } 139 | 140 | if ( $amount!=1) {$unit.='s';} 141 | if ($extended && $time>60) { $text=' and '.time_since($time,$time<86400?($time<3600?$amount*60:$amount*3600):$day*86400,0,'').$text; } 142 | 143 | return $amount.' '.$unit.' '.$text; 144 | } 145 | 146 | function print_table($array,$headers=false) { 147 | if ( empty($array) || !is_array($array) ) {return;} 148 | echo ''; 149 | if (!empty($headers)) { 150 | if (!is_array($headers)) {$headers=array_keys(reset($array));} 151 | echo ''; 152 | foreach ($headers as $value) { echo ''; } 153 | echo ''; 154 | } 155 | foreach ($array as $key=>$value) { 156 | echo ''; 157 | if ( !is_numeric($key) ) { 158 | $key=ucwords(str_replace('_',' ',$key)); 159 | echo ''; 160 | if ( is_numeric($value) ) { 161 | if ( $value>1048576) { $value=round($value/1048576,1).'M'; } 162 | elseif ( is_float($value) ) { $value=round($value,1); } 163 | } 164 | } 165 | if ( is_array($value) ) { 166 | foreach ($value as $column) { 167 | echo ''; 168 | } 169 | echo ''; 170 | } 171 | else { echo ''; } 172 | } 173 | echo '
',$value,'
',$key,'',$column,'
',$value,'
'; 174 | } 175 | 176 | function files_display() { 177 | $status=call_user_func(CACHEPREFIX.'get_status'); 178 | if ( empty($status['scripts']) ) {return;} 179 | if ( isset($_GET['DUMP']) ) { print_table($status['scripts']); exit;} 180 | $time=time(); $sort=0; 181 | $nogroup=preg_replace('/\&?GROUP\=[\-0-9]+/','',$_SERVER['REQUEST_URI']); 182 | $nosort=preg_replace('/\&?SORT\=[\-0-9]+/','',$_SERVER['REQUEST_URI']); 183 | $group=empty($_GET['GROUP'])?0:intval($_GET['GROUP']); if ( $group<0 || $group>9) { $group=1;} 184 | $groupset=array_fill(0,9,''); $groupset[$group]=' class="b" '; 185 | 186 | echo '
'; 187 | echo 'ungroup | '; 188 | for($i=1;$i<10;$i++){ 189 | echo ''.$i.' | '; 190 | } 191 | echo '
'; 192 | 193 | if ( !$group ) { $files =& $status['scripts']; } 194 | else { 195 | $files=array(); 196 | foreach ($status['scripts'] as $data) { 197 | if ( preg_match('@^[/]([^/]+[/]){'.$group.'}@',$data['full_path'],$path) ) { 198 | if ( empty($files[$path[0]])) { $files[$path[0]]=array('full_path'=>'','files'=>0,'hits'=>0,'memory_consumption'=>0,'last_used_timestamp'=>'','timestamp'=>''); } 199 | $files[$path[0]]['full_path']=$path[0]; 200 | $files[$path[0]]['files']++; 201 | $files[$path[0]]['memory_consumption']+=$data['memory_consumption']; 202 | $files[$path[0]]['hits']+=$data['hits']; 203 | if ( $data['last_used_timestamp']>$files[$path[0]]['last_used_timestamp']) {$files[$path[0]]['last_used_timestamp']=$data['last_used_timestamp'];} 204 | if ( $data['timestamp']>$files[$path[0]]['timestamp']) {$files[$path[0]]['timestamp']=$data['timestamp'];} 205 | } 206 | } 207 | } 208 | 209 | if ( !empty($_GET['SORT']) ) { 210 | $keys=array( 211 | 'full_path'=>SORT_STRING, 212 | 'files'=>SORT_NUMERIC, 213 | 'memory_consumption'=>SORT_NUMERIC, 214 | 'hits'=>SORT_NUMERIC, 215 | 'last_used_timestamp'=>SORT_NUMERIC, 216 | 'timestamp'=>SORT_NUMERIC 217 | ); 218 | $titles=array('','path',$group?'files':'','size','hits','last used','created'); 219 | $offsets=array_keys($keys); 220 | $key=intval($_GET['SORT']); 221 | $direction=$key>0?1:-1; 222 | $key=abs($key)-1; 223 | $key=isset($offsets[$key])&&!($key==1&&empty($group))?$offsets[$key]:reset($offsets); 224 | $sort=array_search($key,$offsets)+1; 225 | $sortflip=range(0,7); $sortflip[$sort]=-$direction*$sort; 226 | if ( $keys[$key]==SORT_STRING) {$direction=-$direction; } 227 | $arrow=array_fill(0,7,''); $arrow[$sort]=$direction>0?' ▼':' ▲'; 228 | $direction=$direction>0?SORT_DESC:SORT_ASC; 229 | $column=array(); foreach ($files as $data) { $column[]=$data[$key]; } 230 | array_multisort($column, $keys[$key], $direction, $files); 231 | } 232 | 233 | echo ' 234 | '; 235 | foreach ($titles as $column=>$title) { 236 | if ($title) echo ''; 237 | } 238 | echo ' '; 239 | foreach ($files as $data) { 240 | echo ' 241 | ', 242 | ($group?'':''), 243 | '', 244 | '', 245 | '', 246 | ' 247 | '; 248 | } 249 | echo '
',$title,$arrow[$column],'
x',$data['full_path'],''.number_format($data['files']).'',number_format(round($data['memory_consumption']/1024)),'K',number_format($data['hits']),'',time_since($time,$data['last_used_timestamp']),'',empty($data['timestamp'])?'':time_since($time,$data['timestamp']),'
'; 250 | } 251 | 252 | function graphs_display() { 253 | $graphs=array(); 254 | $colors=array('green','brown','red'); 255 | $primes=array(223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987); 256 | $configuration=call_user_func(CACHEPREFIX.'get_configuration'); 257 | $status=call_user_func(CACHEPREFIX.'get_status'); 258 | 259 | $graphs['memory']['total']=$configuration['directives']['opcache.memory_consumption']; 260 | $graphs['memory']['free']=$status['memory_usage']['free_memory']; 261 | $graphs['memory']['used']=$status['memory_usage']['used_memory']; 262 | $graphs['memory']['wasted']=$status['memory_usage']['wasted_memory']; 263 | 264 | $graphs['keys']['total']=$status[CACHEPREFIX.'statistics']['max_cached_keys']; 265 | foreach ($primes as $prime) { if ($prime>=$graphs['keys']['total']) { $graphs['keys']['total']=$prime; break;} } 266 | $graphs['keys']['free']=$graphs['keys']['total']-$status[CACHEPREFIX.'statistics']['num_cached_keys']; 267 | $graphs['keys']['scripts']=$status[CACHEPREFIX.'statistics']['num_cached_scripts']; 268 | $graphs['keys']['wasted']=$status[CACHEPREFIX.'statistics']['num_cached_keys']-$status[CACHEPREFIX.'statistics']['num_cached_scripts']; 269 | 270 | $graphs['hits']['total']=0; 271 | $graphs['hits']['hits']=$status[CACHEPREFIX.'statistics']['hits']; 272 | $graphs['hits']['misses']=$status[CACHEPREFIX.'statistics']['misses']; 273 | $graphs['hits']['blacklist']=$status[CACHEPREFIX.'statistics']['blacklist_misses']; 274 | $graphs['hits']['total']=array_sum($graphs['hits']); 275 | 276 | $graphs['restarts']['total']=0; 277 | $graphs['restarts']['manual']=$status[CACHEPREFIX.'statistics']['manual_restarts']; 278 | $graphs['restarts']['keys']=$status[CACHEPREFIX.'statistics']['hash_restarts']; 279 | $graphs['restarts']['memory']=$status[CACHEPREFIX.'statistics']['oom_restarts']; 280 | $graphs['restarts']['total']=array_sum($graphs['restarts']); 281 | 282 | foreach ( $graphs as $caption=>$graph) { 283 | echo '
',$caption,'
'; 284 | foreach ($graph as $label=>$value) { 285 | if ($label=='total') { $key=0; $total=$value; $totaldisplay=''; continue;} 286 | $percent=$total?floor($value*100/$total):''; $percent=!$percent||$percent>99?'':$percent.'%'; 287 | echo '',$totaldisplay,''; 288 | $key++; $totaldisplay=''; 289 | } 290 | echo '
'.($total>999999?round($total/1024/1024).'M':($total>9999?round($total/1024).'K':$total)).'
', ($value>999999?round($value/1024/1024).'M':($value>9999?round($value/1024).'K':$value)),'',$percent,'',$label,'
',"\n"; 291 | } 292 | } 293 | function topheader(){ 294 | ?> 295 | 296 | 297 | OCP - Opcache Control Panel 298 | 299 | 300 | 342 | 345 | 346 | 347 | 348 |
349 | 350 |

Opcache Control Panel

351 | 352 |
353 | Details 354 | Files 355 | Reset 356 | 357 | Recheck 358 | 359 | Refresh 360 |
361 | 362 | 368 |
369 | directives guide | 370 | functions guide | 371 | wiki.php.net | 372 | pecl | 373 | Zend source | 374 | OCP latest 375 |
376 | 6 | # Home: https://www.llstack.com 7 | # Blog: https://www.mf8.biz 8 | # 9 | # * LiteSpeed Enterprise Web Server 10 | # * Support with APPNode 11 | # * MySQL 5.5/5.6/5.7(MariaDB 5.5/10.0/10.1/10.2) 12 | # * PHP 5.4/5.5/5.6/7.0/7.1/7.2/7.3 13 | # * phpMyAdmin(Adminer) 14 | # 15 | # https://github.com/ivmm/LLStack/ 16 | # 17 | # Usage: sh install-appnode.sh 18 | # 19 | 20 | # check root 21 | [ "$(id -g)" != '0' ] && die 'Script must be run as root.' 22 | 23 | # declare variables 24 | envType='master' 25 | ipAddress=`curl -s -4 https://api.ip.sb/ip` 26 | mysqlPWD=$(echo -n ${RANDOM} | md5sum | cut -b -16) 27 | 28 | mysqlUrl='http://repo.mysql.com' 29 | mariaDBUrl='http://yum.mariadb.org' 30 | #phpUrl='https://rpms.remirepo.net' 31 | LiteSpeedUrl='http://rpms.litespeedtech.com' 32 | mysqlUrl_CN='http://mirrors.ustc.edu.cn/mysql-repo' 33 | mariaDBUrl_CN='http://mirrors.ustc.edu.cn/mariadb/yum' 34 | #phpUrl_CN='https://mirrors.ustc.edu.cn/remi' 35 | LiteSpeedUrl_CN='http://litespeed-rpm.mf8.biz' 36 | isUpdate='0' 37 | 38 | # show success message 39 | showOk(){ 40 | echo -e "\\033[34m[OK]\\033[0m $1" 41 | } 42 | 43 | # show error message 44 | showError(){ 45 | echo -e "\\033[31m[ERROR]\\033[0m $1" 46 | } 47 | 48 | # show notice message 49 | showNotice(){ 50 | echo -e "\\033[36m[NOTICE]\\033[0m $1" 51 | } 52 | 53 | # install 54 | runInstall(){ 55 | showNotice 'Installing...' 56 | 57 | showNotice '(Step 1/7) Update YUM packages' 58 | 59 | while true; do 60 | read -p "Please answer yes or no. [Y/n]" yn 61 | case $yn in 62 | [Yy]* ) isUpdate='1'; break;; 63 | [Nn]* ) isUpdate='0'; break;; 64 | esac 65 | done 66 | 67 | showNotice '(Step 2/7) Input server IPv4 Address' 68 | read -p "IP address: " -r -e -i "${ipAddress}" ipAddress 69 | if [ "${ipAddress}" = '' ]; then 70 | showError 'Invalid IP Address' 71 | exit 72 | fi 73 | 74 | showNotice "(Step 3/7) Select the MySQL version" 75 | echo "1) MariaDB-5.5" 76 | echo "2) MariaDB-10.0" 77 | echo "3) MariaDB-10.1" 78 | echo "4) MariaDB-10.2" 79 | echo "5) MariaDB-10.3" 80 | echo "6) MySQL-5.5" 81 | echo "7) MySQL-5.6" 82 | echo "8) MySQL-5.7" 83 | echo "9) MySQL-8.0" 84 | echo "0) Not need" 85 | read -p 'MySQL [1-9,0]: ' -r -e -i 0 mysqlV 86 | if [ "${mysqlV}" = '' ]; then 87 | showError 'Invalid MySQL version' 88 | exit 89 | fi 90 | 91 | showNotice "(Step 4/7) Select the PHP version" 92 | echo "1) PHP-5.4" 93 | echo "2) PHP-5.5" 94 | echo "3) PHP-5.6" 95 | echo "4) PHP-7.0" 96 | echo "5) PHP-7.1" 97 | echo "6) PHP-7.2" 98 | echo "7) PHP-7.3" 99 | echo "0) Not need" 100 | read -p 'PHP [1-6,0]: ' -r -e -i 7 phpV 101 | if [ "${phpV}" = '' ]; then 102 | showError 'Invalid PHP version' 103 | exit 104 | fi 105 | 106 | showNotice "(Step 5/7) Install LiteSpeed or Not?" 107 | echo "1) Install LiteSpeed" 108 | echo "0) Not need" 109 | read -p 'LiteSpeed [1,0]: ' -r -e -i 1 LiteSpeedV 110 | if [ "${LiteSpeedV}" = '' ]; then 111 | showError 'Invalid LiteSpeed select' 112 | exit 113 | fi 114 | 115 | showNotice "(Step 6/7) Select the DB tool version" 116 | echo "1) Adminer" 117 | echo "2) phpMyAdmin" 118 | echo "0) Not need" 119 | read -p 'DB tool [1-3]: ' -r -e -i 0 dbV 120 | if [ "${dbV}" = '' ]; then 121 | showError 'Invalid DB tool version' 122 | exit 123 | fi 124 | 125 | showNotice "(Step 7/7) Use a mirror server to download rpms" 126 | echo "1) Source station" 127 | echo "2) China Mirror station" 128 | read -p 'Proxy server [1-2]: ' -r -e -i 2 freeV 129 | if [ "${freeV}" = '' ]; then 130 | showError 'Invalid Proxy server' 131 | exit 132 | fi 133 | 134 | showNotice "Use Triay Key or Serial No. to activate LiteSpeed" 135 | echo "1) Triay Key, Please put The Trial.key in /root/trial.key" 136 | echo "2) Serial No. Recommend" 137 | read -p 'Activation method [1-2]: ' -r -e -i 2 acV 138 | if [ "${acV}" = '2' ]; then 139 | showNotice "Enter The Serial No. here." 140 | read -p 'Serial No.: ' -r -e acnoV 141 | if [ "${acnoV}}" = '' ]; then 142 | showError 'Invalid Serial No.' 143 | exit 144 | fi 145 | elif [ "${acV}" = '' ]; then 146 | showError 'Invalid Activation method' 147 | exit 148 | fi 149 | 150 | 151 | [ "${isUpdate}" = '1' ] && yum update -y 152 | [ ! -x "/usr/bin/wget" ] && yum install wget -y 153 | [ ! -x "/usr/bin/curl" ] && yum install curl -y 154 | [ ! -x "/usr/bin/unzip" ] && yum install unzip -y 155 | 156 | if [ ! -d "/tmp/LLStack-${envType}" ]; then 157 | cd /tmp || exit 158 | if [ ! -f "LLStack-${envType}.zip" ]; then 159 | if ! curl -L --retry 3 -o "LLStack-${envType}.zip" "https://github.com/ivmm/LLStack/archive/${envType}.zip" 160 | then 161 | showError "LLStack-${envType} download failed!" 162 | exit 163 | fi 164 | fi 165 | unzip -q "LLStack-${envType}.zip" 166 | fi 167 | 168 | [ -s /etc/selinux/config ] && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 169 | setenforce 0 >/dev/null 2>&1 170 | 171 | yumRepos=$(find /etc/yum.repos.d/ -maxdepth 1 -name "*.repo" -type f | wc -l) 172 | 173 | startDate=$(date) 174 | startDateSecond=$(date +%s) 175 | 176 | showNotice 'Installing' 177 | 178 | mysqlRepoUrl=${mysqlUrl} 179 | mariaDBRepoUrl=${mariaDBUrl} 180 | #phpRepoUrl=${phpUrl} 181 | LiteSpeedRepoUrl=${LiteSpeedUrl} 182 | 183 | if [ "${freeV}" = "2" ]; then 184 | mysqlRepoUrl=${mysqlUrl_CN} 185 | mariaDBRepoUrl=${mariaDBUrl_CN} 186 | #phpRepoUrl=${phpUrl_CN} 187 | LiteSpeedRepoUrl=${LiteSpeedUrl_CN} 188 | fi 189 | 190 | yum install -y epel-release yum-utils iptables iptables-services 191 | 192 | if [ "${mysqlV}" != '0' ]; then 193 | yum -y remove mariadb* 194 | if [[ "${mysqlV}" = "1" || "${mysqlV}" = "2" || "${mysqlV}" = "3" || "${mysqlV}" = "4" || "${mysqlV}" = "5" ]]; then 195 | mariadbV='10.1' 196 | installDB='mariadb' 197 | case ${mysqlV} in 198 | 1) 199 | mariadbV='5.5' 200 | ;; 201 | 2) 202 | mariadbV='10.0' 203 | ;; 204 | 3) 205 | mariadbV='10.1' 206 | ;; 207 | 4) 208 | mariadbV='10.2' 209 | ;; 210 | 5) 211 | mariadbV='10.3' 212 | ;; 213 | esac 214 | echo -e "[mariadb]\\nname = MariaDB\\nbaseurl = ${mariaDBRepoUrl}/${mariadbV}/centos7-amd64\\ngpgkey=${mariaDBRepoUrl}/RPM-GPG-KEY-MariaDB\\ngpgcheck=1" > /etc/yum.repos.d/mariadb.repo 215 | elif [[ "${mysqlV}" = "6" || "${mysqlV}" = "7" || "${mysqlV}" = "8" || "${mysqlV}" = "9" ]]; then 216 | rpm --import /tmp/LLStack-${envType}/keys/RPM-GPG-KEY-mysql 217 | rpm -Uvh ${mysqlRepoUrl}/mysql-community-release-el7.rpm 218 | find /etc/yum.repos.d/ -maxdepth 1 -name "mysql-community*.repo" -type f -print0 | xargs -0 sed -i "s@${mysqlUrl}@${mysqlRepoUrl}@g" 219 | 220 | installDB='mysqld' 221 | 222 | case ${mysqlV} in 223 | 6) 224 | yum-config-manager --enable mysql55-community 225 | yum-config-manager --disable mysql56-community mysql57-community mysql80-community 226 | ;; 227 | 7) 228 | yum-config-manager --enable mysql56-community 229 | yum-config-manager --disable mysql55-community mysql57-community mysql80-community 230 | ;; 231 | 8) 232 | yum-config-manager --enable mysql57-community 233 | yum-config-manager --disable mysql55-community mysql56-community mysql80-community 234 | ;; 235 | 9) 236 | yum-config-manager --enable mysql80-community 237 | yum-config-manager --disable mysql55-community mysql56-community mysql57-community 238 | sed -i "s@${mysqlUrl}@${mysqlRepoUrl}@g" /etc/yum.repos.d/mysql-community.repo 239 | ;; 240 | esac 241 | fi 242 | fi 243 | 244 | if [ "${phpV}" != '0' ]; then 245 | 246 | case ${phpV} in 247 | 1) 248 | yum install -y appnode-php54-php-litespeed 249 | ln -s /opt/appnode/appnode-php54/root/usr/bin/php /usr/sbin/php-check 250 | ln -s /usr/bin/lsappnode-php54 /usr/bin/lsphp54 251 | touch /usr/share/lsphp-default-version 252 | echo "lsphp54" > /usr/share/lsphp-default-version 253 | ;; 254 | 2) 255 | yum install -y appnode-php55-php-litespeed 256 | ln -s /opt/appnode/appnode-php55/root/usr/bin/php /usr/sbin/php-check 257 | ln -s /usr/bin/lsappnode-php55 /usr/bin/lsphp55 258 | touch /usr/share/lsphp-default-version 259 | echo "lsphp55" > /usr/share/lsphp-default-version 260 | ;; 261 | 3) 262 | yum install -y appnode-php56-php-litespeed 263 | ln -s /opt/appnode/appnode-php56/root/usr/bin/php /usr/sbin/php-check 264 | ln -s /usr/bin/lsappnode-php56 /usr/bin/lsphp56 265 | touch /usr/share/lsphp-default-version 266 | echo "lsphp56" > /usr/share/lsphp-default-version 267 | ;; 268 | 4) 269 | yum install -y appnode-php70-php-litespeed 270 | ln -s /opt/appnode/appnode-php70/root/usr/bin/php /usr/sbin/php-check 271 | ln -s /usr/bin/lsappnode-php70 /usr/bin/lsphp70 272 | touch /usr/share/lsphp-default-version 273 | echo "lsphp70" > /usr/share/lsphp-default-version 274 | ;; 275 | 5) 276 | yum install -y appnode-php71-php-litespeed 277 | ln -s /opt/appnode/appnode-php71/root/usr/bin/php /usr/sbin/php-check 278 | ln -s /usr/bin/lsappnode-php71 /usr/bin/lsphp71 279 | touch /usr/share/lsphp-default-version 280 | echo "lsphp71" > /usr/share/lsphp-default-version 281 | ;; 282 | 6) 283 | yum install -y appnode-php72-php-litespeed 284 | ln -s /opt/appnode/appnode-php72/root/usr/bin/php /usr/sbin/php-check 285 | ln -s /usr/bin/lsappnode-php72 /usr/bin/lsphp72 286 | touch /usr/share/lsphp-default-version 287 | echo "lsphp72" > /usr/share/lsphp-default-version 288 | ;; 289 | 7) 290 | yum install -y appnode-php73-php-litespeed 291 | ln -s /opt/appnode/appnode-php73/root/usr/bin/php /usr/sbin/php-check 292 | ln -s /usr/bin/lsappnode-php73 /usr/bin/lsphp73 293 | touch /usr/share/lsphp-default-version 294 | echo "lsphp73" > /usr/share/lsphp-default-version 295 | ;; 296 | esac 297 | fi 298 | 299 | if [ "${LiteSpeedV}" != '0' ]; then 300 | systemctl stop httpd.service 301 | yum remove httpd appnode-php72-php -y 302 | rpm -Uvh ${LiteSpeedRepoUrl}/centos/litespeed-repo-1.1-1.el7.noarch.rpm 303 | 304 | LiteSpeedRepo=/etc/yum.repos.d/litespeed.repo 305 | 306 | sed -i "s@${LiteSpeedUrl}@${LiteSpeedRepoUrl}@g" ${LiteSpeedRepo} 307 | fi 308 | 309 | yum clean all && yum makecache fast 310 | 311 | if [ "${mysqlV}" != '0' ]; then 312 | if [ "${installDB}" = "mariadb" ]; then 313 | yum install -y MariaDB-server MariaDB-client MariaDB-common 314 | mysql_install_db --user=mysql 315 | elif [ "${installDB}" = "mysqld" ]; then 316 | yum install -y mysql-community-server 317 | 318 | if [ "${mysqlV}" = "6" ]; then 319 | mysql_install_db --user=mysql 320 | elif [ "${mysqlV}" = "7" ]; then 321 | mysqld --initialize-insecure --user=mysql --explicit_defaults_for_timestamp 322 | else 323 | mysqld --initialize-insecure --user=mysql 324 | fi 325 | 326 | if [ "${mysqlV}" = "9" ]; then 327 | sed -i "s@# default-authentication-plugin=mysql_native_password@default-authentication-plugin=mysql_native_password@g" /etc/my.cnf 328 | fi 329 | fi 330 | fi 331 | 332 | if [ "${LiteSpeedV}" != '0' ]; then 333 | 334 | yum install lsws -y 335 | 336 | if [ -d "/usr/local/lsws/" ]; then 337 | mv -bfu /usr/local/lsws/conf/httpd_config.xml /usr/local/lsws/conf/httpd_config.xml.llstack.bak 338 | mkdir -p /usr/local/lsws/conf/vhosts/ 339 | fi 340 | 341 | cp -a /tmp/LLStack-${envType}/conf/httpd_config.xml /usr/local/lsws/conf/httpd_config.xml 342 | cp -a /tmp/LLStack-${envType}/conf/vhosts/LLStack-demo.xml /usr/local/lsws/conf/vhosts/LLStack-demo.xml 343 | chown lsadm:lsadm /usr/local/lsws/conf/httpd_config.xml 344 | chown -R lsadm:lsadm /usr/local/lsws/conf/vhosts/ 345 | 346 | mkdir -p /home/demo/{public_html,logs,ssl,cgi-bin,cache} 347 | 348 | cp -a /tmp/LLStack-${envType}/home/demo/public_html/* /home/demo/public_html/ 349 | cp -a /tmp/LLStack-${envType}/home/demo/ssl/* /home/demo/ssl/ 350 | 351 | chown -R nobody:nobody /home/demo/public_html 352 | chown -R lsadm:lsadm /home/demo/ssl 353 | 354 | if [ "${acnoV}" != '' ]; then 355 | touch /root/serial.no 356 | echo "${acnoV}" > /root/serial.no 357 | fi 358 | 359 | if [ -f "/root/serial.no" ]; then 360 | cp -a /root/serial.no /usr/local/lsws/conf/serial.no 361 | /usr/local/lsws/bin/lshttpd -r 362 | elif [ -f "/root/trial.key" ]; then 363 | cp -a /root/trial.key /usr/local/lsws/conf/trial.key 364 | /usr/local/lsws/bin/lshttpd -r 365 | else 366 | wget -q -t 1 -T 3 --output-document=/usr/local/lsws/conf/trial.key http://license.litespeedtech.com/reseller/trial.key 367 | fi 368 | 369 | 370 | 371 | case ${phpV} in 372 | 1) 373 | sed -i "s@lsphp73@lsphp54@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 374 | ;; 375 | 2) 376 | sed -i "s@lsphp73@lsphp55@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 377 | ;; 378 | 3) 379 | sed -i "s@lsphp73@lsphp56@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 380 | ;; 381 | 4) 382 | sed -i "s@lsphp73@lsphp70@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 383 | ;; 384 | 5) 385 | sed -i "s@lsphp73@lsphp71@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 386 | ;; 387 | 6) 388 | sed -i "s@lsphp73@lsphp72@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 389 | ;; 390 | 7) 391 | sed -i "s@lsphp73@lsphp73@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 392 | ;; 393 | esac 394 | 395 | fi 396 | 397 | if [[ "${phpV}" != '0' && "${LiteSpeedV}" != '0' ]]; then 398 | if [ "${dbV}" = "1" ]; then 399 | cp -a /tmp/LLStack-${envType}/DB/Adminer /home/demo/public_html/ 400 | sed -i "s/phpMyAdmin/Adminer/g" /home/demo/public_html/index.html 401 | elif [ "${dbV}" = "2" ]; then 402 | ## PHP 5.4 仅 PMA 4.0 LTS 支持 403 | if [ "${phpV}" = "1" ]; then 404 | cd /home/demo/public_html 405 | wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-4.0.10.20-all-languages.zip 406 | unzip phpMyAdmin-4.0.10.20-all-languages.zip 407 | rm -rf phpMyAdmin-4.0.10.20-all-languages.zip 408 | mv phpMyAdmin-4.0.10.20-all-languages phpMyAdmin 409 | ## PHP 5.5-7.0 仅 PMA 4.8 LTS 支持 410 | elif [ "${phpV}}" = "2" || "${phpV}" = "3" || "${phpV}" = "4" ]; then 411 | cd /home/demo/public_html 412 | wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip 413 | unzip phpMyAdmin-4.8.5-all-languages.zip 414 | rm -rf phpMyAdmin-4.8.5-all-languages.zip 415 | mv phpMyAdmin-4.8.5-all-languages phpMyAdmin 416 | ## PHP 7.1+ 支持 4.8,5.0+ 417 | else 418 | cd /home/demo/public_html 419 | wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip 420 | unzip phpMyAdmin-4.8.5-all-languages.zip 421 | rm -rf phpMyAdmin-4.8.5-all-languages.zip 422 | mv phpMyAdmin-4.8.5-all-languages phpMyAdmin 423 | fi 424 | fi 425 | fi 426 | 427 | if [ "${dbV}" = "2" ]; then 428 | mkdir -p /home/demo/public_html/phpMyAdmin/tmp/ 429 | chmod 0777 /home/demo/public_html/phpMyAdmin/tmp/ 430 | cp /home/demo/public_html/phpMyAdmin/libraries/config.default.php /home/demo/public_html/phpMyAdmin/config.inc.php 431 | sed -i "s@UploadDir.*@UploadDir'\] = 'upload';@" /home/demo/public_html/phpMyAdmin/config.inc.php 432 | sed -i "s@SaveDir.*@SaveDir'\] = 'save';@" /home/demo/public_html/phpMyAdmin/config.inc.php 433 | sed -i "s@host'\].*@host'\] = '127.0.0.1';@" /home/demo/public_html/phpMyAdmin/config.inc.php 434 | sed -i "s@blowfish_secret.*;@blowfish_secret\'\] = \'$(cat /dev/urandom | head -1 | base64 | head -c 45)\';@" /home/demo/public_html/phpMyAdmin/config.inc.php 435 | fi 436 | 437 | showNotice "Start service" 438 | 439 | if [ "${mysqlV}" != '0' ]; then 440 | if [[ "${mysqlV}" = '1' || "${mysqlV}" = '2' ]]; then 441 | service mysql start 442 | else 443 | systemctl enable ${installDB}.service 444 | systemctl start ${installDB}.service 445 | fi 446 | 447 | mysqladmin -u root password "${mysqlPWD}" 448 | mysqladmin -u root -p"${mysqlPWD}" -h "localhost" password "${mysqlPWD}" 449 | mysql -u root -p"${mysqlPWD}" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');DELETE FROM mysql.user WHERE User='';DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';FLUSH PRIVILEGES;" 450 | if [ "${mysqlV}" = "9" ]; then 451 | mysql -u root -p"${mysqlPWD}" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY \"${mysqlPWD}\";FLUSH PRIVILEGES;" 452 | fi 453 | 454 | echo "${mysqlPWD}" > /home/initialPWD.txt 455 | rm -rf /var/lib/mysql/test 456 | fi 457 | 458 | if [ "${LiteSpeedV}" != '0' ]; then 459 | LSPASSRAND=`head -c 100 /dev/urandom | tr -dc a-z0-9A-Z |head -c 16` 460 | ENCRYPT_PASS=`/usr/local/lsws/admin/fcgi-bin/admin_php5 -q /usr/local/lsws/admin/misc/htpasswd.php $LSPASSRAND` 461 | echo "llstackadmin:$ENCRYPT_PASS" > /usr/local/lsws/admin/conf/htpasswd 462 | touch /root/defaulthtpasswd 463 | echo "llstackadmin:$LSPASSRAND" > /root/defaulthtpasswd 464 | systemctl restart lsws.service 465 | fi 466 | 467 | wget -P /root/ https://raw.githubusercontent.com/ivmm/LLStack/master/vhost.sh 468 | 469 | if [[ -f "/usr/sbin/mysqld" || -f "/usr/sbin/php-check" || -f "/usr/local/lsws/bin/httpd" ]]; then 470 | echo "================================================================" 471 | echo -e "\\033[42m [LLStack] Install completed. \\033[0m" 472 | 473 | if [ "${LiteSpeedV}" != '0' ]; then 474 | echo -e "\\033[34m Web Demo Site: \\033[0m http://${ipAddress}" 475 | echo -e "\\033[34m Web Demo Dir: \\033[0m /home/demo/public_html" 476 | echo -e "\\033[34m LiteSpeed: \\033[0m /usr/local/lsws/" 477 | echo -e "\\033[34m LiteSpeed WebAdmin Console URL: \\033[0m http://${ipAddress}:7080" 478 | echo -e "\\033[34m LiteSpeed WebAdmin Console Username: \\033[0m llstackadmin" 479 | echo -e "\\033[34m LiteSpeed WebAdmin Console Paasword: \\033[0m $LSPASSRAND" 480 | fi 481 | 482 | if [ "${phpV}" != '0' ]; then 483 | case ${phpV} in 484 | 1) 485 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php54/" 486 | ;; 487 | 2) 488 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php55/" 489 | ;; 490 | 3) 491 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php56/" 492 | ;; 493 | 4) 494 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php70/" 495 | ;; 496 | 5) 497 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php71/" 498 | ;; 499 | 6) 500 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php72/" 501 | ;; 502 | 7) 503 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/appnode/appnode-php73/" 504 | ;; 505 | esac 506 | fi 507 | 508 | if [[ "${mysqlV}" != '0' && -f "/usr/sbin/mysqld" ]]; then 509 | if [ "${installDB}" = "mariadb" ]; then 510 | echo -e "\\033[34m MariaDB Data: \\033[0m /var/lib/mysql/" 511 | echo -e "\\033[34m MariaDB User: \\033[0m root" 512 | echo -e "\\033[34m MariaDB Password: \\033[0m ${mysqlPWD}" 513 | elif [ "${installDB}" = "mysqld" ]; then 514 | echo -e "\\033[34m MySQL Data: \\033[0m /var/lib/mysql/" 515 | echo -e "\\033[34m MySQL User: \\033[0m root" 516 | echo -e "\\033[34m MySQL Password: \\033[0m ${mysqlPWD}" 517 | fi 518 | fi 519 | 520 | echo "Start time: ${startDate}" 521 | echo "Completion time: $(date) (Use: $((($(date +%s)-startDateSecond)/60)) minute)" 522 | echo "Use: $((($(date +%s)-startDateSecond)/60)) minute" 523 | echo -e "For more details see \\033[34m https://llstack.com \\033[0m" 524 | echo "================================================================" 525 | else 526 | echo -e "\\033[41m [LLStack] Sorry, Install Failed. \\033[0m" 527 | echo "Please contact us: https://github.com/ivmm/LLStack/issues" 528 | fi 529 | } 530 | 531 | while : 532 | do 533 | clear 534 | echo ' _ _ _____ _ _ ' 535 | echo ' | | | | / ____| | | | ' 536 | echo ' | | | | | (___ | |_ __ _ ___| | __' 537 | echo ' | | | | \___ \| __/ _` |/ __| |/ /' 538 | echo ' | |____| |____ ____) | || (_| | (__| < ' 539 | echo ' |______|______|_____/ \__\__,_|\___|_|\_\' 540 | echo '' 541 | echo -e "For more details see \033[4mhttps://llstack.com\033[0m" 542 | echo '' 543 | showNotice 'Please select your operation:' 544 | echo '1) Install' 545 | echo '2) Upgrade packages' 546 | echo '3) Exit' 547 | read -p 'Select an option [1-3]: ' -r -e operation 548 | case ${operation} in 549 | 1) 550 | clear 551 | runInstall 552 | exit 553 | ;; 554 | 2) 555 | clear 556 | showNotice "Checking..." 557 | yum upgrade 558 | exit 559 | ;; 560 | 3) 561 | showNotice "Nothing to do..." 562 | exit 563 | ;; 564 | esac 565 | done 566 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # 4 | # CentOS 7 LLStack 5 | # Author: ivmm 6 | # Home: https://www.llstack.com 7 | # Blog: https://www.mf8.biz 8 | # 9 | # * LiteSpeed Enterprise Web Server 10 | # * MySQL 5.5/5.6/5.7/8.0(MariaDB 5.5/10.0/10.1/10.2/10.3) 11 | # * PHP 5.4/5.5/5.6/7.0/7.1/7.2/7.3 12 | # * phpMyAdmin(Adminer) 13 | # 14 | # https://github.com/ivmm/LLStack/ 15 | # 16 | # Usage: sh install.sh 17 | # 18 | 19 | # check root 20 | [ "$(id -g)" != '0' ] && die 'Script must be run as root.' 21 | 22 | # declare variables 23 | envType='master' 24 | ipAddress=`curl -s -4 https://api.ip.sb/ip` 25 | mysqlPWD=$(echo -n ${RANDOM} | md5sum | cut -b -16) 26 | 27 | mysqlUrl='http://repo.mysql.com' 28 | mariaDBUrl='http://yum.mariadb.org' 29 | phpUrl='https://rpms.remirepo.net' 30 | LiteSpeedUrl='http://rpms.litespeedtech.com' 31 | mysqlUrl_CN='http://mirrors.ustc.edu.cn/mysql-repo' 32 | mariaDBUrl_CN='http://mirrors.ustc.edu.cn/mariadb/yum' 33 | phpUrl_CN='https://mirrors.ustc.edu.cn/remi' 34 | LiteSpeedUrl_CN='http://litespeed-rpm.mf8.biz' 35 | isUpdate='0' 36 | 37 | # show success message 38 | showOk(){ 39 | echo -e "\\033[34m[OK]\\033[0m $1" 40 | } 41 | 42 | # show error message 43 | showError(){ 44 | echo -e "\\033[31m[ERROR]\\033[0m $1" 45 | } 46 | 47 | # show notice message 48 | showNotice(){ 49 | echo -e "\\033[36m[NOTICE]\\033[0m $1" 50 | } 51 | 52 | # install 53 | runInstall(){ 54 | showNotice 'Installing...' 55 | 56 | showNotice '(Step 1/7) Update YUM packages' 57 | 58 | while true; do 59 | read -p "Please answer yes or no. [Y/n]" yn 60 | case $yn in 61 | [Yy]* ) isUpdate='1'; break;; 62 | [Nn]* ) isUpdate='0'; break;; 63 | esac 64 | done 65 | 66 | showNotice '(Step 2/7) Input server IPv4 Address' 67 | read -p "IP address: " -r -e -i "${ipAddress}" ipAddress 68 | if [ "${ipAddress}" = '' ]; then 69 | showError 'Invalid IP Address' 70 | exit 71 | fi 72 | 73 | showNotice "(Step 3/7) Select the MySQL version" 74 | echo "1) MariaDB-5.5" 75 | echo "2) MariaDB-10.0" 76 | echo "3) MariaDB-10.1" 77 | echo "4) MariaDB-10.2" 78 | echo "5) MariaDB-10.3" 79 | echo "6) MySQL-5.5" 80 | echo "7) MySQL-5.6" 81 | echo "8) MySQL-5.7" 82 | echo "9) MySQL-8.0" 83 | echo "0) Not need" 84 | read -p 'MySQL [1-9,0]: ' -r -e -i 6 mysqlV 85 | if [ "${mysqlV}" = '' ]; then 86 | showError 'Invalid MySQL version' 87 | exit 88 | fi 89 | 90 | showNotice "(Step 4/7) Select the PHP version" 91 | echo "1) PHP-5.4" 92 | echo "2) PHP-5.5" 93 | echo "3) PHP-5.6" 94 | echo "4) PHP-7.0" 95 | echo "5) PHP-7.1" 96 | echo "6) PHP-7.2" 97 | echo "7) PHP-7.3" 98 | echo "0) Not need" 99 | read -p 'PHP [1-6,0]: ' -r -e -i 7 phpV 100 | if [ "${phpV}" = '' ]; then 101 | showError 'Invalid PHP version' 102 | exit 103 | fi 104 | 105 | showNotice "(Step 5/7) Install LiteSpeed or Not?" 106 | echo "1) Install LiteSpeed" 107 | echo "0) Not need" 108 | read -p 'LiteSpeed [1,0]: ' -r -e -i 1 LiteSpeedV 109 | if [ "${LiteSpeedV}" = '' ]; then 110 | showError 'Invalid LiteSpeed select' 111 | exit 112 | fi 113 | 114 | showNotice "(Step 6/7) Select the DB tool version" 115 | echo "1) Adminer" 116 | echo "2) phpMyAdmin" 117 | echo "0) Not need" 118 | read -p 'DB tool [1-3]: ' -r -e -i 0 dbV 119 | if [ "${dbV}" = '' ]; then 120 | showError 'Invalid DB tool version' 121 | exit 122 | fi 123 | 124 | showNotice "(Step 7/7) Use a mirror server to download rpms" 125 | echo "1) Source station" 126 | echo "2) China Mirror station" 127 | read -p 'Proxy server [1-2]: ' -r -e -i 2 freeV 128 | if [ "${freeV}" = '' ]; then 129 | showError 'Invalid Proxy server' 130 | exit 131 | fi 132 | 133 | showNotice "Use Triay Key or Serial No. to activate LiteSpeed" 134 | echo "1) Triay Key, Please put The Trial.key in /root/trial.key" 135 | echo "2) Serial No. Recommend" 136 | read -p 'Activation method [1-2]: ' -r -e -i 2 acV 137 | if [ "${acV}" = '2' ]; then 138 | showNotice "Enter The Serial No. here." 139 | read -p 'Serial No.: ' -r -e acnoV 140 | if [ "${acnoV}}" = '' ]; then 141 | showError 'Invalid Serial No.' 142 | exit 143 | fi 144 | elif [ "${acV}" = '' ]; then 145 | showError 'Invalid Activation method' 146 | exit 147 | fi 148 | 149 | 150 | [ "${isUpdate}" = '1' ] && yum update -y 151 | [ ! -x "/usr/bin/wget" ] && yum install wget -y 152 | [ ! -x "/usr/bin/curl" ] && yum install curl -y 153 | [ ! -x "/usr/bin/unzip" ] && yum install unzip -y 154 | 155 | if [ ! -d "/tmp/LLStack-${envType}" ]; then 156 | cd /tmp || exit 157 | if [ ! -f "LLStack-${envType}.zip" ]; then 158 | if ! curl -L --retry 3 -o "LLStack-${envType}.zip" "https://github.com/ivmm/LLStack/archive/${envType}.zip" 159 | then 160 | showError "LLStack-${envType} download failed!" 161 | exit 162 | fi 163 | fi 164 | unzip -q "LLStack-${envType}.zip" 165 | fi 166 | 167 | [ -s /etc/selinux/config ] && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 168 | setenforce 0 >/dev/null 2>&1 169 | 170 | yumRepos=$(find /etc/yum.repos.d/ -maxdepth 1 -name "*.repo" -type f | wc -l) 171 | 172 | startDate=$(date) 173 | startDateSecond=$(date +%s) 174 | 175 | showNotice 'Installing' 176 | 177 | mysqlRepoUrl=${mysqlUrl} 178 | mariaDBRepoUrl=${mariaDBUrl} 179 | phpRepoUrl=${phpUrl} 180 | LiteSpeedRepoUrl=${LiteSpeedUrl} 181 | 182 | if [ "${freeV}" = "2" ]; then 183 | mysqlRepoUrl=${mysqlUrl_CN} 184 | mariaDBRepoUrl=${mariaDBUrl_CN} 185 | phpRepoUrl=${phpUrl_CN} 186 | LiteSpeedRepoUrl=${LiteSpeedUrl_CN} 187 | fi 188 | 189 | yum install -y epel-release yum-utils firewalld firewall-config 190 | 191 | if [ "${mysqlV}" != '0' ]; then 192 | yum -y remove mariadb* 193 | if [[ "${mysqlV}" = "1" || "${mysqlV}" = "2" || "${mysqlV}" = "3" || "${mysqlV}" = "4" || "${mysqlV}" = "5" ]]; then 194 | mariadbV='10.1' 195 | installDB='mariadb' 196 | case ${mysqlV} in 197 | 1) 198 | mariadbV='5.5' 199 | ;; 200 | 2) 201 | mariadbV='10.0' 202 | ;; 203 | 3) 204 | mariadbV='10.1' 205 | ;; 206 | 4) 207 | mariadbV='10.2' 208 | ;; 209 | 5) 210 | mariadbV='10.3' 211 | ;; 212 | esac 213 | echo -e "[mariadb]\\nname = MariaDB\\nbaseurl = ${mariaDBRepoUrl}/${mariadbV}/centos7-amd64\\ngpgkey=${mariaDBRepoUrl}/RPM-GPG-KEY-MariaDB\\ngpgcheck=1" > /etc/yum.repos.d/mariadb.repo 214 | elif [[ "${mysqlV}" = "6" || "${mysqlV}" = "7" || "${mysqlV}" = "8" || "${mysqlV}" = "9" ]]; then 215 | rpm --import /tmp/LLStack-${envType}/keys/RPM-GPG-KEY-mysql 216 | rpm -Uvh ${mysqlRepoUrl}/mysql-community-release-el7.rpm 217 | find /etc/yum.repos.d/ -maxdepth 1 -name "mysql-community*.repo" -type f -print0 | xargs -0 sed -i "s@${mysqlUrl}@${mysqlRepoUrl}@g" 218 | 219 | installDB='mysqld' 220 | 221 | case ${mysqlV} in 222 | 6) 223 | yum-config-manager --enable mysql55-community 224 | yum-config-manager --disable mysql56-community mysql57-community mysql80-community 225 | ;; 226 | 7) 227 | yum-config-manager --enable mysql56-community 228 | yum-config-manager --disable mysql55-community mysql57-community mysql80-community 229 | ;; 230 | 8) 231 | yum-config-manager --enable mysql57-community 232 | yum-config-manager --disable mysql55-community mysql56-community mysql80-community 233 | ;; 234 | 9) 235 | yum-config-manager --enable mysql80-community 236 | yum-config-manager --disable mysql55-community mysql56-community mysql57-community 237 | sed -i "s@${mysqlUrl}@${mysqlRepoUrl}@g" /etc/yum.repos.d/mysql-community.repo 238 | ;; 239 | esac 240 | fi 241 | fi 242 | 243 | if [ "${phpV}" != '0' ]; then 244 | sedPhpRepo() { 245 | find /etc/yum.repos.d/ -maxdepth 1 -name "remi*.repo" -type f -print0 | xargs -0 sed -i "$1" 246 | } 247 | 248 | rpm --import /tmp/LLStack-${envType}/keys/RPM-GPG-KEY-remi 249 | rpm -Uvh ${phpRepoUrl}/enterprise/remi-release-7.rpm 250 | 251 | sedPhpRepo "s@${phpUrl}@${phpRepoUrl}@g" 252 | 253 | if [ "${freeV}" = "1" ]; then 254 | sedPhpRepo "/\$basearch/{n;s/^baseurl=/#baseurl=/g}" 255 | sedPhpRepo "/\$basearch/{n;n;s/^#mirrorlist=/mirrorlist=/g}" 256 | elif [ "${freeV}" = "2" ]; then 257 | sedPhpRepo "/\$basearch/{n;s/^#baseurl=/baseurl=/g}" 258 | 259 | sedPhpRepo "/\$basearch/{n;n;s/^mirrorlist=/#mirrorlist=/g}" 260 | fi 261 | 262 | case ${phpV} in 263 | 1) 264 | yum install -y php54-php-litespeed php54-php-cli php54-php-bcmath php54-php-gd php54-php-json php54-php-mbstring php54-php-mcrypt php54-php-mysqlnd php54-php-opcache php54-php-pdo php54-php-pecl-crypto php54-php-pecl-mcrypt php54-php-pecl-geoip php54-php-pecl-zip php54-php-recode php54-php-snmp php54-php-soap php54-php-xml 265 | ln -s /opt/remi/php54/root/usr/bin/php /usr/sbin/php-check 266 | touch /usr/share/lsphp-default-version 267 | echo "lsphp54" > /usr/share/lsphp-default-version 268 | ;; 269 | 2) 270 | yum install -y php55-php-litespeed php55-php-cli php55-php-bcmath php55-php-gd php55-php-json php55-php-mbstring php55-php-mcrypt php55-php-mysqlnd php55-php-opcache php55-php-pdo php55-php-pecl-crypto php55-php-pecl-mcrypt php55-php-pecl-geoip php55-php-pecl-zip php55-php-recode php55-php-snmp php55-php-soap php55-php-xml 271 | ln -s /opt/remi/php55/root/usr/bin/php /usr/sbin/php-check 272 | touch /usr/share/lsphp-default-version 273 | echo "lsphp55" > /usr/share/lsphp-default-version 274 | ;; 275 | 3) 276 | yum install -y php56-php-litespeed php56-php-cli php56-php-bcmath php56-php-gd php56-php-json php56-php-mbstring php56-php-mcrypt php56-php-mysqlnd php56-php-opcache php56-php-pdo php56-php-pecl-crypto php56-php-pecl-mcrypt php56-php-pecl-geoip php56-php-pecl-zip php56-php-recode php56-php-snmp php56-php-soap php56-php-xml 277 | ln -s /opt/remi/php56/root/usr/bin/php /usr/sbin/php-check 278 | touch /usr/share/lsphp-default-version 279 | echo "lsphp56" > /usr/share/lsphp-default-version 280 | ;; 281 | 4) 282 | yum install -y php70-php-litespeed php70-php-cli php70-php-bcmath php70-php-gd php70-php-json php70-php-mbstring php70-php-mcrypt php70-php-mysqlnd php70-php-opcache php70-php-pdo php70-php-pecl-crypto php70-php-pecl-mcrypt php70-php-pecl-geoip php70-php-pecl-zip php70-php-recode php70-php-snmp php70-php-soap php70-php-xml 283 | ln -s /opt/remi/php70/root/usr/bin/php /usr/sbin/php-check 284 | touch /usr/share/lsphp-default-version 285 | echo "lsphp70" > /usr/share/lsphp-default-version 286 | ;; 287 | 5) 288 | yum install -y php71-php-litespeed php71-php-cli php71-php-bcmath php71-php-gd php71-php-json php71-php-mbstring php71-php-mcrypt php71-php-mysqlnd php71-php-opcache php71-php-pdo php71-php-pecl-crypto php71-php-pecl-mcrypt php71-php-pecl-geoip php71-php-pecl-zip php71-php-recode php71-php-snmp php71-php-soap php71-php-xml 289 | ln -s /opt/remi/php71/root/usr/bin/php /usr/sbin/php-check 290 | touch /usr/share/lsphp-default-version 291 | echo "lsphp71" > /usr/share/lsphp-default-version 292 | ;; 293 | 6) 294 | yum install -y php72-php-litespeed php72-php-cli php72-php-bcmath php72-php-gd php72-php-json php72-php-mbstring php72-php-mcrypt php72-php-mysqlnd php72-php-opcache php72-php-pdo php72-php-pecl-crypto php72-php-pecl-mcrypt php72-php-pecl-geoip php72-php-pecl-zip php72-php-recode php72-php-snmp php72-php-soap php72-php-xml 295 | ln -s /opt/remi/php72/root/usr/bin/php /usr/sbin/php-check 296 | touch /usr/share/lsphp-default-version 297 | echo "lsphp72" > /usr/share/lsphp-default-version 298 | ;; 299 | 7) 300 | yum install -y php73-php-litespeed php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-pecl-zip php73-php-recode php73-php-snmp php73-php-soap php73-php-xml 301 | ln -s /opt/remi/php73/root/usr/bin/php /usr/sbin/php-check 302 | touch /usr/share/lsphp-default-version 303 | echo "lsphp73" > /usr/share/lsphp-default-version 304 | ;; 305 | esac 306 | fi 307 | 308 | if [ "${LiteSpeedV}" != '0' ]; then 309 | rpm -Uvh ${LiteSpeedRepoUrl}/centos/litespeed-repo-1.1-1.el7.noarch.rpm 310 | 311 | LiteSpeedRepo=/etc/yum.repos.d/litespeed.repo 312 | 313 | sed -i "s@${LiteSpeedUrl}@${LiteSpeedRepoUrl}@g" ${LiteSpeedRepo} 314 | fi 315 | 316 | yum clean all && yum makecache fast 317 | 318 | if [ "${mysqlV}" != '0' ]; then 319 | if [ "${installDB}" = "mariadb" ]; then 320 | yum install -y MariaDB-server MariaDB-client MariaDB-common 321 | mysql_install_db --user=mysql 322 | elif [ "${installDB}" = "mysqld" ]; then 323 | yum install -y mysql-community-server 324 | 325 | if [ "${mysqlV}" = "6" ]; then 326 | mysql_install_db --user=mysql 327 | elif [ "${mysqlV}" = "7" ]; then 328 | mysqld --initialize-insecure --user=mysql --explicit_defaults_for_timestamp 329 | else 330 | mysqld --initialize-insecure --user=mysql 331 | fi 332 | 333 | if [ "${mysqlV}" = "9" ]; then 334 | sed -i "s@# default-authentication-plugin=mysql_native_password@default-authentication-plugin=mysql_native_password@g" /etc/my.cnf 335 | fi 336 | fi 337 | fi 338 | 339 | if [ "${LiteSpeedV}" != '0' ]; then 340 | 341 | yum install lsws -y 342 | 343 | if [ -d "/usr/local/lsws/" ]; then 344 | mv -bfu /usr/local/lsws/conf/httpd_config.xml /usr/local/lsws/conf/httpd_config.xml.llstack.bak 345 | mkdir -p /usr/local/lsws/conf/vhosts/ 346 | fi 347 | 348 | cp -a /tmp/LLStack-${envType}/conf/httpd_config.xml /usr/local/lsws/conf/httpd_config.xml 349 | cp -a /tmp/LLStack-${envType}/conf/vhosts/LLStack-demo.xml /usr/local/lsws/conf/vhosts/LLStack-demo.xml 350 | chown lsadm:lsadm /usr/local/lsws/conf/httpd_config.xml 351 | chown -R lsadm:lsadm /usr/local/lsws/conf/vhosts/ 352 | 353 | mkdir -p /home/demo/{public_html,logs,ssl,cgi-bin,cache} 354 | 355 | cp -a /tmp/LLStack-${envType}/home/demo/public_html/* /home/demo/public_html/ 356 | cp -a /tmp/LLStack-${envType}/home/demo/ssl/* /home/demo/ssl/ 357 | 358 | chown -R nobody:nobody /home/demo/public_html 359 | chown -R lsadm:lsadm /home/demo/ssl 360 | 361 | if [ "${acnoV}" != '' ]; then 362 | touch /root/serial.no 363 | echo "${acnoV}" > /root/serial.no 364 | fi 365 | 366 | if [ -f "/root/serial.no" ]; then 367 | cp -a /root/serial.no /usr/local/lsws/conf/serial.no 368 | /usr/local/lsws/bin/lshttpd -r 369 | elif [ -f "/root/trial.key" ]; then 370 | cp -a /root/trial.key /usr/local/lsws/conf/trial.key 371 | /usr/local/lsws/bin/lshttpd -r 372 | else 373 | wget -q -t 1 -T 3 --output-document=/usr/local/lsws/conf/trial.key http://license.litespeedtech.com/reseller/trial.key 374 | fi 375 | 376 | 377 | 378 | case ${phpV} in 379 | 1) 380 | sed -i "s@lsphp73@lsphp54@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 381 | ;; 382 | 2) 383 | sed -i "s@lsphp73@lsphp55@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 384 | ;; 385 | 3) 386 | sed -i "s@lsphp73@lsphp56@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 387 | ;; 388 | 4) 389 | sed -i "s@lsphp73@lsphp70@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 390 | ;; 391 | 5) 392 | sed -i "s@lsphp73@lsphp71@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 393 | ;; 394 | 6) 395 | sed -i "s@lsphp73@lsphp72@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 396 | ;; 397 | 7) 398 | sed -i "s@lsphp73@lsphp73@g" /usr/local/lsws/conf/vhosts/LLStack-demo.xml 399 | ;; 400 | esac 401 | 402 | fi 403 | 404 | if [[ "${phpV}" != '0' && "${LiteSpeedV}" != '0' ]]; then 405 | if [ "${dbV}" = "1" ]; then 406 | cp -a /tmp/LLStack-${envType}/DB/Adminer /home/demo/public_html/ 407 | sed -i "s/phpMyAdmin/Adminer/g" /home/demo/public_html/index.html 408 | elif [ "${dbV}" = "2" ]; then 409 | ## PHP 5.4 仅 PMA 4.0 LTS 支持 410 | if [ "${phpV}" = "1" ]; then 411 | cd /home/demo/public_html 412 | wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-4.0.10.20-all-languages.zip 413 | unzip phpMyAdmin-4.0.10.20-all-languages.zip 414 | rm -rf phpMyAdmin-4.0.10.20-all-languages.zip 415 | mv phpMyAdmin-4.0.10.20-all-languages phpMyAdmin 416 | ## PHP 5.5-7.0 仅 PMA 4.8 LTS 支持 417 | elif [ "${phpV}}" = "2" || "${phpV}" = "3" || "${phpV}" = "4" ]; then 418 | cd /home/demo/public_html 419 | wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip 420 | unzip phpMyAdmin-4.8.5-all-languages.zip 421 | rm -rf phpMyAdmin-4.8.5-all-languages.zip 422 | mv phpMyAdmin-4.8.5-all-languages phpMyAdmin 423 | ## PHP 7.1+ 支持 4.8,5.0+ 424 | else 425 | cd /home/demo/public_html 426 | wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip 427 | unzip phpMyAdmin-4.8.5-all-languages.zip 428 | rm -rf phpMyAdmin-4.8.5-all-languages.zip 429 | mv phpMyAdmin-4.8.5-all-languages phpMyAdmin 430 | fi 431 | fi 432 | fi 433 | 434 | if [ "${dbV}" = "2" ]; then 435 | mkdir -p /home/demo/public_html/phpMyAdmin/tmp/ 436 | chmod 0777 /home/demo/public_html/phpMyAdmin/tmp/ 437 | cp /home/demo/public_html/phpMyAdmin/libraries/config.default.php /home/demo/public_html/phpMyAdmin/config.inc.php 438 | sed -i "s@UploadDir.*@UploadDir'\] = 'upload';@" /home/demo/public_html/phpMyAdmin/config.inc.php 439 | sed -i "s@SaveDir.*@SaveDir'\] = 'save';@" /home/demo/public_html/phpMyAdmin/config.inc.php 440 | sed -i "s@host'\].*@host'\] = '127.0.0.1';@" /home/demo/public_html/phpMyAdmin/config.inc.php 441 | sed -i "s@blowfish_secret.*;@blowfish_secret\'\] = \'$(cat /dev/urandom | head -1 | base64 | head -c 45)\';@" /home/demo/public_html/phpMyAdmin/config.inc.php 442 | fi 443 | 444 | showNotice "Start service" 445 | 446 | systemctl enable firewalld.service 447 | systemctl restart firewalld.service 448 | 449 | firewall-cmd --permanent --zone=public --add-service=http 450 | firewall-cmd --permanent --zone=public --add-service=https 451 | firewall-cmd --permanent --zone=public --add-port=7080/tcp 452 | firewall-cmd --reload 453 | 454 | if [ "${mysqlV}" != '0' ]; then 455 | if [[ "${mysqlV}" = '1' || "${mysqlV}" = '2' ]]; then 456 | service mysql start 457 | else 458 | systemctl enable ${installDB}.service 459 | systemctl start ${installDB}.service 460 | fi 461 | 462 | mysqladmin -u root password "${mysqlPWD}" 463 | mysqladmin -u root -p"${mysqlPWD}" -h "localhost" password "${mysqlPWD}" 464 | mysql -u root -p"${mysqlPWD}" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');DELETE FROM mysql.user WHERE User='';DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';FLUSH PRIVILEGES;" 465 | if [ "${mysqlV}" = "9" ]; then 466 | mysql -u root -p"${mysqlPWD}" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY \"${mysqlPWD}\";FLUSH PRIVILEGES;" 467 | fi 468 | 469 | echo "${mysqlPWD}" > /home/initialPWD.txt 470 | rm -rf /var/lib/mysql/test 471 | fi 472 | 473 | if [ "${LiteSpeedV}" != '0' ]; then 474 | LSPASSRAND=`head -c 100 /dev/urandom | tr -dc a-z0-9A-Z |head -c 16` 475 | ENCRYPT_PASS=`/usr/local/lsws/admin/fcgi-bin/admin_php5 -q /usr/local/lsws/admin/misc/htpasswd.php $LSPASSRAND` 476 | echo "llstackadmin:$ENCRYPT_PASS" > /usr/local/lsws/admin/conf/htpasswd 477 | touch /root/defaulthtpasswd 478 | echo "llstackadmin:$LSPASSRAND" > /root/defaulthtpasswd 479 | systemctl restart lsws.service 480 | fi 481 | 482 | wget -P /root/ https://raw.githubusercontent.com/ivmm/LLStack/master/vhost.sh 483 | 484 | if [[ -f "/usr/sbin/mysqld" || -f "/usr/sbin/php-check" || -f "/usr/local/lsws/bin/httpd" ]]; then 485 | echo "================================================================" 486 | echo -e "\\033[42m [LLStack] Install completed. \\033[0m" 487 | 488 | if [ "${LiteSpeedV}" != '0' ]; then 489 | echo -e "\\033[34m Web Demo Site: \\033[0m http://${ipAddress}" 490 | echo -e "\\033[34m Web Demo Dir: \\033[0m /home/demo/public_html" 491 | echo -e "\\033[34m LiteSpeed: \\033[0m /usr/local/lsws/" 492 | echo -e "\\033[34m LiteSpeed WebAdmin Console URL: \\033[0m http://${ipAddress}:7080" 493 | echo -e "\\033[34m LiteSpeed WebAdmin Console Username: \\033[0m llstackadmin" 494 | echo -e "\\033[34m LiteSpeed WebAdmin Console Paasword: \\033[0m $LSPASSRAND" 495 | fi 496 | 497 | if [ "${phpV}" != '0' ]; then 498 | case ${phpV} in 499 | 1) 500 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php54/" 501 | ;; 502 | 2) 503 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php55/" 504 | ;; 505 | 3) 506 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php56/" 507 | ;; 508 | 4) 509 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php70/" 510 | ;; 511 | 5) 512 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php71/" 513 | ;; 514 | 6) 515 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php72/" 516 | ;; 517 | 7) 518 | echo -e "\\033[34m PHP: \\033[0m /etc/opt/remi/php73/" 519 | ;; 520 | esac 521 | fi 522 | 523 | if [[ "${mysqlV}" != '0' && -f "/usr/sbin/mysqld" ]]; then 524 | if [ "${installDB}" = "mariadb" ]; then 525 | echo -e "\\033[34m MariaDB Data: \\033[0m /var/lib/mysql/" 526 | echo -e "\\033[34m MariaDB User: \\033[0m root" 527 | echo -e "\\033[34m MariaDB Password: \\033[0m ${mysqlPWD}" 528 | elif [ "${installDB}" = "mysqld" ]; then 529 | echo -e "\\033[34m MySQL Data: \\033[0m /var/lib/mysql/" 530 | echo -e "\\033[34m MySQL User: \\033[0m root" 531 | echo -e "\\033[34m MySQL Password: \\033[0m ${mysqlPWD}" 532 | fi 533 | fi 534 | 535 | echo "Start time: ${startDate}" 536 | echo "Completion time: $(date) (Use: $((($(date +%s)-startDateSecond)/60)) minute)" 537 | echo "Use: $((($(date +%s)-startDateSecond)/60)) minute" 538 | echo -e "For more details see \\033[34m https://llstack.com \\033[0m" 539 | echo "================================================================" 540 | else 541 | echo -e "\\033[41m [LLStack] Sorry, Install Failed. \\033[0m" 542 | echo "Please contact us: https://github.com/ivmm/LLStack/issues" 543 | fi 544 | } 545 | 546 | while : 547 | do 548 | clear 549 | echo ' _ _ _____ _ _ ' 550 | echo ' | | | | / ____| | | | ' 551 | echo ' | | | | | (___ | |_ __ _ ___| | __' 552 | echo ' | | | | \___ \| __/ _` |/ __| |/ /' 553 | echo ' | |____| |____ ____) | || (_| | (__| < ' 554 | echo ' |______|______|_____/ \__\__,_|\___|_|\_\' 555 | echo '' 556 | echo -e "For more details see \033[4mhttps://llstack.com\033[0m" 557 | echo '' 558 | showNotice 'Please select your operation:' 559 | echo '1) Install' 560 | echo '2) Upgrade packages' 561 | echo '3) Exit' 562 | read -p 'Select an option [1-3]: ' -r -e operation 563 | case ${operation} in 564 | 1) 565 | clear 566 | runInstall 567 | exit 568 | ;; 569 | 2) 570 | clear 571 | showNotice "Checking..." 572 | yum upgrade 573 | exit 574 | ;; 575 | 3) 576 | showNotice "Nothing to do..." 577 | exit 578 | ;; 579 | esac 580 | done 581 | -------------------------------------------------------------------------------- /home/demo/public_html/tz.php: -------------------------------------------------------------------------------- 1 | =0; $l--) 82 | { 83 | $allsize1[$l]=floor($size/pow(1024,$l)); 84 | $allsize[$l]=$allsize1[$l]-$allsize1[$l+1]*1024; 85 | } 86 | 87 | $len=count($allsize); 88 | 89 | for($j = $len-1; $j >=0; $j--) 90 | { 91 | $fsize=$fsize.$allsize[$j].$danwei[$j]; 92 | } 93 | return $fsize; 94 | } 95 | 96 | 97 | function valid_email($str) 98 | { 99 | 100 | return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE; 101 | 102 | } 103 | 104 | 105 | //检测PHP设置参数 106 | 107 | function show($varName) 108 | { 109 | 110 | switch($result = get_cfg_var($varName)) 111 | { 112 | 113 | case 0: 114 | 115 | return '×'; 116 | 117 | break; 118 | 119 | 120 | case 1: 121 | 122 | return ''; 123 | 124 | break; 125 | 126 | 127 | default: 128 | 129 | return $result; 130 | 131 | break; 132 | 133 | } 134 | 135 | } 136 | 137 | 138 | 139 | //保留服务器性能测试结果 140 | 141 | $valInt = isset($_POST['pInt']) ? $_POST['pInt'] : "未测试"; 142 | 143 | $valFloat = isset($_POST['pFloat']) ? $_POST['pFloat'] : "未测试"; 144 | 145 | $valIo = isset($_POST['pIo']) ? $_POST['pIo'] : "未测试"; 146 | 147 | 148 | 149 | if ($_GET['act'] == "phpinfo") 150 | { 151 | 152 | phpinfo(); 153 | 154 | exit(); 155 | 156 | } 157 | elseif($_POST['act'] == "整型测试") 158 | { 159 | 160 | $valInt = test_int(); 161 | 162 | } 163 | elseif($_POST['act'] == "浮点测试") 164 | { 165 | 166 | $valFloat = test_float(); 167 | 168 | } 169 | elseif($_POST['act'] == "IO测试") 170 | { 171 | 172 | $valIo = test_io(); 173 | 174 | } 175 | //网速测试-开始 176 | elseif($_POST['act']=="开始测试") 177 | { 178 | ?> 179 | 184 | "; 188 | } 189 | ?> 190 | 196 | "; 206 | Echo "这里显示系统所支持的所有函数,和自定义函数\n"; 207 | print_r($arr); 208 | echo ""; 209 | exit(); 210 | }elseif($_GET['act'] == "disable_functions") 211 | { 212 | $disFuns=get_cfg_var("disable_functions"); 213 | if(empty($disFuns)) 214 | { 215 | $arr = '×'; 216 | } 217 | else 218 | { 219 | $arr = $disFuns; 220 | } 221 | Function php() 222 | { 223 | } 224 | echo "
";
 225 | 	Echo "这里显示系统被禁用的函数\n";
 226 | 	print_r($arr);
 227 | 	echo "
"; 228 | exit(); 229 | } 230 | 231 | 232 | 233 | //MySQL检测 234 | 235 | if ($_POST['act'] == 'MySQL检测') 236 | { 237 | 238 | $host = isset($_POST['host']) ? trim($_POST['host']) : ''; 239 | 240 | $port = isset($_POST['port']) ? (int) $_POST['port'] : ''; 241 | 242 | $login = isset($_POST['login']) ? trim($_POST['login']) : ''; 243 | 244 | $password = isset($_POST['password']) ? trim($_POST['password']) : ''; 245 | 246 | $host = preg_match('~[^a-z0-9\-\.]+~i', $host) ? '' : $host; 247 | 248 | $port = intval($port) ? intval($port) : ''; 249 | 250 | $login = preg_match('~[^a-z0-9\_\-]+~i', $login) ? '' : htmlspecialchars($login); 251 | 252 | $password = is_string($password) ? htmlspecialchars($password) : ''; 253 | 254 | } 255 | elseif ($_POST['act'] == '函数检测') 256 | { 257 | 258 | $funRe = "函数".$_POST['funName']."支持状况检测结果:".isfun1($_POST['funName']); 259 | 260 | } 261 | elseif ($_POST['act'] == '邮件检测') 262 | { 263 | 264 | $mailRe = "邮件发送检测结果:发送"; 265 | if($_SERVER['SERVER_PORT']==80){$mailContent = "http://".$_SERVER['SERVER_NAME'].($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);} 266 | else{$mailContent = "http://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);} 267 | $mailRe .= (false !== @mail($_POST["mailAdd"], $mailContent, "This is a test mail!")) ? "完成":"失败"; 268 | 269 | } 270 | 271 | 272 | //网络速度测试 273 | if(isset($_POST['speed'])) 274 | { 275 | $speed=round(100/($_POST['speed']/1000),2); 276 | } 277 | elseif($_GET['speed']=="0") 278 | { 279 | $speed=6666.67; 280 | } 281 | elseif(isset($_GET['speed']) and $_GET['speed']>0) 282 | { 283 | $speed=round(100/($_GET['speed']/1000),2); //下载速度:$speed kb/s 284 | } 285 | else 286 | { 287 | $speed=" 未探测 "; 288 | } 289 | 290 | 291 | 292 | // 检测函数支持 293 | 294 | function isfun($funName = '') 295 | { 296 | 297 | if (!$funName || trim($funName) == '' || preg_match('~[^a-z0-9\_]+~i', $funName, $tmp)) return '错误'; 298 | 299 | return (false !== function_exists($funName)) ? '' : '×'; 300 | } 301 | function isfun1($funName = '') 302 | { 303 | if (!$funName || trim($funName) == '' || preg_match('~[^a-z0-9\_]+~i', $funName, $tmp)) return '错误'; 304 | return (false !== function_exists($funName)) ? '√' : '×'; 305 | } 306 | 307 | 308 | 309 | //整数运算能力测试 310 | 311 | function test_int() 312 | { 313 | 314 | $timeStart = gettimeofday(); 315 | 316 | for($i = 0; $i < 3000000; $i++) 317 | { 318 | 319 | $t = 1+1; 320 | 321 | } 322 | 323 | $timeEnd = gettimeofday(); 324 | 325 | $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 326 | 327 | $time = round($time, 3)."秒"; 328 | 329 | return $time; 330 | 331 | } 332 | 333 | 334 | 335 | //浮点运算能力测试 336 | 337 | function test_float() 338 | { 339 | 340 | //得到圆周率值 341 | 342 | $t = pi(); 343 | 344 | $timeStart = gettimeofday(); 345 | 346 | 347 | 348 | for($i = 0; $i < 3000000; $i++) 349 | { 350 | 351 | //开平方 352 | 353 | sqrt($t); 354 | 355 | } 356 | 357 | 358 | 359 | $timeEnd = gettimeofday(); 360 | 361 | $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 362 | 363 | $time = round($time, 3)."秒"; 364 | 365 | return $time; 366 | 367 | } 368 | 369 | 370 | 371 | //IO能力测试 372 | 373 | function test_io() 374 | { 375 | 376 | $fp = @fopen(PHPSELF, "r"); 377 | 378 | $timeStart = gettimeofday(); 379 | 380 | for($i = 0; $i < 10000; $i++) 381 | { 382 | 383 | @fread($fp, 10240); 384 | 385 | @rewind($fp); 386 | 387 | } 388 | 389 | $timeEnd = gettimeofday(); 390 | 391 | @fclose($fp); 392 | 393 | $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 394 | 395 | $time = round($time, 3)."秒"; 396 | 397 | return($time); 398 | 399 | } 400 | 401 | function GetCoreInformation() {$data = file('/proc/stat');$cores = array();foreach( $data as $line ) {if( preg_match('/^cpu[0-9]/', $line) ){$info = explode(' ', $line);$cores[]=array('user'=>$info[1],'nice'=>$info[2],'sys' => $info[3],'idle'=>$info[4],'iowait'=>$info[5],'irq' => $info[6],'softirq' => $info[7]);}}return $cores;} 402 | function GetCpuPercentages($stat1, $stat2) {if(count($stat1)!==count($stat2)){return;}$cpus=array();for( $i = 0, $l = count($stat1); $i < $l; $i++) { $dif = array(); $dif['user'] = $stat2[$i]['user'] - $stat1[$i]['user'];$dif['nice'] = $stat2[$i]['nice'] - $stat1[$i]['nice']; $dif['sys'] = $stat2[$i]['sys'] - $stat1[$i]['sys'];$dif['idle'] = $stat2[$i]['idle'] - $stat1[$i]['idle'];$dif['iowait'] = $stat2[$i]['iowait'] - $stat1[$i]['iowait'];$dif['irq'] = $stat2[$i]['irq'] - $stat1[$i]['irq'];$dif['softirq'] = $stat2[$i]['softirq'] - $stat1[$i]['softirq'];$total = array_sum($dif);$cpu = array();foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 2);$cpus['cpu' . $i] = $cpu;}return $cpus;} 403 | $stat1 = GetCoreInformation();sleep(1);$stat2 = GetCoreInformation();$data = GetCpuPercentages($stat1, $stat2); 404 | $cpu_show = $data['cpu0']['user']."%us, ".$data['cpu0']['sys']."%sy, ".$data['cpu0']['nice']."%ni, ".$data['cpu0']['idle']."%id, ".$data['cpu0']['iowait']."%wa, ".$data['cpu0']['irq']."%irq, ".$data['cpu0']['softirq']."%softirq"; 405 | function makeImageUrl($title, $data) {$api='http://api.yahei.net/tz/cpu_show.php?id=';$url.=$data['user'].',';$url.=$data['nice'].',';$url.=$data['sys'].',';$url.=$data['idle'].',';$url.=$data['iowait'];$url.='&chdl=User|Nice|Sys|Idle|Iowait&chdlp=b&chl=';$url.=$data['user'].'%25|';$url.=$data['nice'].'%25|';$url.=$data['sys'].'%25|';$url.=$data['idle'].'%25|';$url.=$data['iowait'].'%25';$url.='&chtt=Core+'.$title;return $api.base64_encode($url);} 406 | if($_GET['act'] == "cpu_percentage"){echo "
图片加载慢,请耐心等待!

";foreach( $data as $k => $v ) {echo '';}echo "
";exit();} 407 | 408 | 409 | 410 | // 根据不同系统取得CPU相关信息 411 | 412 | switch(PHP_OS) 413 | { 414 | 415 | case "Linux": 416 | 417 | $sysReShow = (false !== ($sysInfo = sys_linux()))?"show":"none"; 418 | 419 | break; 420 | 421 | 422 | case "FreeBSD": 423 | 424 | $sysReShow = (false !== ($sysInfo = sys_freebsd()))?"show":"none"; 425 | 426 | break; 427 | /* 428 | 429 | case "WINNT": 430 | 431 | $sysReShow = (false !== ($sysInfo = sys_windows()))?"show":"none"; 432 | 433 | break; 434 | */ 435 | 436 | default: 437 | 438 | break; 439 | 440 | } 441 | 442 | 443 | 444 | //linux系统探测 445 | 446 | function sys_linux() 447 | 448 | { 449 | 450 | // CPU 451 | 452 | if (false === ($str = @file("/proc/cpuinfo"))) return false; 453 | 454 | $str = implode("", $str); 455 | 456 | @preg_match_all("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s", $str, $model); 457 | 458 | @preg_match_all("/cpu\s+MHz\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $mhz); 459 | 460 | @preg_match_all("/cache\s+size\s{0,}\:+\s{0,}([\d\.]+\s{0,}[A-Z]+[\r\n]+)/", $str, $cache); 461 | 462 | @preg_match_all("/bogomips\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $bogomips); 463 | 464 | if (false !== is_array($model[1])) 465 | 466 | { 467 | 468 | $res['cpu']['num'] = sizeof($model[1]); 469 | /* 470 | 471 | for($i = 0; $i < $res['cpu']['num']; $i++) 472 | 473 | { 474 | 475 | $res['cpu']['model'][] = $model[1][$i].' ('.$mhz[1][$i].')'; 476 | 477 | $res['cpu']['mhz'][] = $mhz[1][$i]; 478 | 479 | $res['cpu']['cache'][] = $cache[1][$i]; 480 | 481 | $res['cpu']['bogomips'][] = $bogomips[1][$i]; 482 | 483 | }*/ 484 | if($res['cpu']['num']==1) 485 | $x1 = ''; 486 | else 487 | $x1 = ' ×'.$res['cpu']['num']; 488 | $mhz[1][0] = ' | 频率:'.$mhz[1][0]; 489 | $cache[1][0] = ' | 二级缓存:'.$cache[1][0]; 490 | $bogomips[1][0] = ' | Bogomips:'.$bogomips[1][0]; 491 | $res['cpu']['model'][] = $model[1][0].$mhz[1][0].$cache[1][0].$bogomips[1][0].$x1; 492 | 493 | if (false !== is_array($res['cpu']['model'])) $res['cpu']['model'] = implode("
", $res['cpu']['model']); 494 | 495 | if (false !== is_array($res['cpu']['mhz'])) $res['cpu']['mhz'] = implode("
", $res['cpu']['mhz']); 496 | 497 | if (false !== is_array($res['cpu']['cache'])) $res['cpu']['cache'] = implode("
", $res['cpu']['cache']); 498 | 499 | if (false !== is_array($res['cpu']['bogomips'])) $res['cpu']['bogomips'] = implode("
", $res['cpu']['bogomips']); 500 | 501 | } 502 | 503 | 504 | // NETWORK 505 | 506 | 507 | // UPTIME 508 | 509 | if (false === ($str = @file("/proc/uptime"))) return false; 510 | 511 | $str = explode(" ", implode("", $str)); 512 | 513 | $str = trim($str[0]); 514 | 515 | $min = $str / 60; 516 | 517 | $hours = $min / 60; 518 | 519 | $days = floor($hours / 24); 520 | 521 | $hours = floor($hours - ($days * 24)); 522 | 523 | $min = floor($min - ($days * 60 * 24) - ($hours * 60)); 524 | 525 | if ($days !== 0) $res['uptime'] = $days."天"; 526 | 527 | if ($hours !== 0) $res['uptime'] .= $hours."小时"; 528 | 529 | $res['uptime'] .= $min."分钟"; 530 | 531 | 532 | // MEMORY 533 | 534 | if (false === ($str = @file("/proc/meminfo"))) return false; 535 | 536 | $str = implode("", $str); 537 | 538 | preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buf); 539 | preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers); 540 | 541 | 542 | $res['memTotal'] = round($buf[1][0]/1024, 2); 543 | 544 | $res['memFree'] = round($buf[2][0]/1024, 2); 545 | 546 | $res['memBuffers'] = round($buffers[1][0]/1024, 2); 547 | $res['memCached'] = round($buf[3][0]/1024, 2); 548 | 549 | $res['memUsed'] = $res['memTotal']-$res['memFree']; 550 | 551 | $res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memUsed']/$res['memTotal']*100,2):0; 552 | 553 | 554 | $res['memRealUsed'] = $res['memTotal'] - $res['memFree'] - $res['memCached'] - $res['memBuffers']; //真实内存使用 555 | $res['memRealFree'] = $res['memTotal'] - $res['memRealUsed']; //真实空闲 556 | $res['memRealPercent'] = (floatval($res['memTotal'])!=0)?round($res['memRealUsed']/$res['memTotal']*100,2):0; //真实内存使用率 557 | 558 | $res['memCachedPercent'] = (floatval($res['memCached'])!=0)?round($res['memCached']/$res['memTotal']*100,2):0; //Cached内存使用率 559 | 560 | $res['swapTotal'] = round($buf[4][0]/1024, 2); 561 | 562 | $res['swapFree'] = round($buf[5][0]/1024, 2); 563 | 564 | $res['swapUsed'] = round($res['swapTotal']-$res['swapFree'], 2); 565 | 566 | $res['swapPercent'] = (floatval($res['swapTotal'])!=0)?round($res['swapUsed']/$res['swapTotal']*100,2):0; 567 | 568 | 569 | // LOAD AVG 570 | 571 | if (false === ($str = @file("/proc/loadavg"))) return false; 572 | 573 | $str = explode(" ", implode("", $str)); 574 | 575 | $str = array_chunk($str, 4); 576 | 577 | $res['loadAvg'] = implode(" ", $str[0]); 578 | 579 | 580 | return $res; 581 | 582 | } 583 | 584 | 585 | 586 | //FreeBSD系统探测 587 | 588 | function sys_freebsd() 589 | { 590 | 591 | //CPU 592 | 593 | if (false === ($res['cpu']['num'] = get_key("hw.ncpu"))) return false; 594 | 595 | $res['cpu']['model'] = get_key("hw.model"); 596 | 597 | //LOAD AVG 598 | 599 | if (false === ($res['loadAvg'] = get_key("vm.loadavg"))) return false; 600 | 601 | //UPTIME 602 | 603 | if (false === ($buf = get_key("kern.boottime"))) return false; 604 | 605 | $buf = explode(' ', $buf); 606 | 607 | $sys_ticks = time() - intval($buf[3]); 608 | 609 | $min = $sys_ticks / 60; 610 | 611 | $hours = $min / 60; 612 | 613 | $days = floor($hours / 24); 614 | 615 | $hours = floor($hours - ($days * 24)); 616 | 617 | $min = floor($min - ($days * 60 * 24) - ($hours * 60)); 618 | 619 | if ($days !== 0) $res['uptime'] = $days."天"; 620 | 621 | if ($hours !== 0) $res['uptime'] .= $hours."小时"; 622 | 623 | $res['uptime'] .= $min."分钟"; 624 | 625 | //MEMORY 626 | 627 | if (false === ($buf = get_key("hw.physmem"))) return false; 628 | 629 | $res['memTotal'] = round($buf/1024/1024, 2); 630 | 631 | 632 | $str = get_key("vm.vmtotal"); 633 | 634 | preg_match_all("/\nVirtual Memory[\:\s]*\(Total[\:\s]*([\d]+)K[\,\s]*Active[\:\s]*([\d]+)K\)\n/i", $str, $buff, PREG_SET_ORDER); 635 | 636 | preg_match_all("/\nReal Memory[\:\s]*\(Total[\:\s]*([\d]+)K[\,\s]*Active[\:\s]*([\d]+)K\)\n/i", $str, $buf, PREG_SET_ORDER); 637 | 638 | 639 | $res['memRealUsed'] = round($buf[0][2]/1024, 2); 640 | 641 | $res['memCached'] = round($buff[0][2]/1024, 2); 642 | 643 | $res['memUsed'] = round($buf[0][1]/1024, 2) + $res['memCached']; 644 | 645 | $res['memFree'] = $res['memTotal'] - $res['memUsed']; 646 | 647 | $res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memUsed']/$res['memTotal']*100,2):0; 648 | 649 | 650 | $res['memRealPercent'] = (floatval($res['memTotal'])!=0)?round($res['memRealUsed']/$res['memTotal']*100,2):0; 651 | 652 | 653 | return $res; 654 | 655 | } 656 | 657 | 658 | 659 | //取得参数值 FreeBSD 660 | 661 | function get_key($keyName) 662 | { 663 | 664 | return do_command('sysctl', "-n $keyName"); 665 | 666 | } 667 | 668 | 669 | 670 | //确定执行文件位置 FreeBSD 671 | 672 | function find_command($commandName) 673 | { 674 | 675 | $path = array('/bin', '/sbin', '/usr/bin', '/usr/sbin', '/usr/local/bin', '/usr/local/sbin'); 676 | 677 | foreach($path as $p) 678 | { 679 | 680 | if (@is_executable("$p/$commandName")) return "$p/$commandName"; 681 | 682 | } 683 | 684 | return false; 685 | 686 | } 687 | 688 | 689 | 690 | //执行系统命令 FreeBSD 691 | 692 | function do_command($commandName, $args) 693 | { 694 | 695 | $buffer = ""; 696 | 697 | if (false === ($command = find_command($commandName))) return false; 698 | 699 | if ($fp = @popen("$command $args", 'r')) 700 | { 701 | 702 | while (!@feof($fp)) 703 | { 704 | 705 | $buffer .= @fgets($fp, 4096); 706 | 707 | } 708 | 709 | return trim($buffer); 710 | 711 | } 712 | 713 | return false; 714 | 715 | } 716 | 717 | 718 | 719 | //windows系统探测 720 | 721 | function sys_windows() 722 | { 723 | 724 | if (PHP_VERSION >= 5) 725 | { 726 | 727 | $objLocator = new COM("WbemScripting.SWbemLocator"); 728 | 729 | $wmi = $objLocator->ConnectServer(); 730 | 731 | $prop = $wmi->get("Win32_PnPEntity"); 732 | 733 | } 734 | else 735 | { 736 | return false; 737 | 738 | } 739 | 740 | 741 | 742 | //CPU 743 | 744 | $cpuinfo = GetWMI($wmi,"Win32_Processor", array("Name","L2CacheSize","NumberOfCores")); 745 | 746 | $res['cpu']['num'] = $cpuinfo[0]['NumberOfCores']; 747 | 748 | if (null == $res['cpu']['num']) 749 | { 750 | 751 | $res['cpu']['num'] = 1; 752 | 753 | }/* 754 | 755 | for ($i=0;$i<$res['cpu']['num'];$i++) 756 | { 757 | 758 | $res['cpu']['model'] .= $cpuinfo[0]['Name']."
"; 759 | 760 | $res['cpu']['cache'] .= $cpuinfo[0]['L2CacheSize']."
"; 761 | 762 | }*/ 763 | $cpuinfo[0]['L2CacheSize'] = ' ('.$cpuinfo[0]['L2CacheSize'].')'; 764 | if($res['cpu']['num']==1) 765 | $x1 = ''; 766 | else 767 | $x1 = ' ×'.$res['cpu']['num']; 768 | $res['cpu']['model'] = $cpuinfo[0]['Name'].$cpuinfo[0]['L2CacheSize'].$x1; 769 | 770 | // SYSINFO 771 | 772 | $sysinfo = GetWMI($wmi,"Win32_OperatingSystem", array('LastBootUpTime','TotalVisibleMemorySize','FreePhysicalMemory','Caption','CSDVersion','SerialNumber','InstallDate')); 773 | 774 | $sysinfo[0]['Caption']=iconv('GBK', 'UTF-8',$sysinfo[0]['Caption']); 775 | 776 | $sysinfo[0]['CSDVersion']=iconv('GBK', 'UTF-8',$sysinfo[0]['CSDVersion']); 777 | 778 | $res['win_n'] = $sysinfo[0]['Caption']." ".$sysinfo[0]['CSDVersion']." 序列号:{$sysinfo[0]['SerialNumber']} 于".date('Y年m月d日H:i:s',strtotime(substr($sysinfo[0]['InstallDate'],0,14)))."安装"; 779 | 780 | //UPTIME 781 | 782 | $res['uptime'] = $sysinfo[0]['LastBootUpTime']; 783 | 784 | 785 | $sys_ticks = 3600*8 + time() - strtotime(substr($res['uptime'],0,14)); 786 | 787 | $min = $sys_ticks / 60; 788 | 789 | $hours = $min / 60; 790 | 791 | $days = floor($hours / 24); 792 | 793 | $hours = floor($hours - ($days * 24)); 794 | 795 | $min = floor($min - ($days * 60 * 24) - ($hours * 60)); 796 | 797 | if ($days !== 0) $res['uptime'] = $days."天"; 798 | 799 | if ($hours !== 0) $res['uptime'] .= $hours."小时"; 800 | 801 | $res['uptime'] .= $min."分钟"; 802 | 803 | 804 | //MEMORY 805 | 806 | $res['memTotal'] = round($sysinfo[0]['TotalVisibleMemorySize']/1024,2); 807 | 808 | $res['memFree'] = round($sysinfo[0]['FreePhysicalMemory']/1024,2); 809 | 810 | $res['memUsed'] = $res['memTotal']-$res['memFree']; //上面两行已经除以1024,这行不用再除了 811 | 812 | $res['memPercent'] = round($res['memUsed'] / $res['memTotal']*100,2); 813 | 814 | 815 | $swapinfo = GetWMI($wmi,"Win32_PageFileUsage", array('AllocatedBaseSize','CurrentUsage')); 816 | 817 | 818 | // LoadPercentage 819 | 820 | $loadinfo = GetWMI($wmi,"Win32_Processor", array("LoadPercentage")); 821 | 822 | $res['loadAvg'] = $loadinfo[0]['LoadPercentage']; 823 | 824 | 825 | return $res; 826 | 827 | } 828 | 829 | 830 | 831 | function GetWMI($wmi,$strClass, $strValue = array()) 832 | { 833 | 834 | $arrData = array(); 835 | 836 | 837 | $objWEBM = $wmi->Get($strClass); 838 | 839 | $arrProp = $objWEBM->Properties_; 840 | 841 | $arrWEBMCol = $objWEBM->Instances_(); 842 | 843 | foreach($arrWEBMCol as $objItem) 844 | { 845 | 846 | @reset($arrProp); 847 | 848 | $arrInstance = array(); 849 | 850 | foreach($arrProp as $propItem) 851 | { 852 | 853 | eval("\$value = \$objItem->" . $propItem->Name . ";"); 854 | 855 | if (empty($strValue)) 856 | { 857 | 858 | $arrInstance[$propItem->Name] = trim($value); 859 | 860 | } 861 | else 862 | { 863 | 864 | if (in_array($propItem->Name, $strValue)) 865 | { 866 | 867 | $arrInstance[$propItem->Name] = trim($value); 868 | 869 | } 870 | 871 | } 872 | 873 | } 874 | 875 | $arrData[] = $arrInstance; 876 | 877 | } 878 | 879 | return $arrData; 880 | 881 | } 882 | 883 | 884 | 885 | //比例条 886 | 887 | function bar($percent) 888 | { 889 | 890 | ?> 891 | 892 |
 
893 | 894 | "$du",'freeSpace'=>"$df",'hdPercent'=>"$hdPercent",'barhdPercent'=>"$hdPercent%",'TotalMemory'=>"$mt",'UsedMemory'=>"$mu",'FreeMemory'=>"$mf",'CachedMemory'=>"$mc",'Buffers'=>"$mb",'TotalSwap'=>"$st",'swapUsed'=>"$su",'swapFree'=>"$sf",'loadAvg'=>"$load",'uptime'=>"$uptime",'freetime'=>"$freetime",'bjtime'=>"$bjtime",'stime'=>"$stime",'memRealPercent'=>"$memRealPercent",'memRealUsed'=>"$memRealUsed",'memRealFree'=>"$memRealFree",'memPercent'=>"$memPercent%",'memCachedPercent'=>"$memCachedPercent",'barmemCachedPercent'=>"$memCachedPercent%",'swapPercent'=>"$swapPercent",'barmemRealPercent'=>"$memRealPercent%",'barswapPercent'=>"$swapPercent%",'NetOut2'=>"$NetOut[2]",'NetOut3'=>"$NetOut[3]",'NetOut4'=>"$NetOut[4]",'NetOut5'=>"$NetOut[5]",'NetOut6'=>"$NetOut[6]",'NetOut7'=>"$NetOut[7]",'NetOut8'=>"$NetOut[8]",'NetOut9'=>"$NetOut[9]",'NetOut10'=>"$NetOut[10]",'NetInput2'=>"$NetInput[2]",'NetInput3'=>"$NetInput[3]",'NetInput4'=>"$NetInput[4]",'NetInput5'=>"$NetInput[5]",'NetInput6'=>"$NetInput[6]",'NetInput7'=>"$NetInput[7]",'NetInput8'=>"$NetInput[8]",'NetInput9'=>"$NetInput[9]",'NetInput10'=>"$NetInput[10]",'NetOutSpeed2'=>"$NetOutSpeed[2]",'NetOutSpeed3'=>"$NetOutSpeed[3]",'NetOutSpeed4'=>"$NetOutSpeed[4]",'NetOutSpeed5'=>"$NetOutSpeed[5]",'NetInputSpeed2'=>"$NetInputSpeed[2]",'NetInputSpeed3'=>"$NetInputSpeed[3]",'NetInputSpeed4'=>"$NetInputSpeed[4]",'NetInputSpeed5'=>"$NetInputSpeed[5]"); 976 | 977 | $jarr=json_encode($arr); 978 | $_GET['callback'] = htmlspecialchars($_GET['callback']); 979 | 980 | echo $_GET['callback'],'(',$jarr,')'; 981 | 982 | exit; 983 | 984 | } 985 | 986 | ?> 987 | 988 | 989 | 990 | 991 | 992 | 993 | <?php echo $title.$version; ?> 994 | 995 | 996 | 997 | 998 | 999 | 1040 | 1041 | 1042 | 1043 | 1171 | 1172 | 1173 | 1174 | 1175 | 1176 | 1177 |
1178 | 1179 | 1180 | 1181 | 1182 | 1183 | 1184 | 1185 | 1186 | 1187 | 1188 | 1189 | 1190 | 1191 | 1192 | 1193 |
PHP参数组件支持第三方组件数据库支持性能检测网速检测MySQL检测函数检测邮件检测
1194 | 1195 | 1196 | 1197 | 1198 | 1199 | 1200 | 1201 | 1202 | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | 1210 | 1211 | 1212 | 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 1221 | 1222 | 1223 | 1224 | 1225 | 1226 | 1227 | 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 1244 | 1245 | 1246 | 1247 | 1248 | 1249 | 1250 | 1251 | 1252 | 1253 | 1254 | 1255 | 1256 | 1257 | 1258 | 1259 | 1260 | 1261 | 1262 | 1263 | 1264 | 1265 | 1266 | 1267 |
服务器参数
服务器域名/IP地址 - ()  你的IP地址是:
服务器标识
服务器操作系统  内核版本:服务器解译引擎
服务器语言服务器端口
服务器主机名绝对路径
管理员邮箱探针路径
1268 | 1269 | 1270 | 1271 | 1272 | 1273 | 1274 | 1275 | 1276 | 1277 | 1278 | 1279 | 1280 | 1281 | 1282 | 1283 | 1284 | 1285 | 1286 | 1287 | 1288 | 1289 | 1290 | 1291 | 1292 | 1293 | 1294 | 1295 | 1296 | 1297 | 1299 | 1300 | 1301 | 1302 | 1309 | 1310 | 1311 | 1312 | 1313 | 1314 | 1394 | 1395 | 1396 | 1397 | 1398 | 1399 | 1400 | 1401 |
服务器实时数据
服务器当前时间服务器已运行时间
CPU型号 [核]
CPU使用状况查看图表";}else{echo "暂时只支持Linux系统";}?> 1298 |
硬盘使用状况 1303 | 总空间  G, 1304 | 已用  G, 1305 | 空闲  G, 1306 | 使用率 % 1307 |
 
1308 |
内存使用状况 1315 | 1316 | 1335 | 1336 | 物理内存:共 1337 | 1338 | 1339 | 1340 | , 已用 1341 | 1342 | 1343 | 1344 | , 空闲 1345 | 1346 | 1347 | 1348 | , 使用率 1349 | 1350 | 1351 | 1352 |
 
1353 | 0) 1356 | { 1357 | ?> 1358 | Cache化内存为 1359 | , 使用率 1360 | 1361 | % | Buffers缓冲为 1362 |
 
1363 | 1364 | 真实内存使用 1365 | 1366 | , 真实内存空闲 1367 | 1368 | , 使用率 1369 | 1370 | % 1371 |
 
1372 | 0) 1376 | { 1377 | ?> 1378 | SWAP区:共 1379 | 1380 | , 已使用 1381 | 1382 | , 空闲 1383 | 1384 | , 使用率 1385 | 1386 | % 1387 |
 
1388 | 1389 | 1392 | 1393 |
系统平均负载
1402 | 1403 | 1404 | 1405 | 1406 | 1407 | 1408 | 1409 | 1410 | 1411 | 1412 | 1413 | 1414 | 1415 | 1416 | 1417 | 1418 | 1419 | 1420 | 1421 | 1422 | 1423 | 1424 | 1425 | 1426 | 1427 | 1428 | 1429 |
网络使用状况
: 入网: 实时: 0B/s出网: 实时: 0B/s
1430 | 1431 | 1432 | 1433 | 1434 | 1435 | 1436 | 1437 | 1438 | 1439 | 1440 | 1441 | 1442 | 1443 | 1444 | 1445 | 1466 | 1467 | 1468 | 1469 |
PHP已编译模块检测
1446 | 1447 | $value) { 1452 | 1453 | if ($key!=0 && $key%13==0) { 1454 | 1455 | echo '
'; 1456 | 1457 | } 1458 | 1459 | echo "$value  "; 1460 | 1461 | } 1462 | 1463 | ?>
1464 | 1465 |
1470 | 1471 | 1472 | 1473 | 1474 | 1475 | 1476 | 1477 | 1478 | 1479 | 1480 | 1481 | 1494 | 1495 | 1496 | 1497 | 1498 | 1499 | 1500 | 1501 | 1502 | 1503 | 1504 | 1505 | 1506 | 1507 | 1508 | 1509 | 1510 | 1511 | 1512 | 1513 | 1514 | 1515 | 1516 | 1517 | 1518 | 1519 | 1520 | 1521 | 1522 | 1523 | 1524 | 1525 | 1526 | 1527 | 1528 | 1529 | 1530 | 1531 | 1532 | 1533 | 1534 | 1535 | 1536 | 1537 | 1538 | 1539 | 1540 | 1541 | 1542 | 1543 | 1544 | 1545 | 1546 | 1547 | 1548 | 1549 | 1550 | 1551 | 1552 | 1553 | 1554 | 1555 | 1556 | 1557 | 1558 | 1559 | 1560 | 1561 | 1562 | 1563 | 1564 | 1565 | 1566 | 1567 | 1568 | 1569 | 1570 | 1571 | 1572 | 1573 | 1574 | 1575 | 1576 | 1577 | 1578 | 1579 | 1580 | 1581 | 1582 | 1583 | 1584 | 1585 | 1586 | 1587 | 1588 | 1589 | 1590 | 1591 | 1592 | 1593 | 1594 | 1595 | 1596 | 1597 | 1598 | 1599 | 1600 | 1601 | 1602 | 1603 | 1604 | 1605 | 1606 | 1607 | 1608 | 1609 | 1610 | 1611 | 1612 | 1613 | 1614 | 1615 | 1616 | 1617 | 1618 | 1619 | 1620 | 1621 | 1622 | 1623 | 1624 | 1625 | 1626 | 1627 | 1628 | 1629 | 1630 | 1631 | 1632 | 1633 | 1634 | 1635 | 1636 | 1637 | 1638 | 1639 | 1640 | 1641 | 1642 | 1643 | 1644 | 1645 | 1646 | 1647 | 1648 | 1649 | 1650 | 1651 | 1652 | 1653 | 1654 | 1655 | 1656 | 1657 | 1658 | 1659 | 1660 | 1661 | 1662 | 1663 | 1664 | 1665 | 1666 | 1667 | 1668 | 1669 | 1670 | 1671 | 1672 | 1673 | 1674 | 1675 | 1676 | 1677 | 1678 | 1679 | 1680 | 1702 | 1703 | 1704 |
PHP相关参数
PHP信息(phpinfo): 1482 | 1483 | 1490 | 1491 | ×' : "PHPINFO"; ?> 1492 | 1493 | PHP版本(php_version):
PHP运行方式:脚本占用最大内存(memory_limit):
PHP安全模式(safe_mode):POST方法提交最大限制(post_max_size):
上传文件最大限制(upload_max_filesize):浮点型数据显示的有效位数(precision):
脚本超时时间(max_execution_time):socket超时时间(default_socket_timeout):
PHP页面根目录(doc_root):用户根目录(user_dir):
dl()函数(enable_dl):指定包含文件目录(include_path):
显示错误信息(display_errors):自定义全局变量(register_globals):
数据反斜杠转义(magic_quotes_gpc):"<?...?>"短标签(short_open_tag):
"<% %>"ASP风格标记(asp_tags):忽略重复错误信息(ignore_repeated_errors):
忽略重复的错误源(ignore_repeated_source):报告内存泄漏(report_memleaks):
自动字符串转义(magic_quotes_gpc):外部字符串自动转义(magic_quotes_runtime):
打开远程文件(allow_url_fopen):声明argv和argc变量(register_argc_argv):
Cookie 支持:√' : '×';?>拼写检查(ASpell Library):
高精度数学运算(BCMath):PREL相容语法(PCRE):
PDF文档支持:SNMP网络管理协议:
VMailMgr邮件处理:Curl支持:
SMTP支持:√' : '×';?>SMTP地址:×';?>
默认支持函数(enable_functions):请点这里查看详细!
被禁用的函数(disable_functions): 1681 | ×'; 1686 | } 1687 | else 1688 | { 1689 | //echo $disFuns; 1690 | $disFuns_array = explode(',',$disFuns); 1691 | foreach ($disFuns_array as $key=>$value) 1692 | { 1693 | if ($key!=0 && $key%5==0) { 1694 | echo '
'; 1695 | } 1696 | echo "$value  "; 1697 | } 1698 | } 1699 | 1700 | ?> 1701 |
1705 | 1706 | 1707 | 1708 | 1709 | 1710 | 1711 | 1712 | 1713 | 1714 | 1715 | 1716 | 1717 | 1718 | 1719 | 1720 | 1721 | 1722 | 1723 | 1724 | 1725 | 1726 | 1727 | 1728 | 1729 | 1730 | 1731 | 1732 | 1733 | 1734 | 1735 | 1736 | 1737 | 1738 | 1739 | 1740 | 1741 | 1742 | 1744 | 1745 | 1746 | 1747 | 1748 | 1749 | 1750 | 1751 | 1752 | 1753 | 1754 | 1755 | 1768 | 1769 | 1770 | 1771 | 1772 | 1773 | 1774 | 1775 | 1776 | 1777 | 1778 | 1779 | 1780 | 1781 | 1782 | 1783 | 1784 | 1785 | 1786 | 1787 | 1788 | 1789 | 1790 | 1791 | 1792 | 1793 | 1794 | 1795 | 1796 | 1797 | 1798 | 1799 | 1800 | 1801 | 1802 | 1803 | 1804 | 1805 | 1806 | 1807 | 1808 | 1809 | 1810 | 1811 | 1812 | 1813 | 1814 | 1815 | 1816 | 1817 | 1818 | 1819 | 1820 | 1821 | 1822 | 1823 | 1824 | 1825 | 1826 | 1827 | 1828 | 1829 | 1830 | 1831 | 1832 | 1833 | 1834 | 1835 |
组件支持
FTP支持:XML解析支持:
Session支持:Socket支持:
Calendar支持 1743 | 允许URL打开文件:
GD库支持: 1756 | 1757 | ×';} 1766 | 1767 | ?>压缩文件支持(Zlib):
IMAP电子邮件系统函数库:历法运算函数库:
正则表达式函数库:WDDX支持:
Iconv编码转换:mbstring:
高精度数学运算:LDAP目录协议:
MCrypt加密处理:哈稀计算:
1836 | 1837 | 1838 | 1839 | 1840 | 1841 | 1842 | 1843 | 1844 | 1858 | 1859 | 1860 | 1861 | 1862 | 1863 | 1864 | 1865 | 1866 | 1867 | 1868 | 1869 | 1870 | 1871 | 1872 |
第三方组件
Zend版本×';}else{echo $zend_version;}?> 1845 | 2) 1849 | { 1850 | echo "ZendGuardLoader[启用]"; 1851 | } 1852 | else 1853 | { 1854 | echo "Zend Optimizer"; 1855 | } 1856 | ?> 1857 | 2){echo (get_cfg_var("zend_loader.enable"))?'':'×';} else{if(function_exists('zend_optimizer_version')){ echo zend_optimizer_version();}else{ echo (get_cfg_var("zend_optimizer.optimization_level")||get_cfg_var("zend_extension_manager.optimizer_ts")||get_cfg_var("zend.ze1_compatibility_mode")||get_cfg_var("zend_extension_ts"))?'':'×';}}?>
eAccelerator×";} ?>ioncube×";}?>
XCache×";} ?>APC×";} ?>
1873 | 1874 | 1875 | 1876 | 1877 | 1878 | 1879 | 1880 | 1881 | 1882 | 1883 | 1884 | 1885 | 1886 | 1887 | 1888 | 1889 | 1890 | 1891 | 1892 | 1893 | 1894 | 1895 | 1896 | 1897 | 1898 | 1899 | 1900 | 1901 | 1902 | 1903 | 1904 | 1905 | 1906 | 1907 | 1908 | 1909 | 1910 | 1911 | 1912 | 1913 | 1914 | 1915 | 1916 | 1917 | 1918 | 1919 | 1920 | 1921 | 1922 | 1923 | 1924 | 1925 | 1926 | 1927 | 1928 | 1929 | 1930 | 1931 | 1932 | 1933 | 1934 | 1935 | 1936 | 1937 | 1938 | 1939 | 1940 | 1941 | 1942 | 1943 | 1944 | 1945 | 1946 | 1947 | 1948 | 1949 | 1950 | 1951 | 1952 | 1953 | 1954 |
数据库支持
MySQL 数据库:ODBC 数据库:
Oracle 数据库:SQL Server 数据库:
dBASE 数据库:mSQL 数据库:
SQLite 数据库:√ ';echo "SQLite3 Ver ";echo $sqliteVer[versionString];}else {echo isfun("sqlite_close");if(isfun("sqlite_close") == '') {echo "  版本: ".@sqlite_libversion();}}?>Hyperwave 数据库:
Postgre SQL 数据库:Informix 数据库:
DBA 数据库:DBM 数据库:
FilePro 数据库:SyBase 数据库:
1955 | 1956 | 1957 | 1958 |
" method="post"> 1959 | 1960 | 1961 | 1962 | 1963 | 1964 | 1965 | 1966 | 1967 | 1968 | 1969 | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | 1979 | 1980 | 1981 | 1982 | 1983 | 1984 | 1985 | 1986 | 1987 | 1988 | 1989 | 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | 2031 | 2032 | 2033 | 2034 | 2035 | 2036 | 2037 | 2038 | 2039 | 2040 | 2041 | 2042 | 2043 | 2044 | 2045 | 2046 | 2047 | 2048 | 2049 | 2050 | 2051 | 2052 | 2053 | 2054 | 2055 | 2056 | 2057 | 2058 | 2059 | 2060 | 2061 | 2062 | 2063 | 2064 | 2065 | 2066 | 2067 | 2068 | 2069 | 2070 | 2071 |
服务器性能检测
参照对象整数运算能力检测
(1+1运算300万次)
浮点运算能力检测
(圆周率开平方300万次)
数据I/O能力检测
(读取10K文件1万次)
CPU信息
美国 LinodeVPS0.357秒0.802秒0.023秒4 x Xeon L5520 @ 2.27GHz
美国 PhotonVPS.com0.431秒1.024秒0.034秒8 x Xeon E5520 @ 2.27GHz
德国 SpaceRich.com0.421秒1.003秒0.038秒4 x Core i7 920 @ 2.67GHz
美国 RiZie.com0.521秒1.559秒0.054秒2 x Pentium4 3.00GHz
埃及 CitynetHost.com0.343秒0.761秒0.023秒2 x Core2Duo E4600 @ 2.40GHz
美国 IXwebhosting.com0.535秒1.607秒0.058秒4 x Xeon E5530 @ 2.40GHz
本台服务器


2072 | 2073 | 2074 | 2075 | 2076 | 2077 | 2078 | 2079 | 2080 | 2081 | 2082 | 2083 | 2084 | 2089 | 2134 | 2135 |
网络速度测试
2085 |
2086 | 向客户端传送1000k字节数据
2087 | 带宽比例按理想值计算 2088 |
2090 | 2091 | 2092 | 2093 | 2094 | 2095 | 2096 | 2097 | 2098 | 2099 | 2100 | 2101 | 2102 | 2103 | 2104 | 2105 | 2106 | 2129 | 2130 |
带宽1M2M3M4M5M6M7M8M9M10M
2107 | 2108 | 2117 | 2126 | 2127 |
">">
2128 |
2131 | ".$_GET['speed']." 毫秒,下载速度:"."".$speed.""." kb/s,需测试多次取平均值,超过10M直接看下载速度":" 未探测 " ?> 2132 | 2133 |
2136 | 2137 | 2138 | 2139 | 2140 | 2141 | 2142 | 2143 | 2144 | 2145 | 2146 | 2147 | 2148 | 2149 | 2160 | 2161 | 2166 | 2167 | 2168 | 2169 |
MySQL数据库连接检测
2150 | 2151 | 地址: 2152 | 2153 | 端口: 2154 | 2155 | 用户名: 2156 | 2157 | 密码: 2158 | 2159 | 2162 | 2163 | 2164 | 2165 |
2170 | 2171 | alert('连接到MySQL数据库正常,版本 v{$v}')"; 2182 | 2183 | } else { 2184 | 2185 | echo ""; 2186 | 2187 | } 2188 | 2189 | } else { 2190 | 2191 | echo ""; 2192 | 2193 | } 2194 | 2195 | } 2196 | 2197 | ?> 2198 | 2199 | 2200 | 2201 | 2202 | 2203 | 2204 | 2205 | 2206 | 2207 | 2208 | 2209 | 2210 | 2211 | 2218 | 2219 | 2224 | 2225 | 2226 | 2227 | alert('$funRe')"; 2232 | 2233 | } 2234 | 2235 | ?> 2236 | 2237 |
函数检测
2212 | 2213 | 请输入您要检测的函数: 2214 | 2215 | 2216 | 2217 | 2220 | 2221 | 2222 | 2223 |
2238 | 2239 | 2240 | 2241 | 2242 | 2243 | 2244 | 2245 | 2246 | 2247 | 2248 | 2249 | 2250 | 2251 | 2258 | 2259 | 2264 | 2265 | 2266 | 2267 | alert('$mailRe')"; 2272 | 2273 | } 2274 | 2275 | ?> 2276 | 2277 |
邮件发送检测
2252 | 2253 | 请输入您要检测的邮件地址: 2254 | 2255 | 2256 | 2257 | 2260 | 2261 | 2262 | 2263 |
2278 | 2279 |
2280 | 2281 | 2282 | 2283 | 2284 | 2285 | 2286 | 2287 | 2288 | 2289 |
Processed in seconds. memory usage.返回顶部
2290 | 2291 |
2292 | 2293 | 2294 | 2295 | 2296 | --------------------------------------------------------------------------------