编译安装构建分离式LAMP组合、Discuz环境搭建

----------------------------------------------------------------------------------------------------

LAMP组合(场景一):配置PHPHTTPD的模块工作

CentOS-6.7 + httpd-2.4.17 + mariadb-5.5.46 + php-5.5.30

----------------------------------------------------------------------------------------------------





编译安装httpd-2.4.17

----------------------------------------------------------------------------------------------------

编译安装步骤:


前提:安装开发环境,安装pcre-devel、zlib-devel

# yum groupinstall "Development Tools" "Server Platform Development" -y

# yum install pcre-devel zlib-devel -y


创建apache用户和组

# groupadd -r apache

# useradd -r -g apache -s /sbin/nologin -M apache


httpd依赖于更高版本(1.4以上)的apr和apr-util


(1) 编译安装apr-1.5.2

# tar xf apr-1.5.2.tar.bz2

# cd apr-1.5.2

# ./configure --prefix=/usr/local/apr

# make && make install


(2) 编译安装apr-util-1.5.4

# tar xf apr-util-1.5.4.tar.bz2

# cd apr-util-1.5.4

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

# make && make install


编译安装apr-util时需指明apr的安装路径


(3) 编译安装httpd-2.4.17

# tar xf httpd-2.4.17.tar.bz2

# cd httpd-2.4.17


编译参数:

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --enable-deflate --enable-expires --enable-headers --enable-modules=most --enable-mpms-shared=all --with-mpm=event

# make && make install



编译参数说明:

--prefix    ###安装路径

--sysconfdir   ###指定配置文件路径

--with-apr   ###指定apr安装路径

--with-apr-util   ###指定par-util安装路径

--enable-so   ##DSO兼容,DSO=Dynamic Shared Object,动态共享对象,可实现模块装载

--enable-ssl   ###支持SSL/TLS,可以实现https访问

--enable-cgi   ###支持CGI脚本

--enable-rewrite   ###加入mod_rewrite模块,支持URL重写

--with-zilb   ###打开zlib库的支持

--with-pcre   ###支持perl的正则表达式

--enable-deflate   ###支持网页压缩

--enable-expires   ###支持HTTP控制,对网站图片、js、css等内容,提供在客户端游览器缓存

--enable-headers    ###允许对HTTP请求头的控制

--enable-modules=most   ###支持大多数模块

--enable-mpms-shared=all   支持动态加载的MPM模块

--with-mpm=event   #设置默认启用的MPM模式



关于MPM模块的构建:

(1)构建MPM为静态模块

在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。


(2)构建 MPM 为动态模块

在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。



后续的配置:

1) 导出头文件

[root@httpd-server local]# ln -sv /usr/local/apache/include/ /usr/include/httpd

`/usr/include/httpd' -> `/usr/local/apache/include/'

 

2) 导出库文件

# ldconfig -v

# ldconfig -p 显示当前系统已经缓存的所有库文件列表

# 如果有库文件,编辑 /etc/ld.so.conf.d/httpd.conf 把库文件目录路径写在里面

 

3) 导出帮助手册

# vim /etc/man.config

添加一条路径:

MANPATH /usr/local/apache/man

 

如果没有导出帮助手册,可直接指定路径查找:

man -M /usr/local/apache/man httpd

 

4) 输出二进制程序

# vim /etc/profile.d/httpd.sh

添加一行:

export PATH=/usr/local/apache/bin:$PATH

 

 

启动服务:

apachectl start

ps aux | grep httpd

ss -tnl 查看是否监听80端口

 

如果启动服务时出现以下错误提示,是因为找不到FQDN导致的

AH00557: httpd: apr_sockaddr_info_get() failedfor SERVER_NAME

AH00558: httpd: Could not reliably determinethe server's fully qualified domain name

 

解决方法:

编辑主配置文件 /etc/httpd2.4/httpd.conf

修改 ServerName www.example.com:80为 ServerName 127.0.0.1:80

 

 

此时网站已能够正常访问:如果不能访问,请检查iptables 和 Selinux 是否未关闭

 

wKiom1YqbQrwY8DQAACZSoTEvz4628.jpg





安装mariadb-5.5.45(通用二进制格式)

----------------------------------------------------------------------------------------------------

把安装包解压至/usr/local/目录下,再创建个软链接名为mysql

# tar xf mariadb-5.5.45-linux-x86_64.tar.gz -C /usr/local/

# cd /usr/local/

# ln -sv mariadb-5.5.45-linux-x86_64/ mysql

`mysql' -> `mariadb-5.5.45-linux-x86_64/'

 

 

配置MariaDB:

创建mysql用户和组

# groupadd -r mysql

# useradd -r -s /sbin/nologin -M -g mysql mysql

#

# grep mysql /etc/passwd /etc/group

/etc/passwd:mysql:x:498:499::/home/mysql:/sbin/nologin

/etc/group:mysql:x:499:

 

 

修改/usr/local/mysql/目录下所有文件属主为root、属组为mysql

# chown -R root.mysql /usr/local/mysql/*

# ll mysql/

total 220

drwxr-xr-x.  2 rootmysql   4096 Oct 22 13:15 bin

-rw-r--r--.  1 rootmysql  17987 Aug  5 05:54 COPYING

-rw-r--r--.  1 rootmysql  26545 Aug  5 05:54 COPYING.LESSER

drwxr-xr-x.  3 rootmysql   4096 Oct 22 13:15 data

-rw-r--r--.  1 rootmysql   8245 Aug  5 05:54 EXCEPTIONS-CLIENT

drwxr-xr-x.  3 rootmysql   4096 Oct 22 13:15 include

-rw-r--r--.  1 rootmysql   8694 Aug  5 05:54 INSTALL-BINARY

drwxr-xr-x.  3 rootmysql   4096 Oct 22 13:15 lib

drwxr-xr-x.  4 rootmysql   4096 Oct 22 13:15 man

drwxr-xr-x. 11 root mysql  4096 Oct 22 13:15 mysql-test

-rw-r--r--.  1 rootmysql 108813 Aug  5 05:54 README

drwxr-xr-x.  2 rootmysql   4096 Oct 22 13:15 scripts

drwxr-xr-x. 27 root mysql  4096 Oct 22 13:15 share

drwxr-xr-x.  4 rootmysql   4096 Oct 22 13:15 sql-bench

drwxr-xr-x.  3 rootmysql   4096 Oct 22 13:15 support-files

 

 

创建用于存放数据库文件的目录,/data/mydata,并把该目录属主、属组为mysql

# mkdir -pv /data/mydata

mkdir: created directory `/data'

mkdir: created directory `/data/mydata'

#

# chown -R mysql.mysql /data/mydata/

#

# ll -d /data/mydata/

drwxr-xr-x. 2 mysql mysql 4096 Oct 22 13:37 /data/mydata/

 

 

输出二进制程序

# vim /etc/profile.d/mysqld.sh

添加一行:

export PATH=/usr/local/mysql/bin:$PATH

 

 

导出帮助手册

# 编辑/etc/man.config 添加一条路径 MANPATH /usr/local/mysql/man

 

如果没有导出帮助手册,可直接指定路径查找:

man -M /usr/local/mysql/man mysql

 

             

获取MariaDB配置文件:

默认提供了几个配置文件(根据服务器硬件配置选择)

/usr/local/mysql/support-files/my-medium.cnf

/usr/local/mysql/support-files/my-small.cnf

/usr/local/mysql/support-files/my-large.cnf    ###应用于512M内存

/usr/local/mysql/support-files/my-huge.cnf

/usr/local/mysql/support-files/my-innodb-heavy-4G.cnf

 

# mkdir /etc/mysql

# cp my-huge.cnf /etc/mysql/my.cnf

 

MariaDB的配置文件查找顺序:/etc/my.cnf--> /etc/mysql/my.cnf --> ~/.my.cnf

 

 

配置MariaDB数据库文件存放目录,及相关参数:

# vim /etc/mysql/my.cnf

找到 [mysqld] 修改下列几行:

datadir = /data/mydata   ###数据库文件存放路径

thread_concurrency = 8   ###表示线程并发数(cpu核心数*2)

innodb_file_per_table = on   ###用于innodb高级特性

skip_name_resolve = on    ###关闭IP地址反向解析

 

查看是否关闭:SHOWGLOBAL VARIABLES LIKE '%skip';

 

        

初始化MariaDB数据库

# cd /usr/local/mysql/

# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mydata/



启动MariaDB数据库

方法1:

# cd /usr/local/mysql/

# cp ./support-files/mysql.server /etc/init.d/mysqld

#

# chmod +x /etc/init.d/mysqld

# /etc/init.d/mysqld start

Starting MySQL... SUCCESS!

 

方法2:

/usr/local/mysql/bin/mysqld_safe &

停止mysql服务: mysqladmin shutdown

 

wKioL1YqbTiAxseUAADA_822ivs822.jpg

 

 

为数据库管理员设置密码:

# mysqladmin -u root password 'magelinux'

 

 

MariaDB默认不允许用户远程登录,因此要对用户和主机进行授权:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TOroot@"%" IDENTIFIED BY 'magelinux' WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

 

 

 

编译安装php:(php编译为httpd的模块)

----------------------------------------------------------------------------------------------------

检查安装环境:

 

rpm -qa zlib* libpng* libjpeg* bzip2* libxml* libxslt*freetype* gd-devel* curl* openssl* libcurl-dev* libiconv* libmcrypt*

 

zlib-1.2.3-29.el6.x86_64

zlib-devel-1.2.3-29.el6.x86_64

libxml2-2.7.6-20.el6.x86_64

libxml2-devel-2.7.6-20.el6.x86_64

freetype-2.3.11-15.el6_6.1.x86_64

freetype-devel-2.3.11-15.el6_6.1.x86_64

libxslt-1.1.26-2.el6_3.1.x86_64

libxslt-devel-1.1.26-2.el6_3.1.x86_64

gd-devel-2.0.35-11.el6.x86_64

curl-7.19.7-46.el6.x86_64

openssl-1.0.1e-42.el6.x86_64

openssl-devel-1.0.1e-42.el6.x86_64

libpng-1.2.49-1.el6_2.x86_64

libpng-devel-1.2.49-1.el6_2.x86_64

bzip2-1.0.5-7.el6_0.x86_64

bzip2-devel-1.0.5-7.el6_0.x86_64

libjpeg-turbo-1.2.1-3.el6_5.x86_64

libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64

libcurl-devel.x86_64

libmcrypt-2.5.8-9.el6.x86_64

libmcrypt-devel-2.5.8-9.el6.x86_64

 

 

yum install zlib zlib-devel libxml2 libxml2-devel freetypefreetype-devel libxslt libxslt-devel gd-devel curl openssl libpng libpng-develbzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libcurl-devel -y

 

 

libiconv 需要额外编译安装

http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

./configure --prefix=/usr/local/libiconv

make && make install

 

libmcrypt-devel 需要额外安装,在Fredora-EPEL源中寻找

http://mirrors.sohu.com/fedora-epel/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm

http://mirrors.sohu.com/fedora-epel/6/x86_64/libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

 

 

编译安装PHP

# tar xfphp-5.5.30.tar.bz2

# cd php-5.5.30/

 

编译参数:

# ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --with-apxs2=/usr/local/apache/bin/apxs --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --with-mcrypt --with-bz2 --with-openssl --with-curl --with-xsl --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

 

# make && make install



编译参数说明:

--prefix    ###程序安装路径

--with-config-file-path   ###指定配置文件路径

--with-config-file-scan-dir   ###离散的配置文件搜索路径

--with-apxs2   ###编译共享的apache2.0处理程序的模块。

--enable-mbstring   ###启用多字节字符串的支持

--with-freetype-dir   ###指定FreeType2的安装目录

--with-jpeg-dir   ###开启对jpeg图片的支持

--with-png-dir   ###开启对png图片的支持

--with-zlib   ###开启zlib库的支持

--with-libxml-dir   ##开启libxml2库的支持

--enable-xml   ###开启对XML支持

--with-mcrypt   ##mcrypt算法的扩展

--with-bz2   ###开启对bz2文件的支持

--with-openssl   ###对openssl的支持,加密传输时用到的

--with-curl   ###开启curl浏览工具的支持

--with-xsl    ###开启XSLT文件支持,扩展了libXML2库 ,需要libxslt软件

--with-iconv=/usr/local/libiconv    ###支持iconv,并指定iconv安装路径

--enable-sockets   ###开启sockets支持

--enable-short-tags   ###开启使用短的标记

--enable-static   ###编译静态库

--enable-gd-native-ttf   ###支持TrueType字符串函数库

--enable-ftp   ###开启ftp的支持

--enable-maintainer-zts ###启用线程安全模式

--with-mysql=mysqlnd   ###启动对MySQL的支持

--with-pdo-mysql=mysqlnd ###pdo的mysql支持

--with-mysqli=mysqlnd   ###启用对MySQLi支持



为了支持apache的worker或event这两个MPM,编译时使用--enable-maintainer-zts 选项

 

如果php与mysql同在一台机,那么编译安装的时候要指定mysql的路径:

--with-mysql=/usr/local/mysql/

--with-mysqli=/usr/local/mysql/bin/mysql_config

 

如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。

# ./configure --with-mysql=mysqlnd--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

 

如果PHP不是以编译安装方式安装的,那么可能需要安装php-mysql客户端

php-mysql.x86_64

 

 

提供php的配置文件:

# mkdir /etc/php/

# cp /tmp/php-5.5.30/php.ini-production /etc/php/php.ini

 

# vim /ect/php/php.ini

修改时区:

data.timezone = “Asia/Shanghai”

 

 

配置apache支持php

 

编辑apache主配置文件httpd.conf

 

检查配置文件内有无包含php模块的行

LoadModule php5_module       modules/libphp5.so

 

增加如下内容:

AddType application/x-httpd-php .php .phtml

AddType application/x-httpd-php-source .phps

 

添加index.php 为默认搜索主页

<IfModule dir_module>

DirectoryIndex index.php index.html

</IfModule>

 

 

测试apache能否支持php

在网站根目录下创建一个index.php的主页文件

# vim /usr/local/apache/htdocs/index.php

 

主页内容:

 

<?php

phpinfo();

?>

 

wKiom1YqbQuBZvreAAKJicCs_Cs875.jpg

 

 

测试php能否连接mysql

# vim /usr/local/apache/htdocs/index.php

#

 

<?php

$link = mysql_connect('172.16.2.6','root','magelinux');

if($link){

echo "mysql connection successfully!";

}else{

echo "mysql connection Failed.";

}

mysql_close();

?>

 


 wKiom1YqcOahCBTJAACF7s2kC3g145.jpg

 

 

使用phpMyAdmin数据库图形化管理界面

把phpMyAdmin解压至/data/web/

# mkdir -pv /data/web/

# unzip phpMyAdmin-4.0.5-all-languages.zip -d /data/web/

#

# cd /data/web/

# mv phpMyAdmin-4.0.5-all-languages/ pmadmin

 

 

 

配置虚拟主机用于访问phpMyAdmin管理界面

(1)、编辑httpd主配置文件,开启虚拟主机开关

# vim /etc/httpd/httpd.conf

# Virtual hosts

Include /etc/httpd/extra/httpd-vhosts.conf

 

(2)、编辑虚拟主机配置文件,添加一个FQDN的虚拟主机

# vim /etc/httpd/extra/httpd-vhosts.conf

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/data/web/pmadmin"

ServerName pmadin.magelinux.com

ServerAlias magelinux.com

ErrorLog "/usr/local/apache/logs/pmadmin-error_log"

CustomLog"/usr/local/apache/logs/pmadmin-access_log" common

</VirtualHost>

 

<Directory "/data/web/pmadmin">

AllowOverride None

Options None

Require all granted

</Directory>

 

(3)、重启服务测试访问

 

wKiom1YqbQug2PUcAAFb7ikLwaY607.jpg

 

wKioL1YqbTmxecmqAAQLMZ7N6QI154.jpg

 

使用xcache扩展模块提升php网站性能

 

使用ab命令对php页面进行压力测试:

# ab -n 1000 -c 50 http://pmadmin.magelinux.com/index.php

共发起1000个请求,并发访问50个

 

Server Software:       Apache/2.4.17

Server Hostname:       pmadmin.magelinux.com

Server Port:           80

 

Document Path:         /index.php

Document Length:        8146 bytes    ###页面文件大小

 

Concurrency Level:     50

Time taken for tests:  31.035 seconds

Complete requests:     1000

Failed requests:       0

Total transferred:     9439584 bytes

HTML transferred:      8146000 bytes

Requests per second:    32.22 [#/sec] (mean)    ###服务器每秒响应个数

Time per request:      1551.746 [ms] (mean)

Time per request:      31.035 [ms] (mean, across all concurrent requests)

Transfer rate:         297.03 [Kbytes/sec] received

 

 

由于服务器接收到客户端对动态页面的请求,要交给应用程序服务处理后再把结果返回给客户端,可见,速度相当慢。

 

1、安装xcache-3.2.0

 

xcache的编译过程比较独特,因为它是php的扩展模块,所以没有自己的configure脚本文件,

因此它要生成configure脚本需要依赖当前的php环境,进到该软件解压的目录下执行phpize

phpize是php提供用来专门准备一个模块可以编译php额外扩展的功能

# tar xf xcache-3.2.0.tar.bz2

# cd xcache-3.2.0

#

# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:        20121113

Zend Module Api No:     20121212

Zend Extension Api No:  220121212

#

# ./configure --enable-xcache--with-php-config=/usr/local/php/bin/php-config

# make && make install

 

编译安装完成后它会安装一个php扩展模块,并提示一个路径:

/usr/local/php/lib/php/extensions/no-debug-zts-20121212/

 

2、编辑php.ini,整合php和xcache:

# cp xcache.ini /etc/php.d

 

编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:

extension =/usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so

   

3、重启httpd服务生效

 

打开phpinfo页,可看到php已加载该模块

    wKioL1YqcYjDHbiHAACw6Wwoakk241.jpg

wKioL1YqbhmC1pdAAADzAoWuGqM295.jpg

 

此时,再使用ab命令对php页面进行压力测试:

# ab -n 1000 -c 50 http://pmadmin.magelinux.com/index.php

同样发起1000个请求,并发访问50个

 

Server Software:       Apache/2.4.17

Server Hostname:       pmadmin.magelinux.com

Server Port:           80

 

Document Path:         /index.php

Document Length:       8146 bytes

 

Concurrency Level:     50

Time taken for tests:  4.338 seconds

Complete requests:     1000

Failed requests:       0

Total transferred:     9439598 bytes

HTML transferred:      8146000 bytes

Requests per second:    230.54 [#/sec] (mean)

Time per request:      216.884 [ms] (mean)

Time per request:      4.338 [ms] (mean, across all concurrent requests)

Transfer rate:         2125.19 [Kbytes/sec] received

 

可见,该扩展模块对服务器响应速度已有非常显著的提升!

 

 

 

 

----------------------------------------------------------------------------------------------------

LAMP组合(场景二):PHPFPM模式工作

CentOS-6.7 + httpd-2.4.17 + mariadb-5.5.46 + php-5.5.30

----------------------------------------------------------------------------------------------------

 

wKioL1Yqbsvzv08OAAE_yZuLqrE325.jpg

 

 

 

fastcgi:php-5.3.3 之后的版本自带了fpm组件,

fpm组件能把PHP解释器工作为守护进程,并提供类似prefork模式的应用,它能够接收来自前端httpd,http-proxy-fcgi反向代理用户对动态内容请求至后端的fastcgi server

 

构建分离式LAMP需要注意的地方:

1、动态资源部署在应用程序服务器上(php-fpm),静态资源部署在Web服务器上

2、php以fpm工作方式时,它不会被编译成httpd模块,因此,编译时无须使用--with-apxs2=/PATH

参数,httpd的主配置文件中也无须再 LoadModule php5_module

把php编译为fpm工作模式时需要开启的重要的参数 --enable-fpm

3、编译php时,需连接mysql或其他数据库管理系统时,需要启用其相关的驱动模块。

4、php与mysql不在同一节点,连接mysql的用户账号需要有远程访问权限。


 

 

编译安装PHP:

----------------------------------------------------------------------------------------------------

# tar xf php-5.5.30.tar.bz2

# cd php-5.5.30/

# ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --enable-mbstring --with-freetype-dir--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml--with-mcrypt --with-bz2 --with-openssl --with-curl --with-xsl --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-fpm


# make && make install

 

  

为php提供配置文件

# mkdir /etc/php /etc/php.d

# cp php.ini-production /ect/php/php.ini

 

 

配置php-fpm

 

为php-fpm提供SysV init脚本,并将其添加至服务列表:

# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

# chmod +x /etc/rc.d/init.d/php-fpm

# chkconfig --add php-fpm

# chkconfig php-fpm on

 

检查php-fpm服务是否自启动

# chkconfig | grep php

php-fpm               0:off        1:off        2:on        3:on        4:on        5:on        6:off

 

 

为php-fpm提供配置文件:

# cp /usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf

 

 

编辑php-fpm的配置文件,配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

# vim /usr/local/php/etc/php-fpm.conf

 

listen = 172.16.2.5:9000

pm.max_children = 50   ###静态方式下开启的php-fpm进程数量

pm.start_servers = 5   ###动态方式下的起始php-fpm进程数量

pm.min_spare_servers = 2   ###动态方式下的最小php-fpm进程数量

pm.max_spare_servers = 8   ###动态方式下的最大php-fpm进程数量

pid = /usr/local/php/var/run/php-fpm.pid    ###PID文件路径

 

 

说明:如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。

 

如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。

系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的

需求动态在pm.min_spare_servers 和pm.max_spare_servers之间调整php-fpm进程数。

 

当php-fpm工作为独立守护进程时,默认监听在127.0.0.1:9000 端口上,即默认至允许本机上的

httpd进程访问,当前环境是httpd和php分别在不同服务器安装,因此要修改监听端口,让其他主机

能够访问。

 

各自以fast-cgi方式工作时,前端的Web服务器必须以fcgi模块跟后端主机进行通信。

 

 

接下来就可以启动php-fpm了

# service php-fpm start

 

 

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

# ps aux | grep php

root       4351  0.0 0.5 112472  5588 ?        Ss  18:49   0:00 php-fpm: masterprocess (/usr/local/php/etc/php-fpm.conf)                                                                   

nobody     4352  0.0 0.4 112472  4804 ?        S   18:49   0:00 php-fpm: poolwww                                                                                                           

nobody     4353  0.0 0.4 112472  4804 ?        S   18:49   0:00 php-fpm: poolwww                                                                                                           

nobody     4354  0.0 0.4 112472  4804 ?        S   18:49   0:00 php-fpm: poolwww                                                                                                           

nobody     4355  0.0 0.4 112472  4804 ?        S   18:49   0:00 php-fpm: poolwww                                                                                                           

nobody     4356  0.0 0.4 112472  4804 ?        S   18:49   0:00 php-fpm: pool www

 

 

验正其是否已经监听在相应的套接字,此时已监听在172.16.2.5:9000 这个套接字上了

# netstat -tnlp | grep php-fpm

tcp        0      0 172.16.2.5:9000             0.0.0.0:*                   LISTEN      4351/php-fpm       

 

 

 

在httpd服务器上设置:

----------------------------------------------------------------------------------------------------

配置httpd

 

1、启用httpd的相关模块

 

在Apache httpd2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,

它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

 

开启虚拟主机开关

Include /etc/httpd/extra/httpd-vhosts.conf

 

 

2、配置虚拟主机支持使用fcgi

 

在相应的虚拟主机中添加类似如下两行:

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

 

ProxyRequests Off:关闭正向代理

ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI

所以这里直接在fcgi://127.0.0.1:9000 后指明了这两个参数

其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

 

 

需要注意的问题:

动态资源需要放在PHP服务器上,当httpd服务器接收到客户端浏览器请求的是动态页面内容时,

会把请求发往指定的PHP服务器上处理,但是静态页面例如:html、jpg等还是会在httpd服务器上

处理,不然图片等信息可能就无法显示,因此在部署网站时,需要把网站的资源分开部署在两边。

分别在HTTPD服务器和PHP服务器上各自创建同样路径的目录,不然启动httpd服务时会报错。

 

 

编辑虚拟主机配置文件:

# vim /etc/httpd/extra/httpd-vhosts.conf

 

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/data/web/www/"

ServerName phpinfo.magelinux.com

ServerAlias magelinux.com

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$fcgi://172.16.2.5:9000/data/web/www/$1

ErrorLog "/usr/local/apache/logs/phpinfo-error_log"

CustomLog"/usr/local/apache/logs/phpinfo-access_log" common

</VirtualHost>

 

 

<Directory "/data/web/www/">

AllowOverride None

Options None

Require all granted

</Directory>

 

 

<IfModule dir_module>

DirectoryIndex index.php index.html

</IfModule>

 

 

创建虚拟主机主页(在PHP Server上),测试httpd能否支持php

# vim /data/web/www/index.php

编辑如下内容:

 

<?php

phpinfo();

?>

 

客户端浏览器上测试:

此时,Server API 工作模式为:FPM/FastCGI

 

wKiom1YqbeygJSMEAAL39uGsyGY578.jpg





Discuz站点搭建

-------------------------------------------------------------------------------------------

1、分别在httpd server 和 php server上创建站点目录

[root@httpd-server ~]# mkdir /data/web/discuz

 

[root@php-server ~]# mkdir /data/web/discuz

 

 

2、下载discuz软件包:

http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip

在php server上,解压Discuz_X3.2_SC_GBK.zip软件包至/data/web/discuz目录下

[root@php-server software]# unzip Discuz_X3.2_SC_GBK.zip -d/data/web/discuz/

[root@php-server software]# ll /data/web/discuz/

total 12

drwxr-xr-x.  2 rootroot 4096 Jun  9 10:21 readme

drwxr-xr-x. 12 root root 4096 Jun  9 10:21 upload

drwxr-xr-x.  4 rootroot 4096 Jun  9 10:21 utility

[root@php-server software]#

 

 

3、使用scp命令,往httpd server上的/data/web/discuz/复制一份同样的数据

[root@php-server software]# cd /data/web/discuz/

[root@php-server discuz]# scp -r readme/ upload/ utility/172.16.2.2:/data/web/discuz/

[email protected]'s password:

 

对比文件大小:

[root@php-server discuz]# du -hs /data/web/discuz/

38M        /data/web/discuz/

[root@php-server discuz]#

 

[root@httpd-server ~]# ll /data/web/discuz/

total 12

drwxr-xr-x.  2 rootroot 4096 Oct 24 16:06 readme

drwxr-xr-x. 12 root root 4096 Oct 24 16:06 upload

drwxr-xr-x.  4 rootroot 4096 Oct 24 16:06 utility

[root@httpd-server ~]# du -sh /data/web/discuz/

38M        /data/web/discuz/

 

 

4、切换到httpd server上创建discuz站点的虚拟主机

[root@httpd-server ~]# vim /etc/httpd/extra/httpd-vhosts.conf

 

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/data/web/discuz"

ServerName bbs.magelinux.com

ServerAlias bbs.magelinux.com

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$fcgi://172.16.2.5:9000/data/web/discuz/$1

ErrorLog "/usr/local/apache/logs/bbs-error_log"

CustomLog "/usr/local/apache/logs/bbs-access_log"common

</VirtualHost>

 

 

<Directory "/data/web/discuz/">

AllowOverride None

Options None

Require all granted

</Directory>

 

 

修改了配置文件,需要重新载入配置文件,或重启httpd服务

[root@httpd-server ~]# apachectl restart

 

 

5、切换到database server上,添加discuz账号、密码、库,并授权登录

 

[root@database-server ~]# mysql -u root -p

Enter password: ===>输入密码,前面设置的 magelinux

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 102

Server version: 5.5.45-MariaDB-log MariaDB Server

 

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab andothers.

 

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

 

MariaDB [(none)]> CREATE DATABASE bbsdb;

Query OK, 1 row affected (0.00 sec)

 

MariaDB [(none)]> GRANT ALL ON bbsdb.* TO 'bbsAdmin'@'%' IDENTIFIED BY'magelinux';

Query OK, 0 rows affected (0.02 sec)

 

MariaDB [(none)]> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

 

MariaDB [(none)]> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| bbsdb             |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.01 sec)

 

MariaDB [(none)]>

 

 

6、在Windows上修改hosts文件,添加一条bbs.magelinux.com

192.168.1.130 pma.magelinux.com

192.168.1.130 phpinfo.magelinux.com

192.168.1.130 bbs.magelinux.com

 

打开浏览器访问 http://bbs.magelinux.com/upload

 

wKiom1YrVqnxR7P5AAT1zoVg770837.jpg

        

 

点击“同意”进入安装向导


 

wKioL1YrVtjhftN-AAPzD7KkzRg646.jpg

 

 

7、解决权限问题:

[root@php-server web]#cd /data/web/discuz/upload

[root@php-server upload]# chmod -R go+w config/

[root@php-server upload]# chmod -R go+w data/

[root@php-server upload]# chmod -R go+w uc_*

[root@php-server upload]#



wKiom1YrVqmD8R7YAAOztZL5JY4428.jpg

 

点击“下一步”

 

wKioL1YrVtiSlgWWAAJ6VV_DyVI651.jpg

 

选择“全新安装”,点击“下一步”

 

8、填入数据库IP,数据库名,数据库用户名与密码,bbs管理员的密码等信息,安装数据库

 

wKiom1YrVqrzQoEYAAMiLelmHlw627.jpg



wKioL1YrVtmB0QDKAANzRbxjcHs507.jpg



安装完成后点击右下角的“您的论坛已完成安装,点此访问”



wKioL1YrVtnCciglAALZMmCkfrE282.jpg



网站已经可以访问了,但是图片无法显示,因为图片是静态资源,静态资源是httpd server上负责响应的

因此,r需要再次把php serve上的/data/web/discuz/ 目录下的文件与httpd server上的文件进行同步。

 

[root@php-server web]# cd /data/web/discuz/

[root@php-server discuz]# scp -r readme/upload/ utility/ 172.16.2.2:/data/web/discuz/

[email protected]'s password:

 


此时,图片已经可以正常显示了,discuz论坛建立完毕

wKiom1YrVqvQHC_iAAQdu0kH2ko456.jpg

 


你可能感兴趣的:(apache,PHP,mariaDB,分离式LAMP)