今天写这篇文章是因为网上绝大多数都是用PHP5.2来搭建的,还要打补丁,PHP5.3都出来很久了,所以想试试集成的PHP-FPM
系统平台及相关软件
RHEL5.7
libmcrypt-2.5.8.tar.gz
mcrypt-2.6.8.tar.gz
mhash-0.9.9.9.tar.bz2
bz2
zlib
jpeg
png
gd
libxml2
libxpm
freetype
ttf
第一步:
执行如下操作,系统这些都是基础的库文件,装上这些后在以后的安装配置中就不会有麻烦了
yum -y install gcc gcc-c++ compat-gcc-34-g77 flex bison autoconf automake libevent libevent-devel libgcrypt libgcrypt-devel libgpg-error-devel libmcrypt libmcrypt-devel libjpeg libjpeg-devel libpng libpng-devel libidn libidn-devel libtool libtool-ltdl-devel libtiff libtiff-devel libX11 libX11-devel libXpm libXpm-devel libxml2 libxml2-devel libxslt libxslt-devel freetype freetype-devel gd gd-devel gettext gettext-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel mhash mhash-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers pcre-devel pam-devel zlib zlib-devel xorg-x11-proto-devel
第二步:
安装apache,我用的MPM是worker,这个是混合型多进程,多线程的模式,由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM.可能稳定性比prefork模式要差些。仅作安装配置测试。实际生产环境还需谨慎定夺!
1.安装apr
./configure
make && make install
2.安装apr-util
./configure
make && make install
3.安装apache
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache --enable-ssl --enable-static-ab --enable-http --enable-speling=shared --enable-rewrite=shared --enable-so --with-apr=/usr/local/apr --with-pcre --with-z --with-mpm=worker --enable-info --enable-deflate=shared --enable-expires=shared --enable-static-support --enable-static-rotatelogs --enable-static-logresolve --enable-authz-dbm=shared --enable-static-htdbm --enable-static-checkgid --with-apr-util=/usr/local/apr/bin/apu-1-config --enable-vhost-alias --with-ssl
make && make install
安装完成
将apache设置为linux systemV 服务
cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd 在第二行添加如下:
#chkconfig:345 85 15
#description: Start and stops the Apache HTTP Server.
保存退出
chmod +x /etc/init.d/httpd
chkconfig --add httpd
chkconfig --level 345 httpd on
完成后即可通过 service httpd start/restart/stop来启动apache了
安装mod_fastcgi
cp Makefile.AP2 makeinstall
vi makeinstall ,将top_dir = /usr/local/apach2 (我的apache是安装在/usr/local/apache2 路径中)
make
make install
完成后,httpd.conf里面会有如下:
LoadModule fastcgi_module modules/mod_fastcgi.so
第二步:
安装mysql,我用的是5.5版本的
要先把cmake安装好
建账号
groupadd mysql
useradd -g mysql -s /sbin/nologin -d /dev/null mysql
进入源码包编译
编译参数如下:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DINSTALL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysqld.socket \
-DMYSQL_USER=mysql \
-DWITH_READLINE=ON \
make && make install
数据库初始化过程略
完成源代码的安装后,在将mysql设为systemV服务,进入mysql源码包,执行如下:
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on
完成后即可通过service mysqld start/restart/stop来启动和关闭mysql了
第四步:
安装php
先建立一个php-fpm的运行帐号
groupadd fpm
useradd -g fpm -s /sbin/nologin -d /dev/null fpm
安装一些基本的库
编译安装 Libiconv
tar -zxf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
make && make install
编译安装 Mhash
tar -jxf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9/
./configure --prefix=/usr/local
make && make install | |
编译安装 LibMcrypt
tar -zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure --prefix=/usr/local
make && make install
编译安装 Mcrypt
tar -zxf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
./configure --prefix=/usr/local
make && make install
| |
在添加一个库的路径搜索,在/etc/ld.so.conf里面添加,添加如下就OK
/usr/local/lib
执行ldconfig 更新一下即可
开始编译PHP,编译参数如下:
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql/ --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/usr/local/mysql/tmp/mysqld.socket --enable-ftp --with-zlib-dir --with-bz2 --enable-zip --with-iconv-dir=/usr/local/ --with-freetype-dir --with-jpeg-dir --with-png-dir --enable-calendar --with-gd --enable-gd-native-ttf --with-gettext --enable-bcmath --enable-exif --enable-intl --with-mhash --with-mcrypt=/usr/local/ --enable-fpm --enable-xml --with-xsl --with-libxml-dir=/usr/ --disable-rpath --enable-shmop --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-zend-multibyte --enable-mbregex --enable-mbstring --with-pcre-regex --with-openssl --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap --enable-pdo --enable-phar --with-xmlrpc --with-fpm-user=fpm --with-fpm-group=fpm --enable-wddx --with-curlwrappers --enable-ftp --with-xpm-dir --disable-cli
注意:很多人在这个时候会 添加 --with-apxs2=/usr/local/apache2/bin/apxs ,据说这样添加后,产生的PHP 是 cli版本的,也就是说apache在处理用户对php页面请求的时候通过libphp5.so 这个模块来将页面的解析交给php引擎处理。
我现在的目的是想让php引擎有个独立的监听程序,来监听apache传递过来的php页面解析请求,因此用到php-fpm 来监听。这就是所谓的fastcgi,可能更快些,不知道理解的是不是正确的。反正我是这样的理解的。
继续....
make ZEND_EXTRA_LIBS="-liconv" (如果make的时候不加后面的定会报错)
make install
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
将php-fpm设为systemV服务
cp sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --level 345 php-fpm on
完成后即可通过service php-fpm start/restar/stop来启动和关闭php-fpm了
现在环境搭建起来了,开始配置和测试
1.apache的配置:
我只设置了apache 与外部php-fpm 通信的设置
127.0.0.1:9000 是php-fpm 运行监听的地址和端口,apache要通过php-fpm将php页面的请求转交给php处理。
apache的mpm 用的是worker,设置如下:
我在htdocs目录里面放了一个test.php的页面
php-fpm 是fastcgi 进程管理器,要对他进行一些配置,配置文件 php-fpm.conf
配置项太多了,不好截图,就不发了
最后启动apche ,mysql ,查看下:
可以看到 php-fpm 9000端口,mysql 3306 ,apache 80 都已经正常启动了
在看看系统内存情况,用的2G的内存
剩下1G内存,启动了三个apache 进程
测下php是否解析正常,访问下test.php文件
解析正常,
接下来测试,在另一台linux上,用apache的专用测试工具ab,测试一下
并发500,请求2000
然后到LAMP那台上看看
看80 端口
看9000 端口
看内存
内存在持续降低
看看其他状态图
好了,到此为止!!!
阅读(5123) | 评论(0) | 转发(1) |