首先去 http://php-fpm.org/downloads/ 下载 php-5.2.10-fpm-0.5.13.diff.gz ,然后下载php的源代码 php-5.2.10.tar.bz2
然后运行命令:
tar jxf php-5.2.10.tar.bz2
cd php-5.2.10
gunzip -c ../php-5.2.10-fpm-0.5.13.diff.gz |patch -p1
apt-get install build-essential libxml2-dev libmcrypt-dev libssl-dev libldap2-dev libmhash-dev libmysqlclient15-dev libcurl4-openssl-dev libpng12-dev libjpeg-dev libsasl2-dev
./configure --prefix=/opt/php --with-iconv --with-zlib --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql --with-mysqli --enable-sqlite-utf8 --with-pdo-mysql --enable-ftp --with-jpeg-dir --with-freetype-dir --with-png-dir
make
make install
cp php.ini-dist /opt/php/lib/php.ini
ln -s /opt/php/sbin/php-fpm /etc/init.d/php-fpm
update-rc.d -f php-fpm defaults
/etc/init.d/php-fpm start
编译后的php安装在/opt/php下面,php的配置文件是/opt/php/lib/php.ini
然后运行 /etc/init.d/php-fpm
start 就可以启动php的fastcgi进程了,这些php fastcgi进程应该可以正常工作了。
优化php-fpm
编辑php-fpm的配置文件/opt/php/etc/php-fpm.conf,
- 去掉display_errors参数的注释,修改参数值为1
- 去掉sendmail_path参数的注释
- 去掉user,group参数的注释
- 修改max_children参数的值为50
php-fpm和spawn-fcgi一样,是一个php的fastcgi进程管理器。 spawn-fcgi是个独立的程序,而php-fpm是和php集成在一起的。一般的Linux都不带php-fpm,本文介绍在debian 5 VPS下怎样编译php-fpm。
编译环境准备
首先查看debian的apt软件库的配置,确保/etc/apt/sources.list这个文件里面至少有:
deb http://ftp.us.debian.org/debian lenny main
deb http://security.debian.org/ lenny/updates main
然后同步一下:
apt-get update
安装编译所需要的工具:
apt-get install build-essential vim
安装编译所需要的库:
apt-get install libxml2-dev libmcrypt-dev libssl-dev libldap2-dev libmhash-dev libmysqlclient15-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libsasl2-dev
编译
下载php 5.2.10和相应的php-fpm补丁,然后开始编译:
tar zxf php-5.2.10.tar.gz
cd php-5.2.10
cat ../php-5.2.10-fpm-0.5.13.diff | patch -p1
./configure --prefix=/opt/php --with-iconv --with-zlib --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql --with-mysqli --enable-sqlite-utf8 --with-pdo-mysql --enable-ftp --with-jpeg-dir --with-freetype-dir --with-png-dir
make install
cp php.ini-dist /opt/php/lib/php.ini
ln -s /opt/php/sbin/php-fpm /etc/init.d/php-fpm
update-rc.d -f php-fpm defaults
编译后的php安装在/opt/php下面,php的配置文件是/opt/php/lib/php.ini
和其他Linux下不同,在Debian下这时候启动php-fpm会失败,原因是在Debian下php-fpm的配置文件中必须指定运行时的用户才行。
优化php-fpm
编辑php-fpm的配置文件/opt/php/etc/php-fpm.conf,
- 去掉display_errors参数的注释,修改参数值为1
- 去掉sendmail_path参数的注释
- 去掉user,group参数的注释
- 修改max_children参数的值为10
安装php加速器eAccelerator
tar jxf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
apt-get install -y autoconf
/opt/php/bin/phpize
./configure --enable-eaccelerator --with-php-config=/opt/php/bin/php-config
make install
mkdir /opt/php/eaccelerator_cache
然后vim /opt/php/lib/php.ini,在文件末尾加入:
[eaccelerator]
zend_extension="/opt/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/opt/php/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
然后重启php-fpm,在phpinfo()页面中应该能看到eaccelerator的信息了。
打包
我们把/opt/php目录打包为php-fpm-5.2.10-amd64.tar.gz,放到http://dl.rashost.com/下面,供客户下载使用。
php-fpm和spawn-fcgi一样,是一个php的fastcgi进程管理器。spawn-fcgi是个独立的程序,而php-fpm是和php集成在一起的。一般的Linux都不带php-fpm,本文介绍在ubuntu 9.04 VPS下怎样编译php-fpm。
编译环境准备
首先查看ubuntu的apt软件库的配置,确保/etc/apt/sources.list这个文件里面至少有:
deb http://archive.ubuntu.com/ubuntu jaunty main universe multiverse
deb http://security.ubuntu.com/ubuntu jaunty-security main universe multiverse
然后同步一下:
apt-get update
安装编译工具:
apt-get install build-essential vim
安装编译所需要的库:
apt-get install libxml2-dev libmcrypt-dev libssl-dev libldap2-dev libmhash-dev libmysqlclient-dev libcurl4-openssl-dev libpng-dev libjpeg-dev
libfreetype6-dev libsasl2-dev
编译
下载php 5.2.10和相应的php-fpm补丁,然后开始编译:
tar zxf php-5.2.10.tar.gz
cd php-5.2.10
cat ../php-5.2.10-fpm-0.5.13.diff | patch -p1
./configure --prefix=/opt/php --with-iconv --with-zlib --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql --with-mysqli --enable-sqlite-utf8 --with-pdo-mysql --enable-ftp
--with-jpeg-dir
--with-freetype-dir
--with-png-dir
make
make install
cp php.ini-dist /opt/php/lib/php.ini
ln -s /opt/php/sbin/php-fpm /etc/init.d/php-fpm
update-rc.d -f php-fpm defaults
/etc/init.d/php-fpm start
编译后的php安装在/opt/php下面,php的配置文件是/opt/php/lib/php.ini
然后运行 /etc/init.d/php-fpm
start 就可以启动php的fastcgi进程了,这些php fastcgi进程应该可以正常工作了。
优化php-fpm
编辑php-fpm的配置文件/opt/php/etc/php-fpm.conf,
- 去掉display_errors参数的注释,修改参数值为1
- 去掉sendmail_path参数的注释
- 去掉user,group参数的注释
- 修改max_children参数的值为10
安装php加速器eAccelerator
tar jxf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
apt-get install -y autoconf
/opt/php/bin/phpize
./configure --enable-eaccelerator --with-php-config=/opt/php/bin/php-config
make
make install
mkdir /opt/php/eaccelerator_cache
然后vim /opt/php/lib/php.ini,在文件末尾加入:
[eaccelerator]
zend_extension="/opt/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/opt/php/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
然后重启php-fpm,在phpinfo()页面中应该能看到eaccelerator的信息了。
打包
我们把/opt/php目录打包为php-fpm-5.2.10-amd64.tar.gz,放到 http://dl.rashost.com 下面,供客户下载使用。
本文记录了在CentOS 5 VPS上编译打了php-fpm补丁的php 5.2.10的过程。
安装库文件
安装编译php需要的一些库文件
yum install libxml2-devel libmcrypt-devel openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel openldap-devel libmhash-devel mysql-devel libtool-ltdl-devel
如果是64位的系统,然后需要调整一下mysql的库文件,否则在64位系统下老去找32位的mysql库:
cd /usr/lib
mv mysql mysql.i386
ln -sf /usr/lib64/mysql mysql
编译php-fpm
给php打php-fpm补丁:
cd php-5.2.10
patch -p1 < ../php-5.2.10-fpm-0.5.13.diff
开始编译php,注意:如果是64位的系统,建议去掉 –with-ldap-sasl,否则有可能编译不过
./configure --prefix=/opt/php --with-iconv --with-zlib --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql --with-mysqli --enable-sqlite-utf8 --with-pdo-mysql --enable-ftp --with-jpeg-dir
--with-freetype-dir
--with-png-dir
make
当编译到php-5.2.10/ext/date/lib/parse_date.c的时候,挂了,好像不往下走了,这时候ctrl-c中断编译过程,把当前正在执行的语句复制粘贴到命令行单独执行,发现还是好像死循环一样不结束,再次ctrl-c中断,删除掉这个命令中的-O2参数,继续执行,这样这个命令很快就结束了,然后继续运行:
make
make install
cp php.ini-dist /opt/php/lib/php.ini
然后运行 /opt/php/sbin/php-fpm start 就可以启动php的fastcgi进程了,这些php fastcgi进程应该可以正常工作了。
优化php-fpm
编辑php-fpm的配置文件/opt/php/etc/php-fpm.conf,
- 去掉display_errors参数的注释,修改参数值为1
- 去掉sendmail_path参数的注释
- 去掉user,group参数的注释,并设定值为nobody
- 修改max_children参数的值为10
安装php加速器eAccelerator
tar jxf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
yum install -y autoconf
/opt/php/bin/phpize
./configure --enable-eaccelerator --with-php-config=/opt/php/bin/php-config
make
make install
mkdir /opt/php/eaccelerator_cache
然后vim /opt/php/lib/php.ini,在文件末尾加入:
[eaccelerator]
zend_extension="/opt/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/opt/php/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
然后重启php-fpm,在phpinfo()页面中应该能看到eaccelerator的信息了。
打包
我们把/opt/php目录打包放到 http://dl.rashost.com/ 下面,供客户下载使用。
最后,安装好之后,记着在/etc/rc.local文件中加入自动启动php-fpm的语句:
/opt/php/sbin/php-fpm start
在VPS上安装配置php应用如果碰到错误,而不显示错误信息的时候,经常是一头雾水,不知道是为什么错了,错在哪里了。
这时候如果打开php的错误显示功能,则能够把发生的错误信息显示出来,方便我们找原因。修改php.ini配置文件,打开错误显示功能,要修改的部分是:
error_reporting = E_ALL | E_NOTICE
display_errors = On
log_errors = On
error_log = /var/log/httpd/php.log
需要注意的是php日志文件/var/log/httpd/php.log的权限,要设置成777,至少让apache的执行用户能写。
配置好之后,重启apache即可
ubuntu自带的php-gd库是基于标准gd库编译的,不是用的php的gd库,所以不支持此函数。
解决方法:
首选用phpinfo函数检查下GD Version -> 2.0 higher
1.先下载php5-gd的原始码
#apt-get source php5-gd
下载好了之后会自动解压缩,进入目录后修改./debian/rules,找到–with-gd=shared,/usr,将之后的”,/usr”删掉,变成–with-gd=shared
2.将php5打包
#dpkg-buildpackage
在这个过程中,如果出现需要安装一些(!?)套件的信息,将他们通过-apt-get install 安装好后,便可以顺利执行,打包的过程,这个时候可以做别的事情,因为很久
3.打包后回到上一层目录,出现许多打包完成的deb档案,将php5-gd解开到暂存的文件夹
#dpkg-deb -x php5-gd*.deb test
4.将暂存文件夹内的gd.so取代原有系统的gd.so(应该存在/usr/lib/php5/20060613 lfs/gd.so)
5.重新启动apache2
再用phpinfo函数确认下GD Version -> bundled(2.034 compatible)
经常有客户在96M/128M内存的VPS上安装LAMP应用,碰到内存不足,然后系统把mysql进程杀死的情况。这种现象的根本原因是内存不足了。而大部分内存是被apache占用了的,VPS上的apache又是系统的默认配置,所以比较占内存。
关于优化apache的内存,轻参考如下文章:
- http://fwolfcn.blogspot.com/2008/03/mediatemple.html
- http://www.im286.com/thread-2353918-1-1.html
另外对mysql,可以修改my.cnf,启用skip-innodb,因为我们用myisam就足够了!
近期评论