LNMP架构及应用部署

LNMP架构及应用部署

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

1.构建LNMP网站平台

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

1.1安装MySQL数据库

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

编译安装MySQL

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

优化调整

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

初始化数据库

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

启动mysql服务

复制代码
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysqladmin -u root password 'pwd123'

2.安装PHP解析环境

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

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

编译安装PHP

复制代码
[root@localhost ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
[root@localhost ~]# tar zxvf php-5.5.38.tar.gz
[root@localhost ~]# cd php-5.5.38/
[root@localhost 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@localhost php-5.5.38]# make && make install

安装后调整

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

安装ZendGuardLoader

复制代码
[root@localhost ~]# tar zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz
[root@localhost ~]# cd zend-loader-php5.5-linux-x86_64/
[root@localhost zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
[root@localhost zend-loader-php5.5-linux-x86_64]# cd
[root@localhost ~]# vim /usr/local/php5/php.ini
........//
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

3.配置Nginx支持PHP环境

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

启用php-fpm进程

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

复制代码
[root@localhost ~]# cd /usr/local/php5/etc/
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# useradd -M -s /sbin/nologin php
[root@localhost etc]# vim php-fpm.conf
.......//
pid = run/php-fpm.pid             
user = php                        
group = php                       
pm.start_servers = 20             
pm.min_spare_servers = 5          
pm.max_spare_servers = 35
pm.max_children = 50 
[root@localhost etc]# /usr/local/sbin/php-fpm
[root@localhost etc]# netstat -anpt | grep php-fpm
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      7178/php-fpm: maste

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

复制代码
[root@localhost ~]# vim /etc/init.d/nginx
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

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

配置nginx支持PHP解析

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

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

复制代码
server {
                ...... 省略部分内容
   location ~ \.php$ {
                proxy_pass http://192.168.4.253:80;
}

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

复制代码
 server {
..........//

        }
        location ~ \.php$ {
            root   /var/www/bdqn;
            fastcgi_pass   127.0.0.1:9000;

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

相关推荐
Elias不吃糖18 小时前
第四天学习总结:C++ 文件系统 × Linux 自动化 × Makefile 工程化
linux·c++·学习
噜啦噜啦嘞好18 小时前
Linux进程信号
linux·运维·服务器
REDcker19 小时前
Linux 进程资源占用分析指南
linux·运维·chrome
samroom19 小时前
Linux系统管理与常用命令详解
linux·运维·服务器
一叶之秋141220 小时前
Linux基本指令
linux·运维·服务器
码割机20 小时前
Linux服务器安装jdk和maven详解
java·linux·maven
亚林瓜子20 小时前
在amazon linux 2023上面源码手动安装tesseract5.5.1
linux·运维·服务器·ocr·aws·ec2
爱学习的大牛12320 小时前
Ubuntu 24.04 安装 FreeSWITCH 完整教程
linux·freeswitch
go_bai20 小时前
Linux--进程池
linux·c++·经验分享·笔记·学习方法
人工智能训练21 小时前
在ubuntu系统中如何将docker安装在指定目录
linux·运维·服务器·人工智能·ubuntu·docker·ai编程