一键部署LNMP服务

一键部署LNMP服务

对于最简单的LNMP架构部署其实可以使用的方法有很多,如果你的仓库里面有一些插件或者中间件的rpm包那么你就完全可以不使用源码进行部署,但是大多数时候你还是需要利用源码进行nginx或者mysql的一些源码安装,而拿一些不需要的就是php之类的一些插件,下面我也为搭建写出了大概的部署过程,并且都加了注释,可能有些地方跟你的机器配置,版本之类并不匹配,具体实施还是要看实际情况。

仓库有一些资源较为简单的LNMP架构部署:

#!/bin/bash
id nginx $> /dev/null        #利用id命令来检测nginx这个用户是否存在并把输出内容重定向到null中
if [ $? -ne 0 ]; then        #利用if判断来判断上一条命令是否执行成功,如果不成功了就执行下面这条命令
    useradd nginx -s /bin/nologin     #创建用户nginx并指定解释器为/bin/nologin
fi                                   #if判断的结束符
if [-f nginx-1.8.0.tar.gz];then      #利用nginx判断nginx的源码包是否存在,如果存在就执行以下命令
     tar -xf nginx-1.8.0.tar.gz     #将nginx的tar包进行解包
     cd nginx-1.8.0          #进入到nginx-1.8.0这个目录之中
     yum install -y gcc pcre-devel openssl-devel zlib-devel make  #下载gcc源码安装工具和一些依赖件
     ./configure --prefix=/usr/local/nginx --with-http_ssl_module  #利用./configure进行解码
     make && make install    #利用make进行源码解析,利用make install 进行源码安装
     ln -s /usr/local/nginx/sbin/nginx /usr/sbin/   #利用ln命令创建软连接放到/usr/sbin/下
  yum -y install gcc gcc-c++ cmake ncures-devel perl   #下载源码安装工具和依赖件
  id mysql &> /dev/null     #利用id来检测mysql用户是否存在,并将结果输入到null黑洞中
  if [ &? -ne 0 ] ;then     #利用if来判断上述命令是否执行成功
      tar -xf mysql-5.6.25.tar.gz     #利用tar命令将mysql-5.6.25.tar.gz的包解压
      cd mysql-5.6.25          #cd到mysql-5.6.25这个目录里面
      cmake                    #利用cmake进行源码解析
      make                     #利用make进行源码解析
      make install             #利用make install进行源码安装
      /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/  --basedir=/usr/local/mysql    #安装mysql数据库指定用户和数据文件执行文件所在路径
      chown -R root.mysql /usr/local/mysql   #将/usr/local/mysql的属主和属组递增进行更改
      chown -R mysql /usr/local/mysql/data   #将/usr/local/mysql/data的属主进行递增更改
      /bin/cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql  #利用cp命令将mysql.server复制到/etc/init.d/mysql下
      chmod +x /etc/local/mysql/support-files/my-default.cnf /etc/my.cnf    #将my-default.cnf和my.cnf加上可执行权限
      /bin/cp -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf  #利用cp命令将my-default.cnf文件复制为/etc/my.cnf
      echo "/usr/local/mysql/lib" >> /etc/ld.so.conf   #输出/usr/local/mysql/lib重定向到/etc/ld.so.conf
      ldconfig            
      echo 'PATH=\$PATH:/usr/local/mysql/bin' >> /etc/profile   #输出PATH=/$PATH:/usr/local/mysql/bin重定向到/etc/profile文件中
      export PATH  #设置为全局变量
        else    #如果上面命令没有执行成功的话就执行下面命令
             echo "没有mysql源码包"    #输出"没有mysql源码包"
    exit    #退出
fi       #if判断结束
yum install -y php php-fpm php-devel

基本都是源码包,利用脚本进行源码一键部署:

#!/bin/bash      #shell脚本指定解释器使用的/bin/bash
menu(){       #定义函数,menu
clear           #利用clear命令进行清屏
echo " ##############--Menu--######"      #输出 ##############--Menu--######
echo "# 1.install nginx"                  #输出安装nginx
echo "# 2.install mysql"                  #输出安装mysql
echo "# 3.install php"                     #输出安装php
echo "# 4.exit program"                    #输出结束program
echo "#########################"           #输出########################
}
choice(){                                  #定义函数choice
read -p "please choice a menu[1-9]: " select #利用read命令让你输入一个数字1-9 利用select进行接收
}
install_nginx(){         #定义函数install_nginx
id nginx $> /dev/null        #利用id命令来检测nginx这个用户是否存在并把输出内容重定向到null中
if [ $? -ne 0 ]; then        #利用if判断来判断上一条命令是否执行成功,如果不成功了就执行下面这条命令
    useradd nginx -s /bin/nologin     #创建用户nginx并指定解释器为/bin/nologin
fi                                   #if判断的结束符
if [-f nginx-1.8.0.tar.gz];then      #利用nginx判断nginx的源码包是否存在,如果存在就执行以下命令
     tar -xf nginx-1.8.0.tar.gz     #将nginx的tar包进行解包
     cd nginx-1.8.0          #进入到nginx-1.8.0这个目录之中
     yum install -y gcc pcre-devel openssl-devel zlib-devel make  #下载gcc源码安装工具和一些依赖件
     ./configure --prefix=/usr/local/nginx --with-http_ssl_module  #利用./configure进行解码
     make && make install    #利用make进行源码解析,利用make install 进行源码安装
     ln -s /usr/local/nginx/sbin/nginx /usr/sbin/   #利用ln命令创建软连接放到/usr/sbin/下
     cd ..       #cd .. 返回上一级
 else          #如果上面判断不成立的话就执行下面的命令
     echo "没有nginx源码包"   #输出没有nginx源码包
 fi          #if判断结束
}

install_mysql(){            #定义函数安装mysql数据库
  yum -y install gcc gcc-c++ cmake ncures-devel perl   #下载源码安装工具和依赖件
  id mysql &> /dev/null     #利用id来检测mysql用户是否存在,并将结果输入到null黑洞中
  if [ &? -ne 0 ] ;then     #利用if来判断上述命令是否执行成功
      tar -xf mysql-5.6.25.tar.gz     #利用tar命令将mysql-5.6.25.tar.gz的包解压
      cd mysql-5.6.25          #cd到mysql-5.6.25这个目录里面
      cmake                    #利用cmake进行源码解析
      make                     #利用make进行源码解析
      make install             #利用make install进行源码安装
      /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/  --basedir=/usr/local/mysql    #安装mysql数据库指定用户和数据文件执行文件所在路径
      chown -R root.mysql /usr/local/mysql   #将/usr/local/mysql的属主和属组递增进行更改
      chown -R mysql /usr/local/mysql/data   #将/usr/local/mysql/data的属主进行递增更改
      /bin/cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql  #利用cp命令将mysql.server复制到/etc/init.d/mysql下
      chmod +x /etc/local/mysql/support-files/my-default.cnf /etc/my.cnf    #将my-default.cnf和my.cnf加上可执行权限
      /bin/cp -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf  #利用cp命令将my-default.cnf文件复制为/etc/my.cnf
      echo "/usr/local/mysql/lib" >> /etc/ld.so.conf   #输出/usr/local/mysql/lib重定向到/etc/ld.so.conf
      ldconfig            
      echo 'PATH=\$PATH:/usr/local/mysql/bin' >> /etc/profile   #输出PATH=/$PATH:/usr/local/mysql/bin重定向到/etc/profile文件中
      export PATH  #设置为全局变量
        else    #如果上面命令没有执行成功的话就执行下面命令
             echo "没有mysql源码包"    #输出"没有mysql源码包"
    exit    #退出
fi       #if判断结束
}
install_php(){                   #定义一个install_php的函数
#安装php时没有指定启动哪些模块功能,如果的用户可以根据实际情况自行添加额外功能如--with-gd等
    yum install -y gcc libxml2-devel   #安装gcc源码解译工具和依赖包
    if [-f mhash-0.9.9.9.tar.gz]; then     #利用if判断是否有mhash的tar包
        tar -xf mhash-0.9.9.9.tar.gz          #如果文件存在就利用tar xf解tar包
        cd mhash-0.9.9.9          #cd到mhash-0.9.9.9文件中
        ./configure               #利用./configure文件解码
        make && make install       #利用make和make install进行源码包的安装
        cd ..                      #cd..返回上一级目录
        if [ ! -f /usr/lib/libmhash.so ]; then    #利用if判断libmhash文件是否不存在
            ln -s /usr/local/lib/libmhash.so /usr/lib/     #利用ln创建一个libmhash.so软连接到/usr/lib
        if     #if判断结束
        ldconfig
    else       #如果上面命令没有执行成功的话就执行下面命令
        echo "没有mhash源码包文件"      #输出"没有mhash源码包"
        exit     #结束执行此脚本
    fi      #结束if判断
    
    if [ -f libmcrypt-2.5.8.tar.gz]; then    #利用if判断检查tar包libmcrypt-2.5.8.tar.gz是否存在
        tar -xf libmcrypt-2.5.8.tar.gz   #利用tar命令解libmcrypt的tar包
        cd libmcrypt-2.5.8       #cd进入libmcrypt-2.5.8的文件中
        ./configure       #利用./configure进行源码解析
        make && make install  #利用make和make install 进行源码文件安装
        cd ..      #返回上一级目录
        if [ ! -f /usr/lib/libmcrypt.so ]; then  #利用if判断libmcrypt.so文件是否存在如果不存在就执行以下命令
             ln -s /usr/local/lib/libmcrypt.so /usr/lib  #利用ln命令将libmcrypt.so创建软连接到/usr/lib
        fi       #if判断结束
        ldconfig
    else   #上面if判断不符合的话就执行下面命令
        echo "没有libmcrypt源码包文件"    #输出"没有libmcrypt源码包文件"
        exit             #结束执行此脚本
    fi          #if判断结束
    
    if [ -f php-5.4.24.tar.gz ]; then   #利用if判断php的tar包是否存在如果存在就执行以下命令
         tar -xf php-5.4.24.tar.gz     #利用tar命令将php-5.4.24.tar.gz解包
         cd php-5.4.24   #cd到php-5.4.24文件中
         ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --enable-fpm enable-mbstring --with-mcrypt --with-mhash --with-config-file-path=/usr/local/php5/etc --with-mysqli=/usr/local/mysql/bin/mysql_config  #利用./configure进行源码解析并且安装一些需要的模块,例如mysql,php之类
         make && make install  #利用make和make install 进行源码安装
         /bin/cp -f php.ini-production /usr/local/php5/etc/php.ini #利用cp命令将文件php.ini-production复制到/usr/local/php5/etc/php.ini
         /bin/cp -f /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf       #利用cp命令将php-fpm.conf.default复制到/usr/local/php5/etc/php-fpm.conf
     else       #如果上面命令没有执行成功那么就执行以下命令
         echo "没有php源码包文件"    #输出"没有php源码包文件"
         exit       #结束执行此脚本
     fi   #if判断结束
     
}

while :     #利用while循环
do           
menu         #执行函数menu
choice        #执行函数choice
case $select in      #利用case判断使用开始定义的变量变量select
1)                    #如果变量匹配1那么就执行下面函数install_nginx
 install_nginx     
;;           #case结束符号必须是;;
2)           #果变量匹配1那么就执行下面函数install_mysql
install_mysql
;;
3)        #如果变量匹配1那么就执行下面函数install_php
install_php
;;
4)     #如果变量匹配是4那么就执行退出
exit
;;
*)          #如果变量匹配不是上面几项数字那么就执行下面命令
echo sorry!      #输出sorry
esac        #case结束语
done     #while循环结束语

利用shell脚本的部署方式的好处就是可能你写完一个脚本,下次再遇到同样的情况可能你就只需要修改其中一些变量或者命令就可实现,可以大大的节省工作时间,和增高工作效率。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340