#!/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