用SHELL腳本搭建lnmp

前言

本實驗在centos7和rhel7.6中運行成功

需要實驗環境有yum源,nginx-1.18.0.tar,mysql-boost-5.7.30.tar,php-7.4.1.tar包和兩個devel包oniguruma-5.9.5-3.el7.x86_64.rpm和oniguruma-devel-5.9.5-3.el7.x86_64.rpm

腳本內容

#!/bin/bash					 	
#-------------------------------------------	
# Filename:  install_lnmp.sh       	
# Revision:  1.0                      	 
# Lastdate:  2020/7/1                 	
# Author:    海蜘蛛                   	
# Description: lnmp安裝配置 	
#-------------------------------------------
##########################變量聲明#############################
#----------------------------------MySQL-------------------------
M_SFILE=mysql-boost-5.7.30.tar.gz
M_FILE=mysql-5.7.30
M_FILE_DIR=/mysql-5.7.30
M_PREFIX=/usr/local/lnmp/mysql
#---------------------------------nginx--------------------------
N_SFILE=nginx-1.18.0.tar.gz
N_FILE=nginx-1.18.0
N_FILE_DIR=/nginx-1.18.0
N_PREFIX=/usr/local/lnmp/nginx
#----------------------------------php----------------------------
P_SFILE=php-7.4.1.tar.gz
P_FILE=php-7.4.1
P_FILE_DIR=/php-7.4.1
P_PREFIX=/usr/local/lnmp/php
#############################菜單#################################
echo -e '---------------------------'
if [ -z "$1" ];then
        echo "1)編譯安裝Nginx"
        echo "2)編譯安裝MySQL"
        echo "3)編譯安裝PHP"
        echo "4)一鍵安裝lnmp"
        echo "Usage: { /bin/sh $0 1|2|3|4|--help}"
	exit	
fi

if [[ "$1" -eq "help"  ]];then
        echo "Please select Install Menu following:"
        echo "1)編譯安裝Nginx"
        echo "2)編譯安裝MySQL"
        echo "3)編譯安裝PHP"
        echo "4)一鍵安裝lnmp"
        echo "Usage: { /bin/sh $0 1|2|3|4|--help}"
	exit
fi
#############################函數#########################

prepare(){
	# echo "掛載共享文件"
	# mountfile
	echo "拷貝所需要的文件到根目錄"
	copytarfile
	echo "安裝所需要的二進制文件"
	installdevel
	echo "創建所需要的的用戶"
	createuser
	echo "關閉火牆和selinux"
	stopfire
}

# mountfile(){
	# mount /dev/cdrom /softwaresource
	# mount //192.168.1.178/lnmp /mnt/ -o //共享主機ip/共享文件 /mnt/ username=共享主機名,password=*********

# }

copytarfile(){
	cp /mnt/$N_SFILE /
	tar -zxf /$N_SFILE
	cp /mnt/$M_SFILE /
	tar -zxf /$M_SFILE
	cp /mnt/$P_SFILE /
	tar -zxf /$P_SFILE
	cp /mnt/oniguruma-5.9.5-3.el7.x86_64.rpm /
	cp /mnt/oniguruma-devel-5.9.5-3.el7.x86_64.rpm /
	
}

installdevel(){
	yum install -y samba-client
	yum install -y gcc gcc-c++ ncurses-devel bison cmake openssl-devel.x86_64
	yum install -y libxml2-devel.x86_64 sqlite-devel.x86_64 libpng-devel.x86_64 -y
	yum install -y oniguruma-5.9.5-3.el7.x86_64.rpm oniguruma-devel-5.9.5-3.el7.x86_64.rpm
}

createuser(){
	useradd -s /sbin/nologin -M mysql
	useradd -s /sbin/nologin -M nginx
}

stopfire(){
	systemctl stop firewalld
	setenforce 0
}
#————————————————————————————————————————installpackages————————————————————————————————————————————————
installnginx(){
	cd $N_FILE_DIR  && ./configure --prefix=$N_PREFIX --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
	make && make install
}
installmysql(){
	cd $M_FILE_DIR  && cmake -DCMAKE_INSTALL_PREFIX=$M_PREFIX -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql -DMYSQL_TCP_PROT=3306 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=boost/boost_1_59_0/
	make && make install
}
installphp(){
	cd $P_FILE_DIR  && ./configure --prefix=$P_PREFIX --with-config-file-path=/usr/local/lnmp/php/etc --with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets --with-pdo-mysql=/usr/local/lnmp/mysql --enable-gd --without-pear --enable-fpm
	make && make install
}
#——————————————————————————————————————configpackages————————————————————————————————————————————————————
confignginx(){
	
	sed -i '45cindex	index.php index.html index.htm;' $N_PREFIX/conf/nginx.conf
	sed -i '65,68s/#//g' $N_PREFIX/conf/nginx.conf
	sed -i '70,71s/#//g' $N_PREFIX/conf/nginx.conf
	sed -i '70cinclude		fastcgi.conf;' $N_PREFIX/conf/nginx.conf
	ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/bin/
}
configmysql(){
	mkdir $M_PREFIX/data
	chown -R root $M_PREFIX
	chown -R mysql $M_PREFIX/data
	ln -s $M_PREFIX/bin/* /usr/local/bin
	mv /etc/my.cnf /etc/my.cnf.bak
	cp $M_PREFIX/mysql-test/include/default_my.cnf /etc/my.cnf
	cp -a $M_PREFIX/support-files/mysql.server /etc/init.d/mysqld
	chmod +x /etc/init.d/mysqld
	chkconfig mysqld on
}
configphp(){
	cp $P_PREFIX/etc/php-fpm.conf.default $P_PREFIX/etc/php-fpm.conf
	sed -i '/\[global\]/a pid = run/php-fpm.pid' $P_PREFIX/etc/php-fpm.conf
	cd $P_PREFIX/etc/php-fpm.d && cp www.conf.default www.conf	
	sed -i '23cuser = nginx ' $P_PREFIX/etc/php-fpm.d/www.conf
	# 將文件23行替換
	sed -i '24cgroup = nginx ' $P_PREFIX/etc/php-fpm.d/www.conf
	# 將文件24行替換
	cp $P_FILE_DIR/php.ini-production $P_PREFIX/etc/php.ini
	sed -i '/\[data\]/a data.timezone = Asia/Shanghai ' $P_PREFIX/etc/php.ini
	cp $P_FILE_DIR/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
	chmod +x /etc/init.d/php-fpm
}
############################菜單實現#######################
#-----------------------------------install nginx--------------------------
if [[ "$1" -eq "1" ]];then 
	prepare
	echo "最初的準備工作完成"
	installnginx
	echo "nginx安裝完成"
	confignginx
	echo "nginx配置完成"
	nginx
	echo "nginx已經打開"
	touch $N_PREFIX/html/index.php
	cat > $N_PREFIX/html/index.php <<EOF
<?php
phpinfo();
?>
EOF
fi
#-----------------------------------install MySQL-------------------------------
if [[ "$1" -eq "2" ]];then 
	installmysql
	echo "mysql安裝完成"
	configmysql
	echo "mysql配置完成"
	mysqld --user=mysql --initialize-insecure --basedir=$M_PREFIX --datadir=$M_PREFIX/data
	systemctl start mysql.service
	mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '0000';"
	echo "mysql已經打開"
fi
#-----------------------------------install PHP-----------------------------------
if [[ "$1" -eq "3" ]];then 
	installphp
	echo "php安裝完成"
	configphp
	echo "php配置完成"
	/etc/init.d/php-fpm start
	echo "php已經啓動"

fi

#----------------------------------onestepinstall-------------------------------------
if [[ "$1" -eq "4" ]];then 

	prepare
	echo "最初的準備工作完成"
	
	installmysql
	echo "mysql安裝完成"
	configmysql
	echo "mysql配置完成"
	mysqld --user=mysql --initialize-insecure --basedir=$M_PREFIX --datadir=$M_PREFIX/data
	systemctl start mysql.service
	mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '0000';"
	echo "mysql已經打開"
	
	
	installnginx
	echo "nginx安裝完成"
	confignginx
	echo "nginx配置完成"
	nginx
	echo "nginx已經打開"
	touch $N_PREFIX/html/index.php
	cat > $N_PREFIX/html/index.php <<EOF
<?php
phpinfo();
?>
EOF
	
	
	installphp
	echo "php安裝完成"
	configphp
	echo "php配置完成"
	/etc/init.d/php-fpm start
	echo "php已經啓動"
fi

後記

在測試過程中,學會打快照對於實驗的進行非常有用與方便

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章