前言
本實驗在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
後記
在測試過程中,學會打快照對於實驗的進行非常有用與方便