简单的LNMP一键安装脚本

#!/bin/bash
nginxdir=/usr/local/nginx
phpdir=/usr/local/php
mysqldir=/usr/local/mysql

htdocs=/data/htdocs
mysqldata=/data/mysql
logdir=/data/logs


path=$(cd `dirname $0`; pwd)
src=${path}/Auto_install_lnmp_src
if [ ! -f /usr/bin/lsb_release ];then
	yum install -y redhat-lsb-core wget >> /dev/null 2>&1
	if [ $? -ne 0 ];then
		logError "yum无法使用,请检查网络配置或yum源"
		exit 1
	fi
fi
sysver=$(lsb_release -a |grep Release|awk '{print $2}'|awk -F"." '{print $1}')
function centos6_download() {
mkdir -p $src
wget https://cmake.org/files/v2.4/cmake-2.4.2.tar.gz -P $src
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz -P $src
wget https://jaist.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz -P $src
wget https://jaist.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz -P $src
wget https://jaist.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz -P $src
wget https://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.gz -P $src
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz -P $src
wget http://nginx.org/download/nginx-1.12.2.tar.gz -P $src

wget http://cn.php.net/distributions/php-5.4.41.tar.gz -P $src
wget http://cn.php.net/distributions/php-5.6.36.tar.gz -P $src
wget http://cn.php.net/distributions/php-7.1.17.tar.gz -P $src
}

function centos7_download() {
mkdir -p $src
wget https://cmake.org/files/v3.11/cmake-3.11.1-Linux-x86_64.tar.gz -P $src
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz -P $src
wget https://jaist.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz -P $src
wget https://jaist.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz -P $src
wget https://jaist.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz -P $src
wget https://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.gz -P $src
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz -P $src
wget http://nginx.org/download/nginx-1.12.2.tar.gz -P $src


wget http://cn.php.net/distributions/php-5.4.41.tar.gz -P $src
wget http://cn.php.net/distributions/php-5.6.36.tar.gz -P $src
wget http://cn.php.net/distributions/php-7.1.17.tar.gz -P $src
}

function logInfo()
{
	local datetime="$(date '+%F %T')"	
	echo -e "${datetime} [\033[35mINFO\033[0m] $*"
}

function logOK()
{
	local datetime="$(date '+%F %T')"
	echo -e "${datetime} [\033[32mOK\033[0m] $*"
}

function logError()
{
	local datetime="$(date '+%F %T')"	
	echo -e "${datetime} [\033[31mERROR\033[0m] $*"
}


function install_lib() {
logInfo "开始安装常用软件和依赖关系. . ."
yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd gd-devel  bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel  openssl  openssl-devel libtool libtool-devel libtool-ltdl-devel c-ares libaio >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "依赖库安装完成"
else
	logError "依赖库安装失败"
	exit 1
fi

logInfo "开始安装libiconv. . ."
cd $src
tar -zxf libiconv*.tar.gz
cd libiconv*
./configure --prefix=/usr/local/ >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "libiconv安装完成"
else
	logError "libiconv安装失败"
	exit 1
fi

logInfo "开始安装bison. . ."
cd $src
tar -zxf bison*.tar.gz
cd bison*
./configure >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "bison安装完成"
else
	logError "bison安装失败"
	exit 1
fi

logInfo "开始安装mhash. . ."
cd $src
tar -jxf mhash*.tar.bz2
cd mhash*
./configure >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "mhash安装完成"
else
	logError "mhash安装失败"
	exit 1
fi

logInfo "开始安装libmcrypt. . ."
cd $src
tar -zxf libmcrypt*.tar.gz
cd libmcrypt*
./configure >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "libmcrypt安装完成"
else
	logError "libmcrypt安装失败"
	exit 1
fi
logInfo "开始安装ltdl. . ."
cd libltdl/
./configure --enable-ltdl-install >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "ltdl安装完成"
else
	logError "ltdl安装失败"
	exit 1
fi

logInfo "开始安装mcrypt. . ."
cd $src
tar -zxf mcrypt*tar.gz
cd mcrypt*
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./configure >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "mcrypt安装完成"
else
	logError "mcrypt安装失败"
	exit 1
fi

logInfo "开始安装cmake. . . "
cd $src
if (( "$sysver" == "6" ));then
	tar -zxf cmake-2.8*.tar.gz
	cd cmake-2.8*
	./configure >> $path/install.log 2>&1
	gmake >> $path/install.log 2>&1
	make >> $path/install.log 2>&1
	make install >> $path/install.log 2>&1
	if [ $? -eq 0 ];then 
		logOK "cmake安装完成"
	else
		logError "cmake安装失败"
		exit 1
	fi
elif (( "$sysver" == "7" ));then
	tar -zxf cmake-3.1*.tar.gz
	cd cmake-3.1*
	./configure >> $path/install.log 2>&1
	gmake >> $path/install.log 2>&1
	make >> $path/install.log 2>&1
	make install >> $path/install.log 2>&1
	if [ $? -eq 0 ];then 
		logOK "cmake安装完成"
	else
		logError "cmake安装失败"
		exit 1
	fi	
fi

logInfo "开始安装pcre. . . "
cd $src
tar -zxf pcre*.tar.gz
cd pcre*
./configure >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "pcre安装完成"
else
	logError "pcre安装失败"
	exit 1
fi
ln -s /lib64/libpcre.so.0 /lib64/libpcre.so.1 >>/dev/null 2>&1
}

function install_nginx() {
logInfo "开始安装nginx. . ."
useradd www -s /sbin/nologin >> $path/install.log 2>&1
cd $src
tar -zxf nginx*.tar.gz
cd nginx*
./configure --prefix=${nginxdir} --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "nginx安装完成"
else
	logError "nginx安装失败"
	exit 1
fi
cp $src/conf/nginx.conf ${nginxdir}/conf/nginx.conf
if (( "$sysver" == "6" ));then
	cp $src/conf/nginx /etc/init.d/nginx
	sed -i "s:nginxd=.*$:nginxd=${nginxdir}\/sbin\/nginx:g" /etc/init.d/nginx
	sed -i "s:nginx_config=.*$:nginx_config=${nginxdir}\/conf\/nginx.conf:g" /etc/init.d/nginx
	sed -i "s:nginx_pid=.*$:nginx_pid=${nginxdir}\/logs\/nginx.pid:g" /etc/init.d/nginx
	chmod +x /etc/init.d/nginx
elif (( "$sysver" == "7" ));then
	cp $src/conf/nginx.service /lib/systemd/system
	sed -i "s:ExecStart=.*$:ExecStart=${nginxdir}\/sbin\/nginx:g" /lib/systemd/system/nginx.service
	sed -i "s:ExecReload=.*$:ExecReload=${nginxdir}\/sbin\/nginx -s reload:g" /lib/systemd/system/nginx.service
	sed -i "s:ExecStop=.*$:ExecStop=${nginxdir}\/sbin\/nginx -s stop:g" /lib/systemd/system/nginx.service
fi
mkdir -p ${nginxdir}/conf/vhosts
mkdir -p $htdocs
cp $src/conf/index.conf ${nginxdir}/conf/vhosts/index.conf
cp $src/conf/index.php $htdocs
mkdir -p ${logdir}/www
chown www.www ${logdir}/www -R
chown www.www $htdocs -R
}

function install_mysql55() {
logInfo "开始安装Mysql-5.5.42. . ."
cd $src
useradd mysql -s /sbin/nologin >> $path/install.log 2>&1
mkdir -p ${mysqldata}/data >> $path/install.log 2>&1
mkdir -p ${mysqldata}/binlog >> $path/install.log 2>&1
mkdir -p ${mysqldata}/log >> $path/install.log 2>&1

tar -zxf mysql-5.5*.tar.gz
cd mysql-5.5*
cmake ./ -DCMAKE_INSTALL_PREFIX=${mysqldir} >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "Mysql5.5.42安装完成"
else
	logError "Mysql5.5.42安装失败"
	exit 1
fi
chown mysql.mysql $mysqldir -R
chown mysql.mysql $mysqldata -R
if [ -f /etc/my.cnf ];then
	mv /etc/my.cnf /etc/my.cnf.bak
fi
cp $src/conf/my.cnf.55 /etc/my.cnf
#cp support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
sed -i "s:basedir = .*$:basedir = ${mysqldir}:g" /etc/my.cnf
sed -i "s:datadir = .*$:datadir = ${mysqldata}\/data:g" /etc/my.cnf
sed -i "s:log-error = .*$:log-error = ${mysqldata}\/log\/error.log:g" /etc/my.cnf
sed -i "s:pid-file = .*$:pid-file = ${mysqldata}\/mysql.pid:g" /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
${mysqldir}/scripts/mysql_install_db --user=mysql --datadir=${mysqldata}/data/ --basedir=${mysqldir} >> $path/install 2>&1
if [ $? -eq 0 ];then 
	logOK "Mysql初始化成功"
else
	logError "Mysql初始化失败,请检查配置"
fi
echo "export PATH=\$PATH:${mysqldir}/bin" >> /etc/profile
}


function install_mysql57() {
logInfo "正在安装Mysql5.7.22. . ."
cd $src
useradd mysql -s /sbin/nologin >> $path/install.log 2>&1
mkdir -p ${mysqldata}/data >> $path/install.log 2>&1
mkdir -p ${mysqldata}/binlog >> $path/install.log 2>&1
mkdir -p ${mysqldata}/log >> $path/install.log 2>&1

tar -zxf mysql-boost-5.7*.tar.gz
cd mysql-5.7*
cmake ./ -DCMAKE_INSTALL_PREFIX=${mysqldir} -DWITH_BOOST=boost >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then
	logOK "Mysql5.7.22安装完成"
else
	logError "Mysql5.7.22安装失败"
	exit 1
fi
chown mysql.mysql $mysqldir -R
chown mysql.mysql $mysqldata -R
if [ -f /etc/my.cnf ];then
	mv /etc/my.cnf /etc/my.cnf.bak
fi
cp $src/conf/my.cnf.57 /etc/my.cnf
#cp support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
sed -i "s:basedir = .*$:basedir = ${mysqldir}:g" /etc/my.cnf
sed -i "s:datadir = .*$:datadir = ${mysqldata}\/data:g" /etc/my.cnf
sed -i "s:log-error = .*$:log-error = ${mysqldata}\/log\/error.log:g" /etc/my.cnf
sed -i "s:pid-file = .*$:pid-file = ${mysqldata}\/mysql.pid:g" /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
${mysqldir}/bin/mysqld --initialize --user=mysql --datadir=${mysqldata}/data/ --basedir=${mysqldir} >> $path/install 2>&1
if [ $? -eq 0 ];then 
	logOK "mysql初始化成功"
else
	logError "mysql初始化失败,请检查配置"
fi
echo "export PATH=\$PATH:${mysqldir}/bin" >> /etc/profile
}

function install_php() {
function install_php5() {
while true;
do
	echo "有两版PHP5可安装:"
	echo "1. PHP-5.4.41"
	echo "2. PHP-5.6.36"
	read -p "请输入要安装的PHP5版本(1或2): " phpver

	case $phpver in
	        1)
	        ver=5.4
	        break;
	        ;;
	        2)
	        ver=5.6
	        break;
	        ;;
	        *)
	        echo "xxxxx请重新输入PHP5的版本号xxxxx"
	        echo ""
	        ;;
	esac
done

logInfo "正在安装PHP${ver}"
cd $src
tar -zxf php-${ver}*.tar.gz
cd php-${ver}*
./configure --prefix=${phpdir} --with-config-file-path=${phpdir}/etc  --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-freetype-dir --with-jpeg-dir --with-png-dir --with-libxml-dir --with-iconv=/usr/local/ --with-zlib --with-bz2 --with-mcrypt --with-mhash --with-openssl --with-curl --with-pear --enable-mbstring --enable-gd-native-ttf --enable-zip --enable-ftp --enable-sockets --enable-calendar --enable-bcmath --enable-exif --enable-shmop --enable-fpm --with-fpm-user=www --with-fpm-group=www --disable-debug >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "PHP${ver}安装完成"
else
	logError "PHP${ver}安装失败"
	exit 1
fi
echo "export PATH=\$PATH:$phpdir/bin" >> /etc/profile

#cp php.ini-production ${phpdir}/etc/php.ini
#cp /usr/local/php/etc/php-fpm.conf.default ${phpdir}/etc/php-fpm.conf
#cp $src/conf/php-fpm /etc/init.d/php-fpm
cp $src/conf/php.ini ${phpdir}/etc/php.ini
cp $src/conf/php-fpm.conf ${phpdir}/etc/php-fpm.conf
cp sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
#sed -i "s:prefix=.*$:prefix=${phpdir}:g" /etc/init.d/php-fpm
sed -i "s:php_fpm_BIN=.*$:php_fpm_BIN=${phpdir}\/sbin\/php-fpm:g" /etc/init.d/php-fpm
sed -i "s:php_fpm_CONF=.*$:php_fpm_CONF=${phpdir}\/etc\/php-fpm.conf:g" /etc/init.d/php-fpm
sed -i "s:php_fpm_PID=.*$:php_fpm_PID=${phpdir}\/var\/run\/php-fpm.pid:g" /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
mkdir ${phpdir}/lib/php/extensions/ >> $path/install 2>&1
cd $src
tar -zxf ZendGuardLoader-PHP-${ver}*.tar.gz >> $path/install 2>&1
cd ZendGuardLoader-PHP-${ver}* >> $path/install 2>&1
find -name "ZendGuardLoader.so" -exec cp {} ${phpdir}/lib/php/extensions/ \; >> $path/install 2>&1
sed -i "s:zend_extension=.*$:zend_extension=${phpdir}\/lib\/php\/extensions\/ZendGuardLoader.so:g" ${phpdir}/etc/php.ini
}


function install_php7() {
logInfo "正在安装PHP-7.1"
cd $src
tar -zxf php-7.1*.tar.gz
cd php-7.1*
./configure --prefix=${phpdir} --with-config-file-path=${phpdir}/etc  --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-freetype-dir --with-jpeg-dir --with-png-dir --with-libxml-dir --with-iconv=/usr/local/ --with-zlib --with-bz2 --with-mcrypt --with-mhash --with-openssl --with-curl --with-pear --enable-mbstring --enable-gd-native-ttf --enable-zip --enable-ftp --enable-sockets --enable-calendar --enable-bcmath --enable-exif --enable-shmop --enable-fpm --with-fpm-user=www --with-fpm-group=www --disable-debug >> $path/install.log 2>&1
make >> $path/install.log 2>&1
make install >> $path/install.log 2>&1
if [ $? -eq 0 ];then 
	logOK "PHP7.1安装完成"
else
	logError "PHP7.1安装失败"
	exit 1
fi
echo "export PATH=\$PATH:${phpdir}/bin" >> /etc/profile

cd ${src}/php-7.1*
cp php.ini-production ${phpdir}/etc/php.ini
cp ${phpdir}/etc/php-fpm.conf.default ${phpdir}/etc/php-fpm.conf
cp ${phpdir}/etc/php-fpm.d/www.conf.default ${phpdir}/etc/php-fpm.d/www.conf
#cp $src/conf/php-fpm /etc/init.d/php-fpm
cp sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
sed -i "s:php_fpm_BIN=.*$:php_fpm_BIN=${phpdir}\/sbin\/php-fpm:g" /etc/init.d/php-fpm
sed -i "s:php_fpm_CONF=.*$:php_fpm_CONF=${phpdir}\/etc\/php-fpm.conf:g" /etc/init.d/php-fpm
sed -i "s:php_fpm_PID=.*$:php_fpm_PID=${phpdir}\/var\/run\/php-fpm.pid:g" /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
}

while true;
do
	echo "有两版PHP可安装:"
	echo "1. PHP5"
	echo "2. PHP7"
	read -p "请选择PHP大版本(1或者2): " verphp

	case $verphp in
	        1)
	                install_php5
	                break;
	        ;;
	        2)
	                install_php7
	                break;
	        ;;
	        *)
	                echo "xxxxx请重新输入PHP版本号xxxxx"
	                echo ""
	        ;;
	esac
done

}	

function start_server() {
logInfo "启动 Mysql"
/etc/init.d/mysqld start
logInfo "启动 Nginx"
if (( "$sysver" == "6" ));then
	/etc/init.d/nginx start
elif (( "$sysver" == "7" ));then
	service nginx start
fi
logInfo "启动 php-fpm"
#/usr/local/php/sbin/php-fpm
/etc/init.d/php-fpm start
}

function centos6_install() {
install_lib
install_nginx
install_mysql55
install_php
start_server		
}

function centos7_install() {
#centos7_download
install_lib
install_nginx

while true;
do
	echo "有两版mysql可安装"
	echo "1. Mysql 5.5"
	echo "2. Mysql 5.7"
	read -p "请选择mysql版本(1或者2): " vermysql
	case  $vermysql in
	        1)
	                install_mysql55
	                break;
	        ;;
	        2)
	                install_mysql57
	                break;
	        ;;
	        *)
	                echo "xxxxx请重新输入Mysql版本号xxxxx"
	                echo ""
	        ;;
	esac
done
install_php
start_server		
}

if (( "$sysver" == "6" ));then
	logInfo "检测系统版本为Centos $(lsb_release -a |grep Release|awk '{print $2}'|awk -F"." '{print $1"."$2}'),安装即将开始..."
	centos6_install
elif (( "$sysver" == "7" ));then
	logInfo "检测系统版本为Centos $(lsb_release -a |grep Release|awk '{print $2}'|awk -F"." '{print $1"."$2}'),安装即将开始..."
	centos7_install
else
	logError "不支持的系统版本,退出安装. . ."
	exit 0
fi

猜你喜欢

转载自blog.csdn.net/wangshui898/article/details/81208647