LNMP架构及应用部署

目录

简介

1、构建LNMP网站平台

1.1、安装MySQL数据库

(1)编译安装MySQL

(2)优化调整

(3)初始化数据库

(4)启动mysql服务

1.2、安装PHP解析环境

(1)编译安装PHP

(2)安装后的调整

(3)安装ZendGuardLoader

1.3、配置Nginx支持PHP环境

(1)启用php-fpm进程

(2)配置Nginx支持PHP解析

(3)PHP页面访问测试

2、在LNMP平台中部署Web应用

2.1、下载并部署程序代码

2.2、创建数据库

2.3、安装Web应用

2.4、访问Web应用系统


简介

众所周知,LAMP平台是目前应用最为广泛的网站服务器架构,其中"A"对应着Web服务软件Apache HTTP Server。随着Nginx在企业中的使用越来越多,LNMP(或LEMP)架构也受到越来越多Linux系统工程师的青睐。


1、构建LNMP网站平台

就像构建LAMP平台一样,构建LNMP平台也需要Linux服务器,MySQL数据库,PHP解析环境,区别主要在Nginx与PHP的协作配置上。下面将以上一章安装的Nginx服务器为基础,介绍LNMP平台的构建方法。

1.1、安装MySQL数据库

为了与Nginx、PHP环境保持一致,仍选择采用源代码编译的方式安装MySQL组件,以5.6.36版本为例,安装过程如下所述。

(1)编译安装MySQL

bash 复制代码
[root@centos7-1 ~]# yum -y install ncurses-devel
[root@centos7-1 ~]# tar zxf cmake-2.8.6.tar.gz 
[root@centos7-1 ~]# cd cmake-2.8.6/
[root@centos7-1 cmake-2.8.6]# ./configure
[root@centos7-1 cmake-2.8.6]# gmake && gmake install
[root@centos7-1 cmake-2.8.6]# cd 
[root@centos7-1 ~]# tar zxf mysql-5.6.36.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/mysql-5.6.36/
[root@centos7-1 mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
[root@centos7-1 mysql-5.6.36]# make && make install

(2)优化调整

bash 复制代码
[root@centos7-1 mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@centos7-1 mysql-5.6.36]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@centos7-1 mysql-5.6.36]# chmod +x /etc/rc.d/init.d/mysqld 
[root@centos7-1 mysql-5.6.36]# chkconfig --add mysqld
[root@centos7-1 mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@centos7-1 mysql-5.6.36]# . /etc/profile

(3)初始化数据库

bash 复制代码
[root@centos7-1 mysql-5.6.36]# groupadd mysql
[root@centos7-1 mysql-5.6.36]# useradd -M -s /sbin/nologin mysql -g mysql
[root@centos7-1 mysql-5.6.36]# chown -R mysql:mysql /usr/local/mysql
[root@centos7-1 mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

(4)启动mysql服务

bash 复制代码
[root@centos7-1 mysql-5.6.36]# systemctl start mysqld
[root@centos7-1 mysql-5.6.36]# mysqladmin -u root password 'cisco@123'  //为root用户设置密码

1.2、安装PHP解析环境

较新版本(如5.5)的PHP已经自带FPM(FastCGI Process Manager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理,优化解析效率。单服务器的LNMP架构通常使用这种方式。因此在配置PHP编译选项时应添加"--enable-fpm"以启用此模块。

以源码包php-5.5.38为例,具体安装过程如下。为了提高PHP解析效率,建议将相应版本的ZendGuardLoader也装上。

(1)编译安装PHP

bash 复制代码
[root@centos7-1 ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
[root@centos7-1 ~]# tar zxf php-5.5.38.tar.gz -C /usr/src/
[root@centos7-1 ~]# cd /usr/src/php-5.5.38/
[root@centos7-1 php-5.5.38]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
[root@centos7-1 php-5.5.38]# make && make install

(2)安装后的调整

bash 复制代码
[root@centos7-1 php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini
[root@centos7-1 php-5.5.38]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@centos7-1 php-5.5.38]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/

(3)安装ZendGuardLoader

bash 复制代码
[root@centos7-1 ~]# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz 
[root@centos7-1 ~]# cd zend-loader-php5.5-linux-x86_64/
[root@centos7-1 zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
[root@centos7-1 zend-loader-php5.5-linux-x86_64]# cd
[root@centos7-1 ~]# vim /usr/local/php5/php.ini 
[PHP]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so  //添加此行
zend_loader.enable=1                                       //添加此行
......//省略部分内容

1.3、配置Nginx支持PHP环境

若要让Nginx能够解析PHP网页,有两种方法可以选择:其一,充当中介,将访问PHP页面的Web请求转交给其他服务器(LAMP)去处理;其二,通过使用PHP的FPM模块来调用本机的PHP环境

(1)启用php-fpm进程

如果选用FPM方式,则需要先启动php-fpm进程。以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)。

bash 复制代码
[root@centos7-1 ~]# cd /usr/local/php5/etc/
[root@centos7-1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@centos7-1 etc]# useradd -M -s /sbin/nologin php
[root@centos7-1 etc]# vim php-fpm.conf
pid = run/php-fpm.pid   //确认pid文件位置
user = php  //运行用户
group = php   //运行组
pm.start_servers = 20   //启动时开启的进程数
pm.min_spare_servers = 5   //最少空闲进程数
pm.max_spare_servers = 35   
pm.max_children = 50   //最多空闲进程数
[root@centos7-1 etc]# /usr/local/sbin/php-fpm 
[root@centos7-1 etc]# netstat -anpt | grep php-fpm
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      68857/php-fpm: mast 

在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid。根据上述信息,可以修改Nginx脚本,以便在启用/停止Nginx服务器时将php-fpm进程也自动启动/停止。

bash 复制代码
[root@centos7-1 etc]# vim /etc/init.d/nginx 
#!/bin/bash
#!/bin/bash
# chkconfig: - 99 20
# description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
PROG_FPM="/usr/local/sbin/php-fpm"
PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
case "$1" in
  start)
    $PROG
    $PROG_FPM
    ;;
   stop)
    kill -s QUIT $(cat $PIDF)  //根据PID终止nginx进程
    kill -s QUIT $(cat $PIDF_FPM)  //根据PID终止php-fpm进程
    ;;
  restart)
    $0 stop
    $0 start
    ;;
   reload)
    kill -s HUP $(cat $PIDF)
    kill -s HUP $(cat $PIDF_FPM)
    ;;
 *)
     echo "Usage: $0 {start|stop|restart|reload}"
     exit 1
esac
exit 0

因此,一旦启动或关闭Nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm。

(2)配置Nginx支持PHP解析

无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在"server {}"配置段中添加location设置,以便指定当访问php网页时采取何种操作。

对于第一种方法(转交给其他Web服务器处理),使用的配置语句如下所示。例如,交给IP地址为192.168.23.210的LAMP服务器处理,从而实现Nginx负责静态页面,LAMP负责动态页面的分离效果。

bash 复制代码
[root@centos7-1 etc]# vim /usr/local/nginx/conf/nginx.conf
server {
......省略部分信息
   location ~ \.php${    //访问.php页面的配置段
      proxy_pass http://192.168.23.210:80;  //Apache服务器的监听地址
 }
}

对于第二种方法(调用本机php-fpm进程),使用的配置语句如下所示。在conf/目录下的fastcgi.conf文件中已经包含必须的设置,可通过include语句添加进来。

bash 复制代码
http {
......//省略部分内容
    server {
        listen       80;
        server_name  www.bdqn.com;
        charset utf-8;
        location / {
            root   /var/www/html/bdqncom;
            index  index.html index.php;
        }
        location ~ \.php$ {
        root /var/www/html/bdqn;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
      }
    }
}
[root@centos7-1 etc]# nginx -t  //检查配置文件
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@centos7-1 etc]# systemctl daemon-reload   //重新加载

上述方法中,选用任何一种都可以,本章的案例中建议选用第二种。完成修改以后,重新加载Nginx服务即可生效。

(3)PHP页面访问测试

以调用php-fpm解析为例,可以再PHP文档根目录下创建一个测试网页,用以测试PHP语句能否正常解析,以及能否连接MySQL数据库。

bash 复制代码
[root@centos7-1 etc]# vim /var/www/html/bdqncom/test.php
<?php
$link=mysqli_connect('localhost','root','cisco@123');
if($link) echo "<h1>恭喜你,数据库连接成功</h1>";
mysqli_close($link);
?>

访问测试网页,如http://www.bdqn.com/test.php。若能看到成功连接的提示信息(如下图所示),则表示PHP解析及数据库连接均正常。否则应根据页面提示,日志消息等进行检查,排除相应的故障。

2、在LNMP平台中部署Web应用

LNMP平台与LAMP平台是非常相似的,区别主要在于所用Web服务软件的不同。而这与使用PHP开发的Web应用程序并无太大关系。因此PHP应用的部署方法也是类似的。下面将以"Discuz社区论坛"为例,介绍LNMP平台中的部署过程。

2.1、下载并部署程序代码

"Discuz社区论坛"是一个采用PHP与MySQL等多种数据库构建的性能优异、功能全面且安全稳定的社区论坛(BBS)软件,其官方网站为http://www.discuz.net/。

将下载的Discuz源码文件解压,找到其中的upload/文件夹并将其放置到LNMP服务器的网站根目录,然后适当调整权限(若此处不调整,也可参考安装页面的提示再调整),以允许nginx、php-fpm程序拥有必要写入权限。

bash 复制代码
[root@centos7-1 ~]# yum -y install unzip
[root@centos7-1 ~]# unzip Discuz_X3.3_SC_UTF8.zip 
[root@centos7-1 ~]# mv upload/ /var/www/html/bdqncom/bbs
[root@centos7-1 ~]# chown -R php:php /var/www/html/bdqncom/bbs

2.2、创建数据库

Discuz论坛中的帖子、板块等信息需要保存在数据库中,所以要针对Discuz创建数据库。为了减低Web应用程序对数据库的风险,建议设置专用的数据库及授权用户,而不要直接使用root用户。例如,可新建bbs库,授权用户为runbbs,具体操作如下所示。

bash 复制代码
[root@centos7-1 ~]# mysql -uroot -p
Enter password:   //验证root用户的密码
mysql> CREATE DATABASE bbs;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT all ON bbs.* TO runbbs@localhost IDENTIFIED BY 'bbs@yh123';
Query OK, 0 rows affected (0.00 sec)

2.3、安装Web应用

访问http://www.bdqn.com/bbs/install/index.php。将会打开Discuz的安装程序,根据页面提示,只需三步即可轻松完成安装,如下图所示。

Discuz的安装向导页面

确保系统环境,目录权限,缓存可写性等监测通过,否则安装将无法继续。在第三步配置安装数据库的步骤中,除了应正确配置数据库连接外,还应该设置好管理账号,密码登基本信息,如下图所示。完成安装后,删除install目录,以降低安全风险。

Discuz安装数据库页面

2.4、访问Web应用系统

完成安装以后,通过访问http://www.bdqn.com/bbs/forum.php。可以看到Discuz社区论坛站点首页。

Discuz社区论坛的站点首页

相关推荐
yunwei3712 分钟前
eBPF 示例教程:实现 `scx_nest` 调度器
linux·后端·性能优化
晚安日记wanna12 分钟前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
大模型码小白17 分钟前
告别造假数据,直接连数据库查真实时序数据喂给 TimechoAI 大模型
java·数据库·人工智能·microsoft·架构
晚安日记wanna20 分钟前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构
晚安日记wanna23 分钟前
MySQL 主从延迟别只答并行复制
数据库·面试·架构
朽棘不雕33 分钟前
关于重定向的小补充
linux
T1mzhou39 分钟前
ARM64 平台安全学习记录
linux·服务器·arm开发·arm
狼与自由1 小时前
MCP协议理解
人工智能·架构
GG-_-Bond1 小时前
基于dpdk实现udp接收数据
linux·网络·udp
吴声子夜歌1 小时前
Shell编程实例——bash入门
linux·运维·shell