第一步:
aptitude install python-software-properties
第二步:
add-apt-repository ppa:brianmercer/php
第三步:
aptitude -y update
第四步:
aptitude -y install php5-fpm
安装好后, 配置一下 /etc/php5/fpm/php5-fpm.conf
pm.max_children 设置大一点, 默认是10, 这是php5-fpm的进程数。
然后就是 service php5-fpm start 启动。
php5-fpm是可以平滑重启的,修改了php.ini文件后, 用service php5-fpm reload 就能重新加载配置文件。
I've been using the dotdeb.org pacakges for my ubuntu 9.10 servers and they've been running well, except for some necessary patches to contrib modules for php 5.3.
Now ubuntu 10.04 lucid is out and has php 5.3.2 in it. While php5-fpm won't be included in an official release until at least 5.4, it has become a part of official php development and is contained in the php version control.
In order to ease installation and upgrade, I've created a debian style .deb package for php5-fpm on launchpad at https://launchpad.net/~brianmercer/+archive/php/. Unlike the dotdeb package, this one is adapted from the official ubuntu lucid source package and so has identical patches and compile options to the ubuntu 10.04 cgi and cli sapis.
This package will only work on the Ubuntu 10.04 lucid release.
In order to install the package, you need to add the following to your /etc/apt/sources.list file:
deb http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
deb-src http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
and if you don't want to get the unsigned package warnings, add the launchpad key for the ppa with this command:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8D0DC64F
Then it's the usual:
sudo aptitude update
sudo aptitude install php5-fpm
You can then start (or stop or restart) php5-fpm with:
sudo service php5-fpm start
The new package works with all the usual ubuntu php extensions like php5-mysql, php5-gd, php-apc and php5-memcache.
The config file is now in an ini style format instead of the xml format and is located at /etc/php5/fpm/php5-fpm.conf. By default it listens on 127.0.0.1:9000 but I typically change the conf to use a unix socket at /var/run/php5-fpm.sock. If you use a socket, you should also uncomment the user and group and mode in the conf file. (I also change the mode to 0660)
I've set the package to start up 10 children by default. You can increase or decrease that amount depending on your memory constraints. There is a "dynamic" setting in the conf file with starting number, max number, max idle, etc. This "apache-like" system will start and stop children as needed depending on load. However, it is still experimental and it may be better to stick with the static setting for now.
I've also set up a second repository at https://launchpad.net/~brianmercer/+archive/fcgiwrap with fcgiwrap. nginx does not have the built in ability to act as a cgi gateway for perl scripts, etc, the way that apache and most other web servers do. In order to use things like awstats.pl or nagios you need to proxy those requests to a backend. I previously ran thttpd and let nginx proxy *.pl and *.cgi requests to thttpd. (boa also worked). However, Grzegorz Nosek has written a small wrapper script in C to handle these requests which works well. http://nginx.localdomain.pl/wiki/FcgiWrap
I've gone ahead and made a debian package from his code and put it up at https://launchpad.net/~brianmercer/+archive/fcgiwrap and it can be installed the same way as php5-fpm by adding the following to /etc/apt/sources.list:
deb http://ppa.launchpad.net/brianmercer/fcgiwrap/ubuntu lucid main
deb-src http://ppa.launchpad.net/brianmercer/fcgiwrap/ubuntu lucid main
and
sudo aptitude update
sudo aptitude install fcgiwrap
My fcgiwrap package relies on spawn-fcgi but it has its own start/stop init script so you can use
service fcgiwrap start
It runs on 127.0.0.1:8000 by default but you can change the config file at /etc/default/fcgiwrap to also make it run as a unix socket at /var/run/fcgiwrap.sock.
Then you can put a location in your nginx config such as
location ~ (.cgi|.pl)$ {
# auth_basic "Restricted";
# auth_basic_user_file /var/private/htpasswd; # somewhere outside the http root
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:8000;
# fastcgi_pass unix:/var/run/fcgiwrap.sock; #if using unix socket instead of TCP
}
You should be aware of the serious security implications of that section. You don't want someone uploading a nasty perl script to your server and running it. A section like that should only exist behind a protected subdomain or at least should have password authentication added to it. If you're only using awstats then instead of using the location above you can use one like this:
location = /awstats.pl {
gzip off;
root /usr/lib/cgi-bin;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/awstats.pl;
fastcgi_pass 127.0.0.1:8000;
# fastcgi_pass unix:/var/run/fcgiwrap.sock;
}
location ~ ^/awstats-icon/(.*)$ {
alias /usr/share/awstats/icon/$1;
}
I hope these packages are useful and that they ease one of the complications of installing and using nginx.
Login or register to post comments
Comments
php5-fpm for Debian Lenny
Posted by omega8cc on May 23, 2010 at 4:41pm
Thanks for this how-to, Brian.
Since dotdeb.org has also php5-fpm for Debian Lenny and it works great, however still there are too many issues with PHP 5.3 in many contrib Drupal modules, so we are using it only for testing on our dev servers.
Simple how-to for all Debian fans:
sudo echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
sudo echo "deb-src http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get -y install php5-cli php5-common php5-suhosin php5-memcache php5-imagick php5-apc php5-dev
sudo apt-get -y install php5-curl php5-gd php5-imap php5-mcrypt php5-mysql php5-xsl php-pear
sudo apt-get -y install php5-fpm php5-cgi
invoke-rc.d php5-fpm start
See also: http://www.dotdeb.org/instructions/
~Grace
Login or register to post comments
I was using the dotdeb repos
Posted by brianmercer on May 23, 2010 at 5:26pm
I was using the dotdeb repos on ubuntu 9.10 for a while and they worked perfectly, and it's good of Guillaume Plessis to make those packages available. I also owe him thanks because I used his scripts to make my Ubuntu packages.
To use the dotdeb packages on Ubuntu instead of Debian you have to manually install two packages:
http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4...
http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu...
and one more if you use php5-mycrypt:
http://mirrors.kernel.org/ubuntu/pool/main/libt/libtool/libltdl3_1.5.26-...
I repackaged php5-fpm for Ubuntu on a launchpad ppa for 3 reasons:
First, I wanted to avoid the extra work for Ubuntu users of manually adding the packages above.
Second, I wanted to have php built with the identical compile options and patches as Ubuntu's current 10.04 php. Guillaume uses the php bundled gd (which is not a bad idea) and also the mysqlnd native driver, whereas Debian and Ubuntu use the official gd and the libmysql driver. There are also several code patches that Ubuntu applies that Guillaume doesn't. I wanted my php-fpm to match the decisions of the Ubuntu packagers.
Ubuntu has updated php5 twice this month to incremental releases php5-5.3.2-1ubuntu4.1 and php5-5.3.2-1ubuntu4.2 and I wanted to be able to track those patches immediately and add them to my php-fpm build.
Third, I wanted the latest version of php-fpm. Guillaume is using the fpm patch from last year that has proved very stable but didn't receive full attention from the fpm originator Andrei Nigmatulin. By the time version 5.3 and 5.2.13 were released, Andrei had already stopped updating his great work. As far as I know, there's no dev maintaining the 5.2.x branch.
Luckily, since then, fpm has been merged into the official php.net development trunk and is now actively maintained by Antony Dovgal and Jerome Loyet, two php.net devs. Jerome has put in some good work bringing in the apache-like dynamic child spawning, and Antony has been committing patches based on reported problems. They've also committed a conversion from an xml conf file to the ini format.
I'm using the very latest svn development version of fpm to get the benefits of the new code and watchful eye of php.net devs.
I completely agree with you about the state of Drupal contrib modules (and core) with respect to 5.3 compatibility. I'm up to nine patches that I have to apply now to core and to contrib modules that I use.