LAMP环境的搭建(fastcgi

LAMP简介:

LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指PerlPython) 的第一个字母,一般用来建立web 服务器。

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案.

                                           

为什么要使用源码安装:

 

                  理由

                 1.更新的版本  httpd   mysql  php

                 2.提高性能

                      3.自定义参数                          

apache   php的结合方式:

                     1.模块      libphp5.so                                             2.cgi      通用网关接口

                     3.fastcgi   快速cgi

 

下面我们使用fastcgi的方式实现apachephp的结合:

Linux环境          centos 6.4  版本号2.6.32-431.el6.i686  

32位操作系统

软件包       httpd-2.4.9.tar.bz2

            php-5.5.8.tar.bz2

mysql-5.6.15.tar.gz

apr-1.4.6.tar.gz

apr-util-1.5.1.tar.gz

 

 

预编译环境      Development tools

                  Server Platform Development

                  Additional Development

                  cmake

MySQL的安装:

 

mysql5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要)

http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

我的mysql目录配置如下:

安装路径:/usr/local/mysql

数据库路径:/usr/local/mysql/data

源码包存放位置:/usr/local/src

[root@vbird ~]# yum --disablerepo=\* --enablerepo=c6-media groupinstall "Development tools"  "Server Platform Development" –y

[root@vbird ~]# yum --disablerepo=\* --enablerepo=c6-media  remove  mysql-libs  -y                    (※ 卸载掉预安装的mysqllib库文件)

[root@vbird ~]# yum --disablerepo=\* --enablerepo=c6-media  install cmake -y

[root@vbird ~]# tar -zxvf mysql-5.6.15.tar.gz  -C  /usr/local/src/

[root@vbird ~]# cd /usr/local/src/mysql-5.6.15/

[[email protected]]#cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DSYSCONFDIR=/etc \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1  \

-DWITH_MEMORY_STORAGE_ENGINE=1 \

-DMYSQL_TCP_PORT=3306  \

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \

-DENABLED_LOCAL_INFILE=1  \

-DWITH_PARTITION_STORAGE_ENGINE=1  \

-DEXTRA_CHARSETS=all  \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

[root@vbird mysql-5.6.15]# make && make install

 

来到MySQL的安装路径/usr/local/mysql下根据INSTALL-BINARY文件来完成MySQL的安装

 

[root@vbird ~]# cd /usr/local/mysql/

[root@vbird mysql]# vim INSTALL-BINARY

 

 

[root@vbird mysql]# groupadd mysql

[root@vbird mysql]# useradd -r -g mysql mysql

[root@vbird local]# cd mysql/

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

[root@vbird mysql]# ./scripts/mysql_install_db  --user=mysql

[root@vbird mysql]# chown -R root .

[root@vbird mysql]# chown -R mysql data

MySQL的后续处理

拷贝MySQL的配置文件到/etc目录下

[root@vbird mysql]# cp my.cnf  /etc

拷贝MySQL的控制脚本文件到/etc/init.d/目录下

[root@vbird mysql]# cd support-files/

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

编辑环境预配置文件添加MySQL的搜索路径

[root@vbird ~]# vim /etc/profile

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

[root@vbird ~]# . /etc/profile

   MySQL设置管理口令

[root@vbird ~]# mysqladmin -u root -p password '123'

   设置开机自动启动

[root@vbird ~]# chkconfig --add mysqld

[root@vbird ~]# chkconfig mysqld on 

   库文件的处理

[root@vbird ~]# vim /etc/ld.so.conf.d/mysql.conf

[root@vbird ~]# ldconfig                           #刷新缓存

[root@vbird ~]# ldconfig -pv |grep mysql           #查看是否加载

   头文件的处理

[root@vbird ~]# cd /usr/include/

[root@vbird include]# ln -s /usr/local/mysql/include/    mysql

 

MySQL手册的处理

[root@vbird ~]# vim /etc/man.config

MANPATH /usr/local/mysql/man

 

apache的安装:

 

  为了方便apache的运行,需要搭建apache的可移植性运行环境,就需要额外使用两个包apr  apr-util

解压缩包到/usr/local/src

[root@vbird ~]# tar -zxvf  apr-1.4.6.tar.gz  -C /usr/local/src/

[root@vbird ~]# tar -zxvf  apr-util-1.5.1.tar.gz  -C /usr/local/src/

[root@vbird ~]# tar -jxvf  httpd-2.4.9.tar.bz2  -C /usr/local/src/

安装apr

[root@vbird ~]# cd /usr/local/src/apr-1.4.6/

[root@vbird apr-1.4.6]# ./configure  --prefix=/usr/local/apr

[root@vbird apr-1.4.6]# make && make install

安装apr-utils

[root@vbird ~]# cd /usr/local/src/apr-util-1.5.1/

[root@vbird apr-util-1.5.1]# ./configure --prefix=/usr/local/apr-utils  --with-apr=/usr/local/apr/bin/apr-1-config

[root@vbird apr-util-1.5.1]# make && make install

安装httpd

[root@vbird ~]# cd /usr/local/src/httpd-2.4.9/

[root@vbird httpd-2.4.9]# yum --disablerepo=\* --enablerepo=c6-media install pcre-devel -y

 [root@vbird httpd-2.4.9]# ./configure  \

--prefix=/usr/local/apache \

--sysconfdir=/etc/httpd \

--enable-so \

--enable-ssl  \

--enable-rewrite  \

--with-apr=/usr/local/apr/bin/apr-1-config \

--with-apr-util=/usr/local/apr-utils/bin/apu-1-config \

--with-pcre  \

--with-z  \

--enable-mpms-shared=all \

--enable-proxy       \

--enable-proxy-fcgi

[root@vbird httpd-2.4.9]# make && make install

httpd的后续处理

编辑环境预配置文件添加httpd的搜索路径

[root@vbird ~]# vim /etc/profile

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

[root@vbird ~]# . /etc/profile

头文件的处理

[root@vbird ~]# cd /usr/include/

[root@vbird include]# ln -s /usr/local/apache/include/   apache

httpd手册的处理

[root@vbird ~]# vim /etc/man.config

MANPATH /usr/local/apache/man

编辑httpd的控制脚本

[root@vbird init.d]# vim /etc/init.d/httpd

#!/bin/bash

prog=/usr/local/apache/bin/httpd

lockfile=/var/lock/subsys/httpd

# description: the httpd server

# chkconfig:   2345 88 44

start() {

 if [ -e $lockfile ];then

    echo "the httpd server is started"

 else

    echo -n "the httpd server is starting"

    sleep 1

    $prog -k start && echo –e "\t ok" && touch $lockfile || echo "failed"

fi

}

stop() {

 if [ ! -e $lockfile ];then

    echo "the httpd server is stopped"

 else

    echo -n "the httpd server is stopping"

    sleep 1

    $prog -k stop && echo –e "\t ok" && rm -rf $lockfile || echo "failed"

 fi

}

case "$1"  in

start)

  start

;;

stop)

  stop

;;

restart)

  stop

  start

;;

*)

  echo "USAGE:start|stop|restart"

;;

esac

 

[root@vbird init.d]# chkconfig --add httpd

 

PHP的安装:

先安装php所需的devel

[root@vbird php-5.5.8]# yum --disablerepo=\* --enablerepo=c6-media install libxml2-devel libjpeg-turbo-devel libpng-devel  freetype-devel  -y

解压缩包到/usr/local/src

[root@vbird ~]# tar -jxvf php-5.5.8.tar.bz2  -C /usr/local/src/

[root@vbird ~]# cd /usr/local/src/php-5.5.8/

[root@vbird php-5.5.8]# ./configure    \

--prefix=/usr/local/php \

--enable-fpm   \

--enable-sockets  \

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

--with-pdo-mysql=/usr/local/mysql \

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

--enable-mbstring  \

--enable-xml  \

--with-png-dir \

--with-gd   \

--with-jpeg-dir  \

--with-zlib  \

--with-freetype-dir \

--with-config-file-path=/etc/php \

--with-config-file-scan-dir=/etc/php5.d

 

 

[root@vbird php-5.5.8]# make && make install

php的后续处理

创建php的配置文件目录php和额外扩展配置文件目录php5.d

[root@vbird ~]# mkdir -pv /etc/php /etc/php5.d

[root@vbird ~]# cd /usr/local/src/php-5.5.8/

[root@vbird php-5.5.8]# cp php.ini-production /etc/php/php.ini

来到/usr/local/php/etc目录下通过php-fmp的默认配置文件生成php-fmp的配置文件

[root@vbird etc]# cp php-fpm.conf.default php-fpm.conf

来到/usr/local/src/php-5.5.8/sapi/fpm目录下,拷贝php的控制脚本到/etc/init.d目录下并给它可执行权限

[root@vbird fpm]# cp init.d.php-fpm  /etc/init.d/php-fpm

[root@vbird fpm]# chmod a+x /etc/init.d/php-fpm

使用chkconfig管理

[root@vbird fpm]# chkconfig --add php-fpm

[root@vbird fpm]# chkconfig php-fpm  on

 

由于phpapache是用fcgi结合起来的,编辑apache的配置文件/etc/httpd/httpd.conf加载mod_proxy.somod_proxy_fcgi.so模块

httpd.conf  加入  AddType application/x-httpd-php .phpAddType application/x-httpd-php-source  .phps指明.php文件和.phps文件的处理类型

添加.php类型的默认首页

关闭正向代理功能,启动反向代理,把URI^/(.*\.php)$形式的请求反向代理到fcgi://127.0.0.1:9000/usr/local/apache/htdocs/$1

重新启动httpdmysqldhph-fpm服务

 

apache的默认站点目录下编辑一个默认.php类型的首页,做一下phphttpd的连接测试

[root@vbird ~]# cd /usr/local/apache/htdocs/

[root@vbird htdocs]# vim index.php

可以看到php的各种参数,连接成功

更改index.php的内容测试phpMySQL的连接情况

 

可以看到连接成功

 

搭建phpwind应用测试LAMP环境  这里我使用物理目录

[root@vbird ~]# unzip phpwind_v9.0_gbk.zip

[root@vbird ~]# cd phpwind_v9.0_gbk

[root@vbirdphpwind_v9.0_gbk]#mv upload  /usr/local/apache/htdocs/phpwind

使用浏览器访问http://192.168.2.100/phpwind可以看到出现了phpwind的安装向导

 

 

点击下一步可以看到环境检测没问题

来到phpwind目录下更改文件权限

[root@vbird htdocs]# cd phpwind/

[root@vbird phpwind]# chmod  -R o+w p_w_upload/ conf/  data/ html/ src/ themes/ windid/

创建数据

安装完成后成功进入站点

压力测试

Apache HTTP Web 服务器提供了一个叫做 ab 的工具,即 Apache HTTP 服务器性能检测(benchmark)工具的缩写。ab 用于为 PHP 页面自动化处理大量的请求

对静态页面index.html进行压力测试  可以看到只有每秒800左右

[root@vbird ~]# ab -n 10000 -c 1000  http://192.168.2.100/index.html

对动态页面index.php进行压力测试  可以看到只有每秒300左右

[root@vbird ~]# ab -n 1000 -c 500 http://192.168.2.100/index.php

 

与其他开发 Web 应用程序的脚本语言(包括 PerlPython  Ruby)相似,每次 HTTP 请求调用时,PHP 代码都会被解析和翻译为操作码(PHP 引擎直接执行的原语指令 —— 类似于汇编语言)再执行。在要求很低或可忽略的情况下,服务器看上去能立即执行这个复杂的解释过程。但是一旦处理的页面增加,解释 —— 从本质上说,重复工作 —— 就会对服务器造成很大的负担。在某些情况下,“编译” PHP 代码的时间会远远超过执行该代码所需的时间。节约 CPU 周期的另一种方法是减少运行 PHP 应用程序所需的重复工作。当然,没有必要每次都把同样的 PHP 代码翻译一遍。PHP 代码被翻译成操作码后,可以把它保存起来并重复使用 —— 直到原始代码被修改。确实,缓存 —— 用于保存和重用 PHP 操作码 —— 是几种 PHP 加速器内部的机制,包括开源 Alternative PHP Cache (APC)、支持 PHP  Turck MMCacheXCacheeAccelerator 和商业 Zend Platform。后三类加速器能够缓存和优化字节码,这为系统提供了更多的速度提升。

下面我们使用xcachephp进行缓存

安装xcache

[root@vbird ~]# tar -zxvf xcache-3.1.0.tar.gz -C /usr/local/src/

[root@vbird ~]# cd /usr/local/src/xcache-3.1.0/

[root@vbird xcache-3.1.0]# vim INSTALL

使用phpizexcache作为php的扩展

[root@vbird xcache-3.1.0]# /usr/local/php/bin/phpize

[root@vbird xcache-3.1.0]# ./configure  \

--enable-xcache \

--with-php-config=/usr/local/php/bin/php-config

[root@vbird xcache-3.1.0]# make && make install

来到下面目录下把xcache的扩展模块xcache.so模块拷到php的扩展配置文件/etc/php5.d/

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

[root@vbird no-debug-zts-20121212]# cp xcache.so /etc/php5.d/

拷贝xcache的配置模板xcache.iniphp的扩展配置文件/etc/php5.d

[root@vbird xcache-3.1.0]# cp xcache.ini /etc/php5.d/

 

Xcache安装完成后重新启动httpd服务

我们接着来作压力测试看看xcache的效果

对静态页面index.html进行压力测试  可以看到只有每秒1300左右

[root@vbird ~]# ab -n 10000 -c 1000  http://192.168.2.100/index.html

 

对动态页面index.php进行压力测试  可以看到只有每秒800左右

[root@vbird ~]# ab -n 1000 -c 500 http://192.168.2.100/index.php

 

 

可以看到xcache缓存对php站点的响应速度有了很大的提升!