使用shell脚本一键部署LNMP架构的方法

 更新时间:2021年01月14日 16:48:48   作者:huangzhihuan0813  
这篇文章主要介绍了使用shell脚本一键部署LNMP架构的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

LNMP架构介绍

LNMP:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。

原理:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

下面给大家介绍下使用shell脚本一键部署LNMP架构的方法,脚本如下所示:

#/bin/bash

##将需要的安装包传到/opt目录下,并关闭防火墙
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0

###############Nginx###############

##先挂载,再安装依赖包
df -h | grep /mnt
if [ $? -ne 0 ];then
mount /dev/cdrom /mnt &>/dev/null
fi
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

##创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确的控制其访问权限)
useradd -M -s /sbin/nologin nginx

##编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j 2 && make install

##优化配置文件路径,并把nginx服务的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/nginx/sbin/* /usr/local/sbin

##添加Nginx系统服务
cat > /lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

##修改文件权限
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service &>/dev/null

###############MySQL###############
##安装MySQL环境依赖包
yum -y install ncurses ncurses-devel bison cmake

##创建运行用户
useradd -M -s /sbin/nologin mysql

##编译安装
cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz
cd /opt/mysql-5.7.20
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

make -j 2 && make install

##修改mysql配置文件
cat > /etc/my.cnf <<EOF
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock			
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
EOF

##更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

##设置路径环境变量
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile	
source /etc/profile

##初始化数据化
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

##添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld &>/dev/null

##添加mysql的登录密码
function mima {
passwd=$1
/usr/bin/expect <<-EOF
spawn mysqladmin -u root -p password $passwd
expect "Enter" {send "\n"}
expect eof
EOF
}
mima "abc123"

##授权远程登录
function qwe {
/usr/bin/expect <<-EOF
spawn mysql -u root -p
expect "Enter" {send "abc123\n"}
expect "mysql" {send "grant all privileges on *.* to 'root'@'%' identified by 'abc123';\n"}
expect "mysql" {send "flush privileges;\n"}
expect "mysql" {send "show databases;\n"}
expect "mysql" {send "quit\n"}
expect eof
EOF
}
qwe
###############PHP###############
##安装环境依赖包
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

##编译安装
cd /opt
tar jxvf php-7.1.10.tar.bz2
cd ./php-7.1.10/
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

make -j 2 && make install

##路径优化
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/

##调整PHP配置文件
##PHP有三个配置文件
##php.ini(主配置文件)
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
sed -i '1170c mysqli.default_socket = /usr/local/mysql/mysql.sock' /usr/local/php/lib/php.ini
sed -i '939c date.timezone = Asia/Shanghai' /usr/local/php/lib/php.ini

php -m
##php-fpm.conf(进程服务配置文件)
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
sed -i '17c pid = run/php-fpm.pid' /usr/local/php/etc/php-fpm.conf
##www.conf(扩展配置文件)
cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf

##启动php-fpm
cd /usr/local/php/sbin/
php-fpm -c /usr/local/php/lib/php.ini

##配置Nginx支持PHP解析
sed -i '65c location ~ \.php$ {' /usr/local/nginx/conf/nginx.conf
sed -i '66c root html;' /usr/local/nginx/conf/nginx.conf
sed -i '67c fastcgi_pass 127.0.0.1:9000;' /usr/local/nginx/conf/nginx.conf
sed -i '68c fastcgi_index index.php;' /usr/local/nginx/conf/nginx.conf
sed -i '69c fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;' /usr/local/nginx/conf/nginx.conf
sed -i '70c include fastcgi_params;' /usr/local/nginx/conf/nginx.conf
sed -i '71c }' /usr/local/nginx/conf/nginx.conf

##验证PHP测试页和验证数据库工作是否正常

cat > /usr/local/nginx/html/index.php <<EOF
<?php
phpinfo();
?>
EOF

到此这篇关于使用shell脚本一键部署LNMP架构的方法的文章就介绍到这了,更多相关shell脚本部署LNMP架构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Shell脚本中调用另一个脚本的三种方式讲解

    在Shell脚本中调用另一个脚本的三种方式讲解

    今天小编就为大家分享一篇关于在Shell脚本中调用另一个脚本的三种方式讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 如何利用shell开发keepalived启动脚本

    如何利用shell开发keepalived启动脚本

    Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。这篇文章主要介绍了使用shell开发keepalived启动脚本,需要的朋友可以参考下
    2020-03-03
  • Shell编程中while与for的区别及用法详解

    Shell编程中while与for的区别及用法详解

    在shell编程中经常用到循环,常用的循环有for和while循环两种。while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别
    2016-02-02
  • 简化shell终端命令输入的脚本式快捷键工具

    简化shell终端命令输入的脚本式快捷键工具

    这篇文章主要介绍了简化shell终端命令输入的脚本式快捷键工具,这是一个shell脚本写的简化shell命令输入的快捷键工具,需要的朋友可以参考下
    2015-03-03
  • shell中case的用法学习笔记

    shell中case的用法学习笔记

    这篇文章主要为大家介绍shell中的case语句:可以把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码
    2013-11-11
  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件

    使用scp获取远程linux服务器上的文件 linux远程拷贝文件

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,scp传输是加密的,下面看一下详细使用方法吧
    2014-01-01
  • shell脚本免交互的实现

    shell脚本免交互的实现

    交互就是实现一个功能时,不需要连续从键盘输入信息,通过脚本或命令自动完成一些动作,本文主要介绍了shell脚本免交互的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Linux中文件权限目录权限的意义及权限对文件目录的意义

    Linux中文件权限目录权限的意义及权限对文件目录的意义

    本文给大家介绍Linux中文件目录权限的意义及Linux的权限对于文件与目录的意义,涉及到linux 文件、目录、权限相关知识,对本文感兴趣的朋友一起学习吧
    2016-01-01
  • 设置Shell脚本开机自启的方法和实例

    设置Shell脚本开机自启的方法和实例

    这篇文章主要介绍了设置Shell脚本开机自启的方法和实例,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • shell 使用指定的分割符来分割字符串的方法

    shell 使用指定的分割符来分割字符串的方法

    这篇文章主要介绍了shell 使用指定的分割符来分割字符串的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论