CentOS 6 系统下编译安装Apache ,mysql,并实现PHPfpm方式工作.

 

所需安装包: httpd 2.4.10, mysql-5.5.44-linux2.6-x86_64.tar.gz, php-5.4.45.tar.bz2, apr-util-1.5.3.tar.bz2, apr-1.5.0.tar.bz2

 

一、   编译安装Apache

 

1.  编译安装apr

~]# tar xf apr-1.5.0.tar.bz2

~]# cd apr-1.5.0

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

~]# make && make install

 wKiom1YN9c-AnZLAAALfMCClYNg918.jpg

wKioL1YN9k6DHMfDAAMjlOwvtnk345.jpg

2.  编译安装apr-util

~]# tar xf apr-util-1.5.3.tar.bz2

~]# cd apr-util-1.5.3

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

~]# make && make install

wKiom1YN9leByrvxAANSOuneWzA418.jpgwKioL1YN9nzyqaH-AAPZUUb1QxY512.jpg

3.  httpd-2.4.10编译过程要依赖于pcre-devel软件包,需要事先安装。在系统光盘上就有这个安装包或者yum方式安装。

 wKioL1YN9oyxn9lMAAJY1yFji1c430.jpg

4.  安装httpd-2.4.10

~]# tar xf httpd-2.4.9.tar.bz2

~]# cd httpd-2.4.9

~]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event --with-ssl=/usr/local/openssl

~]# make && make install

 

 

    ./configure选项说明:

    --prefix=/usr/local/apache:指明安装位置。可自定义。

    --sysconfdir=/etc/httpd24:指明配置文件目录位置。可自定义。

    --enable-so :开启动态共享模块支持。

--enable-ssl:开启https功能。

--enable-cgi :开启CGI脚本功能。

--enable-rewrite :开启地址重写

--with-zlib :指明压缩

--with-pcre :指明pcre

--with-apr=/usr/local/apr :指明apr所在目录。

--with-apr-util=/usr/local/apr-util :指明apr-util所在目录

--enable-modules=most :尽可能安装多的模块。

--enable-mpms-shared=all :安装所有共享库

--with-mpm=event :默认mpm使用event模式。

--with-ssl=/usr/local/openssl:指明openssl位置。(只针对在./configure时提示openssl版本过低时安装新版openssl后使用.

httpd./configure过程中可能会遇到一个错误:

checking for OpenSSL  version >= 0.9.7… FAILED

configure: WARNING: OpenSSL  version is too old

no

提示openssl版本太老。

解决方法:

    下载新版本的openssl 编译安装或yum方式升级openssl

    安装openssl-devel

注意:编译安装openssl时在./configure时加入选项 –fPIC.

./config -fPIC --prefix=/usr/local/openssl  指定安装位置。并把--with-ssl=/usr/local/openssl加入到httpd./configure后面.

 

配置服务脚本:

         httpd编译安装后默认是没有服务脚本的,可以使用其他httpd的服务脚本修改之后放到/etc/rc.d/init.d/目录下也叫作httpd

1.      编辑/etc/httpd/httpd.conf,添加:PidFile  "/var/run/httpd.pid"保存退出。

2.      修改新的httpd服务脚本让其为当前安装的httpd工作。

共三处修改位置:

apachectl=/usr/local/apache/bin/apachectl      //修改为当前系统中httpdapachectl的路径

httpd=${HTTPD-/usr/local/apache/bin/httpd}    //修改为当前系统中httpd主程序位置.

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}         //修改为在httpd.conf中添加的pid文件位置.

wKioL1YN9s2jBIsgAADgLyL85As451.jpg 

                  3. chmod 755 /etc/init.d/httpd    //增加执行权限

chkconfig --add httpd          //添加httpd到服务开机启动

ln -sf /usr/local/apache/bin/httpd /usr/sbin/httpd  //增加软链接至/sbin

如果你系统中安装过httpd,在你执行httpd命令时很可能找到的是你以前的httpd程序,解决办法:

export PATH=/usr/local/apache/bin/:$PATH  //把当前新安装的httpd路径位置提前.

 

此时可以启动服务测试: service httpd start 如启动成功测试restart reload, stop是否都能正常起作用。使用命令ss –tnl查看当前主机80端口是否处于监听(LISTEN)状态,然后在浏览器中输入当前主机IP地址并回车:

 wKiom1YN9tSSACswAACh4nLFUIs099.jpg

出现图中字样说明httpd已经编译安装完成,并且能够正常工作。

 

二、编译安装MySQL-5.5.44

         1.首先准备好需要存放MySQL数据文件的位置,本例中使用/sqldata/date在根目录下.

         2.新建用户以安全方式运行进程

                  

~]# groupadd -r mysql

~]# useradd -g mysql -r -s /sbin/nologin -M -d /sqldate/data mysql

~]# chown -R mysql:mysql /sqldata/data

3.      安装初始化MySQL

[root@localhost ~]# tar -xf mysql-5.5.44-linux2.6-x86_64.tar.gz -C /usr/local

[root@localhost ~]# cd /usr/local/mysql-5.5.44-linux2.6-x86_64/

[root@localhost local]# ln -sv mysql-5.5.44-linux2.6-x86_64/ mysql

[root@localhost local]# cd mysql

                            先改变属主:

                                     [root@localhost mysql]# chown -R mysql:mysql  .

[root@localhost mysql]# ll

total 216

drwxr-xr-x  2 mysql mysql   4096 Sep 28 20:06 bin

-rw-r--r--  1 mysql mysql  17987 May  4 20:16 COPYING

drwxr-xr-x  3 mysql mysql   4096 Sep 28 20:06 data

drwxr-xr-x  2 mysql mysql   4096 Sep 28 20:06 docs

[root@localhost mysql]#  scripts/mysql_install_db --user=mysql --datadir=/sqldata/data

Installing MySQL system tables...

150928 20:18:27 [Note] ./bin/mysqld  (mysqld 5.5.44) starting as process 4334 ...

OK

Filling help tables...

150928 20:18:27 [Note] ./bin/mysqld  (mysqld 5.5.44) starting as process 4342 ...

OK

 

To start mysqld at boot time you have to  copy

support-files/mysql.server to the right  place for your system

 

PLEASE REMEMBER TO SET A PASSWORD FOR THE  MySQL root USER !

To do so, start the server, then issue  the following commands:

 

./bin/mysqladmin -u root password  'new-password'

./bin/mysqladmin -u root -h  localhost.localdomain password 'new-password'

 

Alternatively you can run:

./bin/mysql_secure_installation

 

which will also give you the option of  removing the test

databases and anonymous user created by  default.  This is

strongly recommended for production  servers.

 

See the manual for more instructions.

 

You can start the MySQL daemon with:

cd . ; ./bin/mysqld_safe &

 

You can test the MySQL daemon with  mysql-test-run.pl

cd ./mysql-test ; perl mysql-test-run.pl

 

Please report any problems at  http://bugs.mysql.com/

 

[root@localhost mysql]# chown -R root

         执行安装脚本:[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/sqldata/data

         改回属主为root: [root@localhost mysql]# chown -R root .

4.      MySQL提供配置文件:

[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf

[root@localhost mysql]# vim /etc/my.cnf     //编辑my.cnf

wKioL1YN9xuANF9yAAHyA8mh64w619.jpg

5.      mysql提供服务脚本:

support-files目录下MySQL提供了一个服务脚本直接复制到init.d目录下即可.

  [root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld    //添加执行权限

[root@localhost mysql]# service mysql start     //启动服务

 wKiom1YN90bxtul4AAGht4n60_8363.jpg

6.      后续设置:

编辑/etc/man.conf文件添加在MANPATH下面增加一行: MANPATH  /usr/local/mysql/man

这样方面查看sqlman文档

        wKioL1YN92_SwFO_AADIcv6Cc-s845.jpg                   

通过简单的创建链接实现mysql的头文件至系统头文件路径/usr/include

[root@localhost sqldata]# ln -sv /usr/local/mysql/include/ /usr/include/mysql

`/usr/include/mysql' -> `/usr/local/mysql/include/'

[root@localhost sqldata]#

 

添加mysql的库文件给系统库查找路径:

[root@localhost sqldata]# vim /etc/ld.so.conf.d/mysql.conf

文件中加入:/usr/local/mysql/lib

[root@localhost sqldata]# ldconfig    //让系统重读配置

 

到此MySQL编译安装完成!

 

三、            编译安装PHP并以fpm方式工作

 

为了体现效果我在另外一台虚拟机上编译安装phphttpd主机如果要用到php解释就扔到这台机器上.

 先安装所需的软件包: 配置好yum源使用yum方式安装.也可使用光盘镜像.

         libmcrypt-2.5.7-5.el5.i386.rpm

libmcrypt-devel-2.5.7-5.el5.i386.rpm

mhash-0.9.9-1.el5.centos.i386.rpm

mhash-devel-0.9.9-1.el5.centos.i386.rpm

       yum -y groupinstall  X Software Development

 

 [root@localhost ~]# tar xf php-5.4.45.tar.bz2

 [root@localhost ~]# cd php-5.4.45

[root@localhost local]# ./configure --prefix=/usr/local/php5  --with-openssl=/usr/local/openssl/ --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib=/usr/local/zlib --with-libxml-dir=/usr/local/libxml2 --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

[root@localhost local]# make

[root@localhost local]# make install

 

PHP安装也简单,但如果要开启多个功能就不那么简单了.在执行./configure的时候可能会已到很多问题但不用担心大部分是依赖关系的问题,如果有提示当前系统中的某个软件版本低那么需要升级之后再执行./configure

说明: --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd  如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQLMySQL开发包了。mysqlndphp 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。

在本例中./configure中其他选项都是开启一些功能的选项,其中有的功能如果你是编译安装的需要在后面指定路径: 比如--with-openssl=/usr/local/openssl/ 如果系统中已经有符合条件的openssl则只需: --with-openssl不需要等号和后面的路径. 所需的组件就不一一介绍如果./configure过程中出错看清错误提示,安装对应的开发包即可。大多问题都是依赖关系的问题。

 

PHP提供配置文件:

[root@localhost php-5.4.45]# cp php.ini-production /etc/php.ini  //源文件中已有准备好的配置文件复制重命名即可.

wKiom1YN95biJ9FaAAS03EXFDV8290.jpg

准备php-fpm服务脚本: 在解压后的目录中的sapi/fpm/init.d.php-fpm是服务脚本

[root@localhost php-5.4.45]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm  //复制源文件的服务脚本

[root@localhost php-5.4.45]# chmod +x /etc/rc.d/init.d/php-fpm  //添加执行权限.

[root@localhost php-5.4.45]# chkconfig --add php-fpm    //添加至启动列表

[root@localhost php-5.4.45]# chkconfig php-fpm on   //设置为开机自动启动

 

复制php-fpm.conf.default到原目录下重命名为php-fpm.con 也可以重命名但为保留原有设置最好复制一份.

[root@localhost php-5.4.45]# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf

编辑/usr/local/php5/etc/php-fpm.conf修改适用自己的设置:

         listen = 192.168.1.113:9000  //IP地址自己定义一般监听自己本机的IP地址.

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 8

 

启动服务: service php-fpm start 。查看9000端口是否处于监听(LISTENss –tnl 。验证启动的php-fpm进程数量是否符合设置。

新建目录来存放php文件,本例中使用/usr/local/php新建一个php文件名为index.php来测试.

wKioL1YN-Buy8q4fAAGxAtIGWeE153.jpg

[root@localhost  php]# mkdir -p /usr/local/php/

[root@localhost  php]# ll

total  4

-rwxr-xr-x  1 root root 191 Oct  1 03:36 index.php

[root@localhost  php]#

index.php文件内容:

<?php

         phpinfo();   //调用phpinfo函数显示php的配置信息页面.

?>

 

 

四、            配置httpd2.4.10

Apache httpd 2.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

[root@localhost ~]# vim /etc/httpd24/httpd.conf

去掉两个模块行首的#号。

[root@localhost ~]# vim /etc/httpd/httpd.conf

 1、添加如下二行

   AddType application/x-httpd-php  .php

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

 

 2、找到DirectoryIndex index.html

   添加index.php:让Apache支持php文件

    DirectoryIndex  index.php  index.html

wKioL1YN-JvwbkRSAAE0bcQK36Q818.jpg

wKiom1YN-I2BIt-XAABOdcXbByI207.jpg

wKioL1YN-JzT7c7bAAGmUgJb9b0194.jpg




然后在网站的配置文件或者在虚拟主机的配置文件中加入:

 

  ProxyRequests Off   //关闭正向代理

  ProxyPassMatch ^/(.*\.php)$ fcgi://PHP-FPM.IP_ADDRESS:9000/PATH/SOMEWHERE/$1   //匹配php结尾的文件并通过fcgi发送到php-fpm主机ip:9000 php-fpm默认是9000端口并指定目录。

 

本例中我使用一台Apache虚拟主机来测试:

 

注意:Apache2.4开启虚拟主机首先要把#Include /etc/httpd24/extra/vhosts.conf 这一行前面的#号删除,这样在启动服务的时候会加载这个vhosts.conf虚拟主机的配置文件

wKiom1YN-MawW14oAAA2q40pRYI684.jpg

vhosts.conf配置文件内容:

<VirtualHost  192.168.1.111:80>

    ServerAdmin  webmaster@dummy-host.example.com

    DocumentRoot  "/usr/local/apache/htdocs/vh1"

    ServerName admin.ff.com

    ServerAlias www.dummy-host.example.com

    ErrorLog  "logs/dummy-host.example.com-error_log"

    CustomLog  "logs/dummy-host.example.com-access_log" common

    ProxyRequests Off

    ProxyPassMatch ^/(.*\.php)$  fcgi://192.168.1.113:9000/usr/local/php/$1

<Directory  "/usr/local/apache/htdocs/vh1">

        Options none

        AllowOverride none

        Require all granted

</Directory>

</VirtualHost>

 

测试:

         在虚拟主机目录中有我创建了一个index.html文件用来测试静态页面.我分别请求index.htmlindex.phpindex.php文件是在php-fpm主机中

wKioL1YN-QiyDcraAACAXXsQHFs986.jpg

index.html文件访问OK.

wKiom1YN-PrwwLLIAABi9F2Eeag395.jpg



index.php访问OK.

wKioL1YN-SSSDKRJAAGY9A8xWxY191.jpg


现在再更改index.php内容测试连接MySQL服务器:

首先在MySQL主机上新建一个用户并允许远程访问:

mysql>  GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT  OPTION;

Query  OK, 0 rows affected (0.00 sec)

// 新建用户test, %表示允许在任意主机登录(也可以指定ip或主机名称)设定密码为test

 

mysql>  FLUSH privileges;   //更新授权

Query  OK, 0 rows affected (0.00 sec)

 

mysql>quit

 

修改index.php文件内容:

[root@localhost  php]# vim index.php

<?php

     $link =  mysql_connect('192.168.1.111','test','test');   //调用mysql_connect连接MySQL数据库,指定主机IP地址,用户名和密码. mysql_connect如果成功,则返回一个 MySQL 连接标识,失败则返回 FALSE然后把返回结果给变量link 

     if ($link)                  //判断连接是否成功

       echo "Success...";        //成功输出Success…

     else

       echo "Failure...";         //失败输出Failure…

 

     mysql_close();         //关闭MySQL连接

 

        phpinfo();         //显示配置信息页

?>

保存内容重新访问index.php页面,连接成功!

wKiom1YN-VGSDT_OAAFgA0baB38675.jpg

至此php-fpm, Apache2.4, MySQL编译安装LAMP环境搭建完成!

 

 

php加速安装Xcache:

[root@localhost  ~]# tar xf xcache-3.2.0.tar.gz

[root@localhost  ~]# cd xcache-3.2.0

[root@localhost  xcache-3.2.0]# /usr/local/php5/bin/php

php         php-cgi     php-config  phpize     

[root@localhost  xcache-3.2.0]# /usr/local/php5/bin/phpize

Configuring  for:

PHP  Api Version:         20100412

Zend  Module Api No:      20100525

Zend  Extension Api No:   220100525

[root@localhost  xcache-3.2.0]# ./configure --enable-xcache  --with-php-config=/usr/local/php5/bin/php-config

[root@localhost  xcache-3.2.0]# make && make install

安装完成后会出现下面的画面:

wKioL1YN-XSh370RAALlUA5_RUo188.jpg

配置xcache:

         把源码目录中的xcache.ini配置文件放到php.d目录下重启服务让php加载:

[root@localhost  xcache-3.2.0]# mkdir /etc/php.d

[root@localhost  xcache-3.2.0]# cp xcache.ini /etc/php.d

 

如果是xcache3.0以前的版本需要把xcache.so的路径加入到php.ini配置文件中格式为:

zend_extension =/ xcache.so路径/xcache.so  

例如: zend_extension = /usr/local/php5/lib/php/extensions/no-debug-zts-20100525/xcache.so

3.0 版本开始不再支持使用zend_extension 加载 xcache

 

查看phpinfo页面找到xcache的配置信息:

wKiom1YN-YGgFOs1AAHU3JEXvMU540.jpg

到此xcache安装成功!