1. 程式人生 > 其它 >LAMP環境一鍵部署

LAMP環境一鍵部署

  1 #!/bin/bash
  2 #用於安裝LAMP環境
  3 
  4 VHOST_COM=lzxlinux.com          #虛擬主機域名
  5 
  6 [ ! -d /software/ ] && mkdir /software
  7 
  8 #功能選擇選單
  9 menu(){
 10         echo -e "\033[31;32m                              LAMP編譯安裝指令碼                                 \033[0m"
 11         echo -e "\033[31;32m================================================================================\033[0m
" 12 echo -e "\033[34m 此指令碼能直接在rhel7.5、Centos 7.5上成功執行 \033[0m" 13 echo -e "\033[33m 安裝包版本: httpd:2.4.39 mysql5.7.24 php7.1.29 \033[0m" 14 echo " 相關依賴包:pcre-devel、openssl-devel、freetype-devel、libmcrypt-devel、bzip2 " 15 echo " perl-devel、libpng-devel、libxml2-devel bzip2-devel libcurl-devel
" 16 echo -e "\033[47;34m------------安裝需聯網下載軟體包,若下載地址失效,需自行更新下載地址------------\033[0m" 17 echo -e "\033[31;32m================================================================================\033[0m" 18 echo -e "\033[34m請注意:\033[0m" 19 echo -e "\033[33m httpd安裝目錄:/usr/local/httpd,日誌目錄:/usr/local/httpd/logs \033[0m
" 20 echo -e "\033[33m mysql安裝目錄:/usr/local/mysql,資料存放目錄:/data/mysql \033[0m" 21 echo -e "\033[33m php安裝目錄:/usr/local/php7 \033[0m" 22 echo -e "\033[31;32m================================================================================\033[0m" 23 echo -e "\033[34m請選擇:\033[0m" 24 echo -e "\033[36m0、安裝依賴包 1、安裝httpd 2、原始碼編譯安裝mysql 3、安裝php \033[0m" 25 echo -e "\033[36m4、整合httpd和php 5、啟動httpd、mysql服務 \033[0m" 26 echo -e "\033[36m6、一鍵安裝並部署lamp 7、退出指令碼 \033[0m" 27 echo -e "\033[31;32m================================================================================\033[0m" 28 echo 29 read -p "請輸入數字:0-5[單獨安裝](單獨安裝需要先安裝依賴包),6[一鍵安裝],7[退出指令碼]: " num 30 } 31 32 #(0)安裝依賴包 33 install_package(){ 34 cd /software 35 36 yum install -y vim-enhanced lrzsz net-tools gcc rsync epel-release wget unzip bzip2 curl bash-completion 37 yum install -y pcre-devel perl-Data-Dumper bzip2-devel openssl-devel gnutls-devel gcc gcc-c++ cmake libaio-devel libxml2-devel freetype-devel 38 yum install -y autoconf libcurl-devel libevent libevent-devel expat-devel numactl libpng-devel libjpeg-devel libmcrypt-devel 39 40 if [ $? -eq 0 ] 41 then 42 sleep 3 43 echo -e "\033[36m==========依賴包安裝成功==========\033[0m" 44 else 45 echo -e "\033[31m**********安裝依賴包失敗,請檢查**********\033[0m" 46 fi 47 } 48 49 #(1)編譯安裝httpd 50 install_httpd(){ 51 cd /software 52 53 #1、安裝依賴包apr和apr-util 54 APR_VERS=apr-1.7.0 55 UTIL_VERS=apr-util-1.6.1 56 57 if [ ! -f $APR_VERS.tar.gz ] 58 then 59 echo -e "\033[34m==========正在下載apr依賴包==========\033[0m" 60 curl -O http://mirrors.cnnic.cn/apache/apr/$APR_VERS.tar.gz 61 fi 62 63 if [ ! -f $UTIL_VERS.tar.gz ] 64 then 65 echo -e "\033[34m==========正在下載apr-util依賴包==========\033[0m" 66 curl -O http://mirrors.cnnic.cn/apache/apr/$UTIL_VERS.tar.gz 67 fi 68 69 [ ! -d $APR_VERS ] && tar zxf $APR_VERS.tar.gz 70 71 cd $APR_VERS 72 73 ./configure --prefix=/usr/local/apr && make && make install 74 75 if [ $? -eq 0 ] 76 then 77 sleep 3 78 echo -e "\033[36m==========apr依賴包編譯安裝成功==========\033[0m" 79 else 80 echo -e "\033[31m**********apr依賴包編譯安裝失敗,請檢查**********\033[0m" 81 exit 1 82 fi 83 84 cd /software 85 86 [ ! -d $UTIL_VERS ] && tar zxf $UTIL_VERS.tar.gz 87 88 cd $UTIL_VERS 89 90 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install 91 92 if [ $? -eq 0 ] 93 then 94 sleep 3 95 echo -e "\033[36m==========apr-util依賴包編譯安裝成功==========\033[0m" 96 else 97 echo -e "\033[31m**********apr-util依賴包編譯安裝失敗,請檢查**********\033[0m" 98 exit 1 99 fi 100 101 #2、定義httpd安裝的版本 102 HTTPD_VERS=httpd-2.4.39 #httpd版本 103 104 #3、下載httpd 105 cd /software 106 107 if [ ! -f $HTTPD_VERS.tar.gz ] 108 then 109 echo -e "\033[34m==========正在下載httpd原始碼包==========\033[0m" 110 curl -O https://mirrors.cnnic.cn/apache/httpd/$HTTPD_VERS.tar.gz 111 fi 112 113 #4、解壓下載包 114 [ ! -d $HTTPD_VERS ] && tar zxf $HTTPD_VERS.tar.gz 115 116 #5、進入httpd解壓後的目錄 117 cd $HTTPD_VERS 118 119 #6、編譯安裝 120 ./configure --prefix=/usr/local/httpd \ 121 --with-apr=/usr/local/apr \ 122 --with-apr-util=/usr/local/apr-util \ 123 --enable-so \ 124 --enable-mods-shared=most && make && make install 125 126 if [ $? -eq 0 ] 127 then 128 sleep 3 129 echo -e "\033[36m==========httpd編譯安裝成功==========\033[0m" 130 else 131 echo -e "\033[31m**********httpd編譯安裝失敗,請檢查**********\033[0m" 132 exit 1 133 fi 134 135 ln -s /usr/local/httpd/bin/apachectl /usr/bin/httpd 136 } 137 138 #(2)原始碼編譯安裝mysql 139 install_mysql(){ 140 cd /software 141 142 VERSION=5.7.24 #mysql版本 143 144 if [ ! -f mysql-$VERSION.tar.gz ] 145 then 146 #下載mysql 147 echo -e "\033[34m==========下載mysql原始碼包==========\033[0m" 148 curl -o mysql-$VERSION.tar.gz https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-$VERSION-linux-glibc2.12-x86_64.tar.gz 149 fi 150 151 # 1、建立mysql使用者 152 id mysql &> /dev/null 153 [ $? -ne 0 ] && useradd -r -s /sbin/nologin mysql 154 155 #2、解壓mysql 156 echo -e "\033[34m==========解壓mysql...==========\033[0m" 157 158 if [ -f mysql-$VERSION.tar.gz ] 159 then 160 tar xvf mysql-$VERSION.tar.gz 161 if [ ! -d /usr/local/mysql ] 162 then 163 mv mysql-$VERSION-*/ /usr/local/mysql 164 else 165 rm -rf /usr/local/mysql 166 mv mysql-$VERSION-*/ /usr/local/mysql 167 fi 168 fi 169 170 #3、建立資料庫資料存放目錄、安裝目錄 171 [ ! -d /data/mysql/ ] && mkdir -pv /data/mysql/ 172 [ ! -f /usr/local/mysql/log/error.log ] && mkdir -pv /usr/local/mysql/log/ && touch /usr/local/mysql/log/error.log 173 chown -R mysql:mysql /data/mysql 174 chown -R mysql:mysql /usr/local/mysql 175 176 #4、初始化 177 178 cd /usr/local/mysql 179 180 if [ $? -eq 0 ] 181 then 182 echo -e "\033[34m==========資料庫開始初始化==========\033[0m" 183 ./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql 184 if [ $? -eq 0 ] 185 then 186 echo -e "\033[36m==========資料庫初始化成功==========\033[0m" 187 else 188 echo -e "\033[31m**********編譯安裝錯誤!初始化失敗**********\033[0m" 189 exit 1 190 fi 191 fi 192 193 #5、配置資料庫配置檔案 194 cat > /etc/my.cnf << EOF 195 [client] 196 port = 3306 197 socket = /usr/local/mysql/tmp/mysql.sock 198 199 [mysql] 200 default-character-set=utf8 201 202 [mysqld] 203 default-storage-engine=INNODB 204 character_set_server=utf8 205 explicit_defaults_for_timestamp 206 basedir=/usr/local/mysql 207 datadir=/data/mysql 208 socket=/usr/local/mysql/tmp/mysql.sock 209 log_error = /usr/local/mysql/log/error.log 210 211 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 212 EOF 213 214 [ ! -f /etc/init.d/mysql ] && \cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql 215 216 sed -i "46s/basedir=/basedir=\/usr\/local\/mysql/" /etc/init.d/mysql 217 sed -i "47s/datadir=/datadir=\/data\/mysql/" /etc/init.d/mysql 218 219 chmod +x /etc/init.d/mysql 220 221 #6、配置環境變數 222 n=`egrep "/usr/local/mysql/bin" /etc/profile |wc -l` 223 224 if [ $n -eq 0 ] 225 then 226 echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile 227 source /etc/profile 228 else 229 source /etc/profile 230 fi 231 232 #7、建立日誌目錄、/var/run/mysqld/ 233 [ ! -d /var/log/mysql/ ] && mkdir /var/log/mysql/ && chown -R mysql:mysql /var/log/mysql/ 234 [ ! -d /var/run/mysqld/ ] && mkdir /var/run/mysqld/ && chown -R mysql:mysql /var/run/mysqld/ 235 [ ! -d /usr/local/mysql/tmp/ ] && mkdir /usr/local/mysql/tmp/ && chown -R mysql:mysql /usr/local/mysql/ 236 237 #8、配置成mysqld服務並啟動 238 cat > /usr/lib/systemd/system/mysqld.service << EOF 239 [Unit] 240 Description=MySQL Server 241 After=network.target 242 After=syslog.target 243 244 [Install] 245 WantedBy=multi-user.target 246 247 [Service] 248 User=mysql 249 Group=mysql 250 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf 251 252 #連線數限制 253 LimitNOFILE=65535 254 LimitNPROC=65535 255 256 #Restart配置可以在程序被kill掉之後,讓systemctl產生新的程序,避免服務掛掉 257 #Restart=always 258 PrivateTmp=false 259 EOF 260 261 systemctl daemon-reload && systemctl enable mysqld && systemctl start mysqld 262 263 if [ $? -eq 0 ] 264 then 265 echo -e "\033[36m==========mysql安裝成功並啟動==========\033[0m" 266 fi 267 268 mysql -uroot -D mysql -e "UPDATE user SET authentication_string=PASSWORD("123456789") WHERE user='root';" 269 mysql -uroot -e "FLUSH PRIVILEGES;" 270 mysql -uroot -p123456789 -e "grant all privileges on *.* to root@'%' identified by '123456789';" 271 272 if [ $? -eq 0 ] 273 then 274 echo -e "\033[36m==========資料庫root密碼修改為123456789成功==========\033[0m" 275 else 276 echo -e "\033[31m**********資料庫root密碼修改為123456789失敗,為空**********\033[0m" 277 fi 278 } 279 280 #(3)編譯安裝php 281 install_php(){ 282 cd /software 283 PHPVERS=7.1.29 #php版本 284 DLOAD_PHP=https://www.php.net/distributions/php-$PHPVERS.tar.bz2 #PHP下載地址 285 286 #1、下載php 287 [ ! -f php-$PHPVERS.tar.bz2 ] && echo -e "\033[36m正在下載php原始碼包...\033[0m" && curl -O $DLOAD_PHP 288 289 #2、解壓php 290 [ ! -d php-$PHPVERS/ ] && tar jxvf php-$PHPVERS.tar.bz2 291 echo -e "\033[36m編譯安裝php需要很長時間,請慢慢等待...\033[0m" 292 sleep 3 293 cd php-$PHPVERS/ 294 295 #3、編譯安裝 296 ./configure --prefix=/usr/local/php7 \ 297 --with-apxs2=/usr/local/httpd/bin/apxs \ 298 --with-config-file-path=/usr/local/php7/etc \ 299 --with-mysql=/usr/local/mysql \ 300 --with-pdo-mysql \ 301 --with-mysqli \ 302 --with-libxml-dir \ 303 --with-gd \ 304 --with-jpeg-dir \ 305 --with-png-dir \ 306 --with-freetype-dir \ 307 --with-iconv-dir \ 308 --with-zlib-dir \ 309 --with-bz2 \ 310 --with-openssl \ 311 --with-mcrypt \ 312 --enable-soap \ 313 --enable-gd-native-ttf \ 314 --enable-mbstring \ 315 --enable-sockets \ 316 --enable-exif && make -j 2 && make -j 2 install 317 318 if [ $? -eq 0 ] 319 then 320 echo -e "\033[36m==========php編譯安裝成功==========\033[0m" 321 else 322 echo -e "\033[31m**********php編譯安裝失敗,請檢查**********\033[0m" 323 exit 1 324 fi 325 326 #4、配置php服務檔案 327 [ ! -d /usr/local/php7/etc/ ] && mkdir /usr/local/php7/etc/ 328 \cp php.ini-production /usr/local/php7/etc/php.ini 329 330 echo -e "\033[36m==========PHP安裝步驟完成==========\033[0m" 331 } 332 333 #(4)整合httpd和php 334 config_lamp(){ 335 cd /usr/local/httpd 336 337 #1、修改httpd配置檔案 338 339 sed -i 's/#ServerName www.example.com:80/ServerName www.example.com:80/' conf/httpd.conf 340 sed -i '205s/Require all denied/Require all granted/' conf/httpd.conf 341 sed -i 's/DirectoryIndex index.html/DirectoryIndex index.html index.php/' conf/httpd.conf 342 343 if [ `grep "AddType application/x-httpd-php .php" conf/httpd.conf |wc -l` -eq 0 ] 344 then 345 sed -i '/AddType application\/x-gzip .gz .tgz/a\ AddType application\/x-httpd-php .php' conf/httpd.conf 346 fi 347 #sed -i 's/#Include conf\/extra\/httpd-vhosts.conf/Include conf\/extra\/httpd-vhosts.conf/' conf/httpd.conf 348 349 #2、配置虛擬主機 350 cat > conf/extra/httpd-vhosts.conf << EOF 351 #<VirtualHost *:80> 352 # ServerAdmin webmaster@$VHOST_COM 353 # DocumentRoot "/usr/local/httpd/docs/$VHOST_COM" 354 # ServerName $VHOST_COM 355 # ServerAlias www.$VHOST_COM 356 # ErrorLog "logs/$VHOST_COM-error_log" 357 # CustomLog "logs/$VHOST_COM-access_log" common 358 #</VirtualHost> 359 EOF 360 [ ! -d /usr/local/httpd/docs/$VHOST_COM ] && mkdir -pv /usr/local/httpd/docs/$VHOST_COM 361 362 #3、關閉SELinux、防火牆 363 setenforce 0 && sed -i 's/enforcing/disabled/g' /etc/selinux/config 364 systemctl stop firewalld && systemctl disable firewalld 365 366 #4、建立測試頁,備份httpd預設的頁面 367 368 cat > htdocs/1.php << EOF 369 <?php 370 echo "php解析正常"; 371 ?> 372 EOF 373 if [ `httpd -M |grep "php7_module (shared)" |wc -l` -eq 1 ] 374 then 375 echo -e "\033[36m==========整合httpd和php成功==========\033[0m" 376 else 377 echo -e "\033[31m**********整合httpd和php失敗,請檢查**********\033[0m" 378 fi 379 } 380 381 #(5)啟動httpd、mysql服務 382 start_service(){ 383 /usr/bin/httpd start #啟動httpd 384 385 if [ $? -eq 0 ] 386 then 387 echo -e "\033[36m==========httpd服務啟動成功==========\033[0m" 388 else 389 echo -e "\033[31m**********httpd服務啟動失敗**********\033[0m" 390 fi 391 392 systemctl start mysqld 393 394 if [ $? -eq 0 ] 395 then 396 sleep 3 397 echo -e "\033[36m==========mysql服務啟動成功==========\033[0m" 398 echo -e "\033[33m檢視埠啟用情況:\033[0m" 399 ss -tnl 400 echo -e "\033[33m埠:80、3306已啟動!\033[0m" 401 echo -e "\033[36m==========編譯安裝lamp已完成==========\033[0m" 402 echo -e "\033[36m--------開啟瀏覽器輸入你的ip/1.php,看看測試頁--------\033[0m" 403 else 404 echo -e "\033[31m**********mysql服務啟動失敗**********\033[0m" 405 fi 406 } 407 408 #指令碼執行入口 409 run_install(){ 410 while true;do 411 menu 412 413 case $num in 414 "0") 415 #0、安裝依賴包 416 echo -e "\033[34m==========安裝依賴包==========\033[0m" 417 install_package 418 ;; 419 "1") 420 #1、編譯安裝httpd 421 echo -e "\033[34m==========編譯安裝httpd==========\033[0m" 422 install_httpd 423 ;; 424 "2") 425 #2、編譯安裝mysql 426 echo -e "\033[34m==========編譯安裝mysql==========\033[0m" 427 install_mysql 428 ;; 429 "3") #3、編譯安裝php 430 echo -e "\033[34m==========編譯安裝php==========\033[0m" 431 install_php 432 ;; 433 "4") #4、整合httpd和php 434 echo -e "\033[34m==========整合httpd和php==========\033[0m" 435 config_lamp 436 ;; 437 "5") #5、啟動httpd、mysql服務 438 echo -e "\033[34m==========啟動httpd、mysql服務==========\033[0m" 439 start_service 440 ;; 441 "6") #6、一鍵編譯安裝lamp 442 echo -e "\033[34m==========一鍵編譯安裝並配置lamp==========\033[0m" 443 install_package 444 install_httpd 445 install_mysql 446 install_php 447 config_lamp 448 start_service 449 exit 0 450 ;; 451 "7") #7、退出指令碼 452 exit 0 453 ;; 454 *) 455 ;; 456 esac 457 done 458 } 459 460 #呼叫指令碼執行入口 461 run_install