LNMP架构师目前成熟的企业网站的应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境 LNMP是一个缩写词,具体包括Linux操作系统,Nginx服务器,Mysql数据库服务器,PHP(或perl,python)网页编程语言
客户端请求访问一个地址,这个请求会到达nginx服务器,
nginx服务器首先判断是否为静态请求,如果是静态请求则直接返回结果到达客户端,
如果是动态请求,这是nginx服务器只做反向代理的作用,(nginx通过接口传输协议PHP-fastcgi协议)它会将请求传给php-fpm这个服务来处理,但是php-fpm不做处理,因为php-fpm是用来管理进程的程序,他会调用PHP解析器进程,php解析进程会来处理这个php文件,如果其中需要调用数据,那么再通过mysql.sock连接到数据库进行读取数据,再进程处理,处理完成之后再交给php-fpm服务进程,php-fpm服务进程再交给nginx服务器,最后到达客户端。
客户端请求访问一个地址,这个请求会到达apache服务器,
apache服务会判断是动态请求还是静态请求,如果是静态请求,apache服务将会直接返回到客户端。
如果是动态请求,apache服务会调用自己的一个模块libphp7.so模块进行解析处理,如果需要mysql数据库的支持,还会通过mysql.sock来连接数据库进行读去数据,处理完成之后,将返回到apache服务器,最后返回到客户端。
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模块
①具有较大的自由度,功能可定制
②可及时获得最新的软件版本
③普遍适用于大多数Linux版本,便于一直使用
平台)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 : MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前被 Oracle 公
司收购。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是较好
的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数
据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用
于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开
发都选择 MySQL 作为网站数据库。
(中间连接): PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器,
由于 Nginx 服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 处理。
FastCGI:FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。
FastCGI:作用:把动态语言和HTTP分离开来,动静分离
#!/bin/bash
echo “自动关闭防火墙”
systemctl stop firewalld
systemctl disable firewalld &> /dev/null
setenforce 0
warn(){
cat <
| 安装前需要准备好安装包(放到/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 <
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