LNMP 架构的搭建及应用部署

2019-09-10 10:44:36 浏览数 (1)

LAMP 平台作为目前应用最为广泛的网站服务器架构,其中的“A”对应着web服务软件的Apache ,但是,现在随着时间的推移,越来越多的企业开始使用Nginx这匹黑马,LNMP或LEMP架构也收到越来越多的运维人员的青睐。

废话不说,直接开整。

一、准备工作:

Centos 7 服务器、光盘 MySQL 部署可参考博文:https://blog.51cto.com/14227204/2425596 Nginx 部署可参考博文:https://cloud.tencent.com/developer/article/1501189 准备 PHP 的源码包:https://pan.baidu.com/s/1WARKfQ5ndcL5t5MqXq13zg 提取码: 4zjx

二、安装 PHP 解析环境:

较新版本的 PHP 已经自带了 FPM 模块,用来对PHP解析实例进行管理、优化解析效率。所以需要在编译时 添加“--enable-fpm”来启动此模块。

代码语言:javascript复制
[root@mysql /]# yum -y  install    gd    libxml2-devel     libjpeg-devel    libpng-devel
[root@mysql /]# tar zxf php-5.5.38.tar.gz  -C   /usr/src/
[root@mysql 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   && make && make install                  #配置及编译安装(过程较长)

安装完毕后的调整:

代码语言:javascript复制
[root@mysql php-5.5.38]# cp php.ini-development    /usr/local/php5/php.ini
[root@mysql /]# ln -s /usr/local/php5/bin/*   /usr/local/bin/
[root@mysql /]# ln -s /usr/local/php5/sbin/*   /usr/local/sbin/          # 创建链接文件,方便命令使用

安装 ZendGuardLoader:(加速 Nginx 处理速度,可省略)

代码语言:javascript复制
[root@mysql /]# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz   -C /usr/src/
[root@mysql /]# cd  /usr/src/zend-loader-php5.5-linux-x86_64/
[root@mysql zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/                 # 将 zend 文件复制到PHP目录中
[root@mysql /]# vim /usr/local/php5/php.ini             # 写入以下两行
...............
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

配置 Nginx 支持 PHP环境:

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

1、启用php-pfm进程(该进程默认监听9000端口):

代码语言:javascript复制
[root@mysql ~]# cd /usr/local/php5/etc/
[root@mysql etc]# cp php-fpm.conf.default php-fpm.conf       
[root@mysql etc]# useradd -M -s /sbin/nologin php            # 创建 PHP 用户
[root@mysql 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@mysql /]# /usr/local/sbin/php-fpm             # 启动 fpm 服务
[root@mysql /]# killall php-fpm                         # 停止服务

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

代码语言:javascript复制
[root@mysql /]# vim /etc/init.d/nginx 
#!/bin/bash
# chkconfig: - 99 20
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)
        kill -s QUIT $(cat $PIDF_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
代码语言:javascript复制
[root@mysql /]# systemctl daemon-reload          #重新加载守护进程,否则会有提示信息
[root@mysql /]# systemctl restart nginx             # 重启服务以确认脚本无误
[root@mysql /]# netstat -anpt | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      64964/php-fpm: mast 
[root@mysql /]# netstat -anpt | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      64961/nginx: master 

经过上面配置,Nginx和fpm就被绑在一块了,一旦启动或关闭Nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm。

配置Nginx支持PHP解析:

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

两种方法的配置项都可以在配置文件的末尾找到相应的模板。复制到相应位置,稍加修改即可用。

对于第一种方法,可以不执行上面php-fpm的配置(转交给其他web服务器处理,使用如下配置语句):

代码语言:javascript复制
[root@localhost etc]# vim /usr/local/nginx/conf/nginx.conf
                   ...................#省略部分内容
server {
                ...................
location ~ .php$ {         #访问.php页面的配置段
            proxy_pass   http://192.168.1.20:80;            # apache服务器的监听地址
        }
             ...................   // 省略部分内容
}

这里我使用第二种方法(调用本机的php-fpm进程),配置如下:

代码语言:javascript复制
server  {
.....................
location ~ .php$ {
                root /var/www/test1;
                fastcgi_index  index.php;
                fastcgi_pass   127.0.0.1:9000;
                include        fastcgi.conf
        }
代码语言:javascript复制
[root@mysql /]# vim /var/www/test1/test.php         # 编写测试网页
<?php
$link=mysqli_connect('localhost','root','pwd123');
if($link) echo "恭喜你,数据库连接成功!!!";
mysqli_close($link);
?>

LNMP 平台部署 web 应用:

这里我使用的是 Discuz!,一个社区论坛。可在 http://www.discuz.net 官方下载。

部署程序代码:

代码语言:javascript复制
[root@mysql /]# unzip Discuz_X3.3_SC_UTF8.zip        
[root@mysql /]# mv upload/ /var/www/test1/bbs            # 将 upload 目录放在网站根目录下
[root@mysql tt]# chown -R php:php /var/www/test1/bbs/       # 修改属主属组

创建数据库:

代码语言:javascript复制
[root@mysql /]# mysql -u root -p 
Enter password:                     // 输入密码
mysql> create database bbs;                     // 创建一个专属数据库
mysql> grant all on bbs.* to runbbs@localhost identified by 'pwd123';       // 设置权限
和管理员用户

安装 Discuz:

访问www.test1.com/bbs/admin.php 登录到后台看看:

0 人点赞