基于php-fpm方式部署LAMP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于php-fpm方式部署LAMP相关的知识,希望对你有一定的参考价值。

前言


CentOS 7:

  httpd-2.4:rpm包默认编译支持了fcgi模块;

  php-fpm包:专用于将php运行于fpm模式;


当我们使用php-fpm方式部署LAMP时,需要使用三台服务器,一台服务器作为http服务器,一台当作php-fpm服务器,一台作为数据库服务器。当http服务器接收到客户端的请求时,会通过本地磁盘IO返回出请求中的静态请求资源,当http服务器匹配到请求数据中的动态资源后,通过fastcgi将动态资源请求转发给php-fpm服务器的9000端口,php-fpm服务器通过磁盘IO请求本地的动态资源并返回给http服务器,如果有请求数据库资源,就请求数据库的3306端口从数据库服务器中获取资源并返回http服务器,最后服务器统一将请求到的资源返回客户端。

基于这种方式在并发请求数量很大的时候,会提高数据的相应速率。

技术分享



第一部分

准备三台主机一台为http服务器,一台为php-fpm服务器,一台为mariadb服务器,基于fastcgi方式部署LAMP(CentOS 7)


第一步:(部署http服务器)

[[email protected] ~]# ifconfig       #http服务器的地址
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.61.2  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::20c:29ff:fefe:9633  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:fe:96:33  txqueuelen 1000  (Ethernet)
        RX packets 203985  bytes 53699541 (51.2 MiB)
        RX errors 0  dropped 31  overruns 0  frame 0
        TX packets 5381  bytes 1764387 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[[email protected] ~]# yum install -y httpd       #安装httpd程序
[[email protected] ~]# rpm -q httpd
httpd-2.4.6-31.el7.centos.x86_64

[[email protected] ~]# vim /etc/httpd/conf.d/vhost.conf    #创建两个虚拟主机

DirectoryIndex  index.php
<VirtualHost *:80>
        ServerName www.a.com
        DocumentRoot /vhost/a.com
        ProxyRequests off                 #关闭正向解析
        ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.61.100:9000 /www/$1  #通过fcgi发送给php主机的并从/www/路径下寻找资源
    <Directory "/vhost/a.com">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
        ServerName www.b.com
        DocumentRoot /vhost/b.com
        ProxyRequests off
        ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.61.100:9000 /www/$1
    <Directory "/vhost/b.com">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
[[email protected] ~]# mkdir -pv /vhost/{a.com,b.com}    #为虚拟主机创建DocumentRoot
mkdir: 已创建目录 "/vhost"
mkdir: 已创建目录 "/vhost/a.com"
mkdir: 已创建目录 "/vhost/b.com"
[[email protected] ~]# vim /etc/httpd/conf/httpd.conf   
....
#DocumentRoot "/var/www/html"       #注释掉中心主机的DocumentRoot
....

[[email protected] ~]# systemctl start httpd    #启动httpd服务
[[email protected] ~]# ss -tan
State      Recv-Q Send-Q            Local Address:Port              Peer Address:Port 
LISTEN     0      50                            *:3306                         *:*     
LISTEN     0      128                           *:22                           *:*     
LISTEN     0      100                   127.0.0.1:25                           *:*     
ESTAB      0      52                  172.16.61.2:22                 172.16.61.1:64597 
LISTEN     0      128                          :::80                          :::*    #确定80端口处于监听状态 
LISTEN     0      128                          :::22                          :::*     
LISTEN     0      100                         ::1:25                          :::*



第二步:(部署php主机)

[[email protected] ~]# ifconfig                    #php主机的地址
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.61.100  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::20c:29ff:fe70:e227  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:70:e2:27  txqueuelen 1000  (Ethernet)
        RX packets 199355  bytes 14076483 (13.4 MiB)
        RX errors 0  dropped 35  overruns 0  frame 0
        TX packets 433  bytes 42949 (41.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[[email protected] ~]# yum install -y php-fpm        #安装php-fpm程序
[[email protected] ~]# mkdir  /www                   #创建php资源路径
[[email protected] ~]# systemctl start php-fpm       #开启php-fpm程序
[[email protected] ~]# ss -tan
State      Recv-Q Send-Q            Local Address:Port              Peer Address:Port 
LISTEN     0      128                   127.0.0.1:9000                         *:*    #确定9000端口处于监听状态 
LISTEN     0      128                           *:22                           *:*     
LISTEN     0      100                   127.0.0.1:25                           *:*     
ESTAB      0      0                 172.16.61.100:22                 172.16.61.1:51354 
LISTEN     0      128                          :::22                          :::*     
LISTEN     0      100                         ::1:25                          :::*     
[[email protected] ~]# vim /etc/php-fpm.d/      #编辑php-fpm的配置文件
...
 listen = 172.16.61.100:9000     #监听于本机可以与外界通信的地址的9000端口
...  
 listen.allowed_clients = 172.16.61.2   #允许http服务器请求

第三步:(部署数据库服务器)

[[email protected] ~]# ifconfig             #数据库主机的地址
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.249.130  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::20c:29ff:feb7:d79d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b7:d7:9d  txqueuelen 1000  (Ethernet)
        RX packets 37656  bytes 2602169 (2.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 584  bytes 72342 (70.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[[email protected] ~]# yum install -y mariadb     #安装mariadb
[[email protected] ~]# rpm -q mariadb     
mariadb-5.5.44-2.el7.centos.x86_64
[[email protected] ~]# systemctl start mariadb     #启动mariadb
[root[email protected] ~]# ss -tan
State      Recv-Q Send-Q                 Local Address:Port          Peer Address:Port 
LISTEN     0      50                                 *:3306             *:*    #确定3306端口处于监听状态
LISTEN     0      128                                *:22               *:*     
LISTEN     0      100                        127.0.0.1:25               *:*     
ESTAB      0      0                     172.16.249.130:22           172.16.61.1:49826 
LISTEN     0      128                               :::22               :::*     
LISTEN     0      100                              ::1:25               :::*

第二部分

分别为两台虚拟主机提供phpMyAdmin和wordpress



因为这两个应用程序的动态资源和静态资源都放在了一个安装包内,所以我们需要在http主机和php主机各放一份程序资源。

(1)wordpress



[[email protected] a.com]# ls        #HTTP主机

index.html  wordpress  wordpress-4.3.1-zh_CN.zip

[[email protected] a.com]# ls         #PHP主机

index.php  wordpress  wordpress-4.3.1-zh_CN.zip


MariaDB [(none)]> CREATE DATABASE wpdb;       #为wordpress创建数据库wpdb Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL ON wpdb.* TO ‘tz‘@‘172.16.%.%‘ IDENTIFIED BY ‘tianzhuang‘;                
Query OK, 0 rows affected (0.01 sec)    
    #在数据库主机中为wordpress创建可以远程连接数据库的用户

[[email protected] ~]# vim /etc/my.cnf          

...

[mysqld]                                      #修改数据库配置文件并在mysqld选项下增加两项内容

skip_name_resolve = ON innodb_file_per_table = ON

....


[[email protected] wordpress]# vim wp-config-sample.php    #在php主机中更改wordpress的配置文件

....

/** WordPress数据库的名称 */           define(‘DB_NAME‘, ‘wpdb‘);                            #使用在数据库主机中创建的数据库 /** MySQL数据库用户名 */                                #使用已经授权的能远程连接的用户名 define(‘DB_USER‘, ‘tz‘); /** MySQL数据库密码 */ define(‘DB_PASSWORD‘, ‘tianzhuang‘); /** MySQL主机 */ define(‘DB_HOST‘, ‘172.16.249.130‘);

[[email protected] wordpress]# cp wp-config-sample.php wp-config.php   #把示例配置文件复制为配置文件

   

在windows主机的hosts文件中加入虚拟主机的解析,使用浏览器安装程序:

技术分享


(2)phpMyAdmin


[[email protected] b.com]# lsphpmyadmin  phpMyAdmin-4.4.14.1-all-languages.zip
[[email protected]  b.com]# lsphpmyadmin  phpMyAdmin-4.4.14.1-all-languages.zip
[[email protected] phpmyadmin]# openssl rand -base64 20wDYCF/VjCC84UO7Qi5iqfVNaquE=    #生成一段随机数
[[email protected] phpmyadmin]# cp config.sample.inc.php  config.inc.php
[[email protected] phpmyadmin]# vim config.inc.php 
....
$cfg[‘blowfish_secret‘] = ‘wDYCF/VjCC84UO7Qi5iqfVNaquE‘  #在配置文件中填入随机数,生成cookie$cfg[‘Servers‘][$i][‘host‘] = ‘172.16.249.130‘;    #设定要连接的数据库地址
[[email protected] phpmyadmin]# yum install -y php-mbstring #安装phpmyadmin需要使用的扩展包
[[email protected] phpmyadmin]# systemctl restart php-fpm #重启php-fpm


技术分享





以上是关于基于php-fpm方式部署LAMP的主要内容,如果未能解决你的问题,请参考以下文章

Centos7-yum部署配置LAMP-之LAMP及php-fpm实现反代动态资源

生产环境LAMP搭建 - 基于 fastcgi

linux架构学习第二十七天 编译安装LAMP(php-fpm)

基于php-fpm模式的lamp搭建phpmyadmin

apache + php-fpm + mariadb 分离部署

CentOS 7中基于rpm包方式安装部署apm(php-fpm) + xcache