簡單的LNMP一鍵安裝指令碼
阿新 • • 發佈:2018-12-01
#!/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