侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

LNMP自动安装部署脚本

技术  /  管理员 发布于 7年前   177

我们的业务使用了nginx、MySQL、php、和tomcat,写了一个自动化安装这些软件的脚本,虽然网上类似的自动安装脚本很多,但这个是自己写的,特此mark一下,希望能给别人一些参考,同时也灰常欢迎看到的朋友们提些改进意见。话不多说,直接上脚本。

#!/bin/sh  alias echo='echo -e'  ###判断系统,此脚本只适用于64位系统  machine=`uname -m`  if [ $machine != x86_64 ] ;then    echo "\e[1;31m \nyour system is 32bit,but this script is only run on 64bit !\n \e[0m"    exit -1  fi   ###创建保存下载文件的目录  mkdir /usr/local/src/auto_install &> /dev/null  source_dir=/usr/local/src/auto_install  ###定义一个交互式的选择提示function interact {  echo "Please input \"yes\" or \"no\""  read choice  case "$choice" in    no)     exit 0;;    yes)     echo;;    *)   echo "\e[1;31mInput Errot! \e[0m"     exit -1;;  esac}   ### 定义一个函数检查上一条命令的执行状态function check {  if [ $? -ne 0 ];then    echo "\e[1;31m\n the last commond exec failed,please check it !\e[0m \n"  sleep 1  exit -1  fi}### 定义下载各软件的函数(此处我隐藏了我们的下载地址,需各位自行设置下载地址)function download_install_epel {  cd $source_dir  rm -f epel* &> /dev/null  echo "\e[1;32m ---yum install epel repo--- \e[0m \n"      sys_version=`uname -r|cut -d '.' -f 4`  if [ $sys_version = el7 ];then    rpm -qa|grep -i epel > /dev/null    if [ $? -ne 0 ];then     wget -nv http://www.example.com/epel-release-7-2.noarch.rpm     rpm -ivh $source_dir/epel-release-7-1.noarch.rpm     check;    fi  elif [ $sys_version = el6 ];then    rpm -qa|grep -i epel > /dev/null    if [ $? -ne 0 ];then     wget -nv http://www.example.com/epel-release-6-8.noarch.rpm     rpm -ivh $source_dir/epel-release-6-8.noarch.rpm     check;    fi  fi}function download_nginx {  cd $source_dir  echo "\e[1;32m\n ---download nginx-1.4.7---\e[0m \n"  ls nginx-1.4.7.tar.gz &> /dev/null  if [ $? -ne 0 ];then     wget -nv http://www.example.com/nginx-1.4.7.tar.gz     check;  fi}function download_mysql {  cd $source_dir  echo "\e[1;32m\n ---download MySQL-5.5.39---\e[0m \n"  ls mysql-5.5.39-linux2.6-x86_64.tar.gz &> /dev/null  if [ $? -ne 0 ];then     wget -nv http://www.example.com/mysql-5.5.39-linux2.6-x86_64.tar.gz     check;  fi}function download_php {  cd $source_dir  echo "\e[1;32m\n ---download php-5.3.28---\e[0m \n"  ls php-5.3.28.tar.gz &> /dev/null  if [ $? -ne 0 ];then      wget -nv http://www.example.com/php-5.3.28.tar.gz      check;  fi}function download_jre {  cd $source_dir  echo "\e[1;32m ---download jre-6u33-linux-x64.bin---\e[0m"  sleep 1  ls jre-6u33-linux-x64.bin &> /dev/null  if [ $? -ne 0 ];then    wget -nv http://www.example.com/jre-6u33-linux-x64.bin    check;  fi}    ###定义依赖包安装函数function dependence_install {  download_install_epel;  echo "\e[1;32m ---yum install the Dependencies software--- \e[0m \n"   sleep 1  pgrep yum|xargs kill -9 > /dev/null  rm -f /var/run/yum.pid > /dev/null  echo "yum install gcc zlib cmake libxml2 libxml2-devel bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel pspell-devel libmcrypt libmcrypt-devel freetype pcre-devel openssl openssl-devel libaio*"  yum -y install gcc zlib cmake libxml2 libxml2-devel bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel pspell-devel libmcrypt libmcrypt-devel freetype pcre-devel openssl openssl-devel libaio* >/dev/null 2>&1  check;}    ### 定义mysql安装函数###function mysql_install {    ###判断本机是否已在运行mysql,或者开机启动项有没有mysql###    ###判断机器上是否以运行mysql实例  echo "\e[1;32m \n ---check if there is already installed mysql instence---\e[0m\n"  ps -ef|grep -w mysqld|grep -v "grep" &> /dev/null  if [ $? -eq 0 ];then    mysqlbasedir=`ps -ef|grep -w "mysqld"|grep -v "grep"|awk '{print $9}'|tr -d '\-\-'`    mysqldatadir=`ps -ef|grep -w "mysqld"|grep -v "grep"|awk '{print $10}'|tr -d '\-\-'`    echo "\e[1;32m your system has run a mysql instance already \n mysqlbasedir is: "$mysqlbasedir"\n mysqldatadir is: "$mysqldatadir"\n do you still want to install a new mysql-server? \e[0m\n"    interact;  fi    ###判断系统是否已经有rpm方式安装的mysql   echo "MySQL-server-5.5.39-2.el6.x86_64.rpm"|while read line   do     prefix=`echo "$line"|awk -F "-" '{print $1"-"$2}'`   ##to get like "MySQL-server"     rpm -qa|grep -i "$prefix" &> /tmp/check_mysql.log   if [ $? -eq 0 ];then      already_install=`cat /tmp/check_mysql.log|awk -F "-" '{print $1"-"$2"-"$3}'`  ##to get the already installed mysql version      echo "\e[1;31m ---the $already_install is already installed by rpm!--- \n ---Do you really want to install a new mysql?--- \e[0m\n"      interact;     fi   done    ###判断chkconfig里面是否有mysql启动脚本并且为开机启动  chkconfig |grep mysql|awk '{print $5" "$7}'|grep -e "启用" -e "on" &> /dev/null  if [ $? -eq 0 ];then    echo " there is a bootstart mysql script in the chkconfig,please check"    exit 0  fi    ###判断/etc/rc.local文件里是否有mysql启动命令  cat /etc/rc.local|grep "mysqld" &> /dev/null  if [ $? -eq 0 ];then    echo " there is a bootstart mysql commond in the /etc/rc.local,please check it"    exit 0  fi      ######判断结束######  ###检查是否有系统自带的mysql-lib-5.1,有则删除  rpm -qa|grep -i -e "mysql.*5\.1.*"|xargs rpm -e --nodeps 2> /dev/null    ###交互式选择mysql安装路径  echo "\e[1;31m where do you want to install mysql(default is /usr/local/mysql)\e[0m"  read mybasedir  if [ "$mybasedir" = "" ];then    mybasedir=/usr/local/mysql  fi    ###选择data目录  echo "\e[1;31m where do you want to storage mysql data(default is /usr/local/mysql/data)\e[0m"  read mydatadir  if [ "$mydatadir" = "" ];then    mydatadir=/usr/local/mysql/data  fi      ###开始安装mysql  echo "\e[1;32m ---now start to install mysql---\e[0m\n"  sleep 1  #dependence_install;  echo "\e[1;32m ---add user mysql---\e[0m"  useradd mysql -s /sbin/nologin  echo "\e[1;32m\n ---unpack mysql-5.5.39-linux2.6-x86_64.tar.gz---\e[0m"  cd $source_dir  tar zxf mysql-5.5.39-linux2.6-x86_64.tar.gz  check;  rm -rf $mybasedir  mv mysql-5.5.39-linux2.6-x86_64 $mybasedir    ###判断/etc下是否有my.cnf,若有,重命名为my.cnf.bak  ls /etc/my.cnf &> /dev/null  if [ $? = 0 ];then    \mv /etc/my.cnf /etc/my.cnf.bak    echo "\e[1;32m\n ---detected /etc/my.cnf is already exit,rename it to /etc/my.cnf.bak--- \e[0m \n"  fi  cp $mybasedir/support-files/my-huge.cnf /etc/my.cnf    ###拷贝开机启动脚本到/etc/init.d/  ls /etc/init.d/mysql &> /dev/null  if [ $? = 0 ];then    \mv /etc/init.d/mysql /etc/init.d/mysql.bak    echo "\e[1;32m ---detected /etc/init.d/mysql is already exit,rename it to /etc/init.d/mysql.bak---\e[0m"  fi  cp $mybasedir/support-files/mysql.server /etc/init.d/mysql    ###修改/etc/init.d/mysql脚本里面basedir和datadir  sed -i -e "/^basedir*=$/i\basedir=$mybasedir" -e "/^datadir*=$/i\datadir=$mydatadir" /etc/init.d/mysql  sed -i -e '/^basedir*=$/d' -e '/^datadir*=$/d' /etc/init.d/mysql      ###初始化数据库  echo "\e[1;32m\n ---initialize mysql database---\e[0m"  sleep 1  chown -R mysql $mydatadir $mybasedir >/dev/null 2>&1  $mybasedir/scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql --basedir=$mybasedir --datadir=$mydatadir  check;    ###将basedir/bin/添加到PATH  echo "PATH=$PATH:$mybasedir/bin" >> /etc/profile  export PATH=$PATH:$mybasedir/bin  echo "\e[1;32m install mysql success,you can run \"service mysql start\" to start the mysql \n do not forget to set a password for mysql \e[0m"  ###至此mysql安装完毕}  ### 定义nginx安装函数function nginx_install {  echo  echo "\e[1;32m ---start installing nginx,it's basedir is /usr/local/nginx--- \e[0m \n"  sleep 1  cd $source_dir  ls -l |grep "^d"|grep nginx|xargs rm -rf &> /dev/null  tar zxf nginx-1.4.7.tar.gz  check;  cd nginx-1.4.7echo "\e[1;32m ---configure: configure information in /tmp/configure_nginx.log--- \e[0m \n"  sleep 1  ./configure --with-http_stub_status_module --prefix=/usr/local/nginx &> /tmp/configure_nginx.log  check;echo "\e[1;32m ---make: make information in /tmp/make_nginx.log--- \e[0m \n"  sleep 1  make &> /tmp/configure_nginx.log  check;echo "\e[1;32m ---make install: install into /usr/local/nginx--- \e[0m \n"  sleep 1  make install &> /tmp/make_install.log  check;  echo "\e[1;32m nginx is installed successfully \e[0m \n"}  ### 定义php安装函数function php_install {  dependence_install;  cd $source_dir  ls -l |grep "^d"|grep php|xargs rm -rf &> /dev/null  tar zxvf php-5.3.28.tar.gz &> /dev/null  check;  cd php-5.3.28  echo  echo "\e[1;32m ---configure php: information in /tmp/php_configure.log--- \e[0m \n"  echo "./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-iconv-dir=/usr/local --with-zlib --enable-zip --with-curl"  ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-iconv-dir=/usr/local --with-zlib --enable-zip --with-curl &> /tmp/php_configure.log  check;  ###make  echo "\e[1;32m ---make php: information in /tmp/php_make.log--- \e[0m \n"  make &> /tmp/php_make.log  check;  ###make install  echo "\e[1;32m ---make install php: install into /usr/local/php--- \n ---php cofigure file in the /usr/local/php/etc--- \e[0m \n"  make install > /tmp/make_install_php.log  check;  echo "\e[1;32m ---prepare php configure files--- \e[0m \n"  echo "cp $source_dir/php-5.3.28/php.ini-production /usr/local/php/etc/php.ini"  cp php.ini-production /usr/local/php/etc/php.ini  echo "cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf"  cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf  echo "\e[1;32m\n php is installed successfully!\n now,please start php and modification the php.ini \e[0m"}  ###安装jrefunction jre_install {  ###删除系统自带的java  rpm -qa|grep java|xargs rpm -e --nodeps  cd $source_dir  rm -rf jre1.6.0_33 &> /dev/null  chmod +x jre-6u33-linux-x64.bin &> /dev/null  ./jre-6u33-linux-x64.bin >/dev/null 2>&1  check;  ls -d /usr/java  if [ $? -ne 0 ];then    mkdir /usr/java &> /dev/null  else    echo echo "\e[1;31m /usr/java has already exits,move to /usr/java_bak !\e[0m"    mkdir /usr/java_bak &> /dev/null    mv /usr/java/* /usr/java_bak/  fi  mv jre1.6.0_33 /usr/java/  echo "\e[1;32m\n ---add java path to /etc/profile---\e[0m"  sleep 1  echo >>/etc/profile  echo 'JAVA_HOME=/usr/java/jre1.6.0_33'>>/etc/profile  echo 'CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar'>>/etc/profile  echo 'PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$JAVA_HOME/jre/bin'>>/etc/profile  echo 'export PATH JAVA_HOME'>>/etc/profile  source /etc/profile  echo "\e[1;32m\n JRE is installed success !\e[0m"  echo "\e[1;32m\n ---install cronolog---\e[0m"  wget -nv http://www.example.com/cronolog-1.6.2.tar.gz  dependence_install;  tar zxf cronolog-1.6.2.tar.gz  cd cronolog-1.6.2  ./configure &> /tmp/cronolog_configure.log && make > /dev/null && make install > /dev/null  check;  echo "\e[1;32m cronolog is installed success\e[0m\n"}  ###下面开始选择那些软件需要安装echo "\e[1;31m\n ---选择哪些软件需要安装--- \e[0m \n"echo "\e[1;32m \"Nginx\"   INPUT \"1\" \e[0m \n"echo "\e[1;32m \"Mysql\"   INPUT \"2\" \e[0m \n"echo "\e[1;32m \"Php\"    INPUT \"3\" \e[0m \n"echo "\e[1;32m \"JRE\"    INPUT \"4\" \e[0m \n"#echo "\e[1;32m \"Tomcat\"   INPUT \"5\" \e[0m \n"read -p "please choice which software do you want to install ?" input  if [ $input = 1 ];then      download_nginx;      dependence_install;      nginx_install;  elif [ $input = 2 ];then    download_mysql;      mysql_install;  elif [ $input = 3 ];then      echo "\e[1;32m\n php needs mysqlclient \e[0m"      echo "\e[1;32m so if you had already install a mysqlclient\n please make a softlink for all \"libmysqlclient.so.*\" file to both /var/lib64 and /var/lib \e[0m\n"      echo "\e[1;31m Please input your choice\n\e[0m \e[1;32m1: go on by default\(install mysql-client-5.5.39\)\n 2: I will check my \"libmysqlclient.so.*\" file and redo this script later\n 3: I had make the softlinks and I want to going on \e[0m"      read choice      case "$choice" in       1)        cd $sourcedir        echo "\e[1;32m ---download mysql-client rpm files---\e[0m"        wget -nv http://www.example.com/MySQL-client-5.5.39-2.el6.x86_64.rpm        wget -nv http://www.example.com/MySQL-devel-5.5.39-2.el6.x86_64.rpm        wget -nv http://www.example.com/MySQL-shared-5.5.39-2.el6.x86_64.rpm        echo "\e[1;32m\n ---install mysql-client in the way of rpm---\e[0m"        sleep 1        rpm -ivh MySQL-client-5.5.39-2.el6.x86_64.rpm MySQL-devel-5.5.39-2.el6.x86_64.rpm MySQL-shared-5.5.39-2.el6.x86_64.rpm        download_php;        ###make soft link from /usr/lib64/libmysqlclient* to /usr/lib/        ls -l /usr/lib64/libmysqlclient*|grep -v "^l"|awk '{print $NF}'|while read line         do          usrlib_fulldir=`ls -l /usr/lib64/libmysqlclient*|grep -v "^l"|awk '{print $NF}'|sed 's/lib64/lib/'`          ln -s $line $usrlib_fulldir         done        php_install;        ;;      2)        exit 0;;      3)        download_php;        php_install;        ;;      *)        echo "Input Errot!" && exit -1;;     esac   elif [ $input = 4 ];then      download_jre;      jre_install;   else    echo "\e[1;31m your input is worng!\e[0m"    sleep 1    exit -1   fi

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    VMware虚拟机找不到USB设备该怎么办?
    下一条:
    YUM解决RPM包安装依赖关系及yum工具介绍本地源配置方法详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客