6

LNMP源码编译安装及一键部署LNMP架构

文章目录

  • LNMP源码编译安装及一键部署LNMP架构
    • 1LNMP
      • 1.1LNMP介绍
      • 1.2LNMP工作原理
      • 1.3LAMP工作原理
    • 2.LAMP和LNMP的区别
    • 3.编译安装的优点
    • 4.各组件的主要作用
    • 5.LNMP架构的部署
    • 6安装 Nginx 服务
      • 6.1关闭防火墙与核心防护
      • 6.2安装环境依赖包
      • 6.3创建运行用户、组
      • 6.4编译安装Nginx
      • 6.5调用configure脚本进行转义
      • 6.6进行make翻译
      • 6.7路径优化
      • 6.8启动Nginx
      • 6.9检查通过systemctl命令能否正常 启动、停止、重启、重载 Nginx 服务
      • 6.10在虚拟机中服务验证
    • 7.安装MySQL服务
      • 7.1安装Mysql环境依赖包
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1Or13nT-1662529388438)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_18-52-57.png)]
      • 7.2创建运行用户
      • 7.3编译安装
      • 7.4初始化数据库
      • 7.5数据库开启自启、 关闭、状态
      • 7.6登录数据库
    • 8脚本一键部署LNMP架构

1LNMP

1.1LNMP介绍

LNMP架构师目前成熟的企业网站的应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境 LNMP是一个缩写词,具体包括Linux操作系统,Nginx服务器,Mysql数据库服务器,PHP(或perl,python)网页编程语言

1.2LNMP工作原理

客户端请求访问一个地址,这个请求会到达nginx服务器,

nginx服务器首先判断是否为静态请求,如果是静态请求则直接返回结果到达客户端,

如果是动态请求,这是nginx服务器只做反向代理的作用,(nginx通过接口传输协议PHP-fastcgi协议)它会将请求传给php-fpm这个服务来处理,但是php-fpm不做处理,因为php-fpm是用来管理进程的程序,他会调用PHP解析器进程,php解析进程会来处理这个php文件,如果其中需要调用数据,那么再通过mysql.sock连接到数据库.1进行读取数据,再进程处理,处理完成之后再交给php-fpm服务进程,php-fpm服务进程再交给nginx服务器,最后到达客户端。

1.3LAMP工作原理

客户端请求访问一个地址,这个请求会到达apache服务器,

apache服务会判断是动态请求还是静态请求,如果是静态请求,apache服务将会直接返回到客户端。
如果是动态请求,apache服务会调用自己的一个模块libphp7.so模块进行解析处理,如果需要mysql数据库的支持,还会通过mysql.sock来连接数据库进行读去数据,处理完成之后,将返回到apache服务器,最后返回到客户端。

2.LAMP和LNMP的区别

LAMP表示为:linux、apache、mysql、php

LNMP表示为:linux、nginx、mysql、php

主要区别在于web服务器与php后台之间的转发存在区别,

当nginx作为web服务器时,nginx通过cgi接口协议转发到php-fpm服务程序上,nginx服务和php-fpm服务时相对独立的,然后由php-fpm程序调用对应的php解析进行来完成处理。
当apache作为web服务器时,apache是调用libphp7.so模块来进行处理,这个模块是会随着apache的启动而启动。内嵌在apache中的一个模块。

3.编译安装的优点

①具有较大的自由度,功能可定制

②可及时获得最新的软件版本

③普遍适用于大多数Linux版本,便于一直使用

4.各组件的主要作用

(平台)Linux: 指的是一个基于 CentOS/Debian 编写的 Nginx、Linux、MySQL、PHP,可以在独立主
机上轻松的安装 LNMP 生产环境。本案例主要介绍 LNMP 框架安装方法以及部署 Discuz!社
区论坛应用

(前台)Nginx : 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,
体现更高的效率。Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,
也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 采用 C 语言进行编写,不论是系统
资源开销还是 CPU 使用效率都比 Perlbal 要好的多。Nginx 作为邮件代理服务器:Nginx 同
时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服
务器),Last/fm 描述了成功并且美妙的使用经验。Nginx 安装非常的简单,配置文件非常
简洁(还能够支持 perl 语法)。Nginx 支持平滑加载新的配置,还能够在不间断服务的情
况下进行软件版本的升级。

(后台)Mysql : 作为LAMP架构的后端,是一块流行的开源关系数据库。在企业网站,业务系统等应用中,各种账户信息、产品信息,客户资料,业务数据等都可以存储到Mysql数据库,其它程序可以通过SQL语句来查询,更改这些信息。

(中间连接): PHP/perl/Python:作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟沟通web服务器和数据库系统以协同工作,并提供web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发

5.LNMP架构的部署

部署思路
●安装 Nginx 服务
●安装 MySQL 服务
●安装配置 PHP 解析环境
●部署 Discuz!社区论坛 Web 应用

6安装 Nginx 服务

6.1关闭防火墙与核心防护

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Es4jbr8S-1662529388435)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-12-42.png)]

6.2安装环境依赖包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oT9MQD5f-1662529388436)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-14-38.png)]

6.3创建运行用户、组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ZBpSsPC-1662529388436)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-18-28.png)]

6.4编译安装Nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wC4VPSrU-1662529388436)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-23-03.png)]

6.5调用configure脚本进行转义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QaFLDbBP-1662529388436)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-28-25.png)]

6.6进行make翻译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBwSnE8d-1662529388437)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-29-07.png)]

6.7路径优化

为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件,以便管理员
直接执行“nginx”命令就可以调用 Nginx 的主程序(让系统可以识别)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hpPV6jGX-1662529388437)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-32-13.png)]

6.8启动Nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6RX9PBB-1662529388437)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_18-39-39.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f26jrF4O-1662529388438)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_18-40-48.png)]

6.9检查通过systemctl命令能否正常 启动、停止、重启、重载 Nginx 服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qD0OqJrP-1662529388438)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_18-47-18.png)]

6.10在虚拟机中服务验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERcOYs5d-1662529388438)(C:\Users\lin\Pictures\作业二\微信截图_20220901185047.png)]

7.安装MySQL服务

7.1安装Mysql环境依赖包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1Or13nT-1662529388438)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_18-52-57.png)]

7.2创建运行用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QxnvAbXZ-1662529388438)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_17-18-28.png)]!(C:\Users\lin\Pictres\作业二\Snipaste_2022-09-01_19-34-28.p

7.3编译安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4CFclWn-1662529388438)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_18-58-27.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZcjsNakE-1662529388439)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_19-34-28.png)]

7.4初始化数据库

cd /usr/local/mysql/

bin/mysqld
–initialize-insecure
–user=mysql
–basedir=/usr/local/mysql
–datadir=/usr/local/mysql/dat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YGmqZkSa-1662529388439)()]

7.5数据库开启自启、 关闭、状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IDkUViFJ-1662529388439)(C:\Users\lin\Pictures\作业二\Snipaste_2022-09-01_19-40-23.png)]

7.6登录数据库

8脚本一键部署LNMP架构

#!/bin/bash
echo “自动关闭防火墙”
systemctl stop firewalld
systemctl disable firewalld &> /dev/null
setenforce 0

warn(){
cat <<EOF
===========================================
| 安装前需要准备好安装包(放到/opt下) |
| 这是一个基于nginx、php、mysql架构的服务 |
| 准备好我们就开始安装了 |
| 整个过程会比较漫长,请耐心等待 |
===========================================
EOF
}
#################安装nginx###############
nginx(){
echo “正在安装nginx依赖软件中…耐心等待…”
yum install -y gcc gcc-c++ make pcre pcre-devel expat-devel perl zlib zlib-devel &> /dev/null #安装依赖编译环境
echo “安装完成”
useradd -M -s /sbin/nologin nginx #创建一个nginx用户,方便管理
cd /opt
tar zxvf nginx-1.15.9.tar.gz
cd nginx-1.15.9
echo “正在编译安装”
./configure –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_stub_status_module &> /dev/null
make && make install &> /dev/null
echo “编译安装完成”
############创建软链接方便启动##########
cp /usr/local/nginx/sbin/nginx /usr/local/sbin/
############将nginx变为系统服务#################
touch /lib/systemd/system/nginx.service
echo “
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
” > /lib/systemd/system/nginx.service
##########开启服务############
systemctl daemon-reload
systemctl start nginx
echo “nginx安装完成-并启动”
}
#############安装mysql##################
mysql(){
cd /opt
echo “正在安装mysql需要的依赖软件…耐心等待…”
yum -y install ncurses ncurses-devel bison cmake
yum -y install ncurses ncurses-devel bison cmake gcc gcc-c++
echo “安装完成”
useradd -s /sbin/nologin mysql
##############解压数据库的包##########
tar zxvf mysql-boost-5.7.20.tar.gz &> /dev/null
#########编译安装mysql################
cd mysql-5.7.20
echo “正在编译安装mysql…耐心等待…”
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_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 -j3 && make install
echo “安装完成”
##############对数据库权限进行调整################
chown -R mysql:mysql /usr/local/mysql
#############调整配置文件####################
echo “
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
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
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
” > /etc/my.cnf
chown mysql:mysql /etc/my.cnf #更改一下mysql配置文件属性
##########设置环境变量#################
echo ‘PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 78: …e /etc/profile #̲#########对数据库进行… { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;include fastcgi_params;}’ /usr/local/nginx/conf/nginx.conf
systemctl restart nginx
######################免交互##################
/usr/bin/expect &>/dev/null <<EOF
spawn mysql -uroot -p123456
expect “mysql>” {send “CREATE DATABASE bbs;\r”}
expect “mysql>” {send “GRANT all ON bbs.* TO ‘bbsuser’@‘%’ IDENTIFIED BY ‘admin123’;\r”}
expect “mysql>” {send “GRANT all ON bbs.* TO ‘bbsuser’@‘localhost’ IDENTIFIED BY ‘admin123’;\r”}
expect “mysql>” {send “flush privileges;\r”}
expect “mysql>” { send “quit;\r”}
expect eof
EOF
echo “数据库用户bbsuser权限更改成功”
}
discuz(){
cd /opt
unzip Discuz_X3.4_SC_UTF8.zip -d /tmp &> /dev/null
cd /tmp/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/
cd /usr/local/nginx/html/bbs/
chown -R root:nginx ./config/
chown -R root:nginx ./data/
chown -R root:nginx ./uc_client/
chown -R root:nginx ./uc_server/
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/
echo “应用部署完成”
}
warn
nginx
export mysql
mysql
php
change
discuz
/local/nginx/html/bbs/
cd /usr/local/nginx/html/bbs/
chown -R root:nginx ./config/
chown -R root:nginx ./data/
chown -R root:nginx ./uc_client/
chown -R root:nginx ./uc_server/
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/
echo “应用部署完成”
}
warn
nginx
export mysql
mysql
php
change
discuz