RSS
 

Ubuntu. Рабочее окружение Nginx+PHP5.3+FPM+MySQL

08 Апр

Вообще эта инструкция применительна и к FreeBSD, просто вместо «apt-get install» используйте установку из портов.

Добавляем пользователя

Для начала создадим пользователя и группу www, от которой будет работать Nginx и PHP.addgroup www

adduser —shell /usr/sbin/nologin —no-create-home —ingroup www —disabled-password —disabled-login www

 

Ставим Nginx

Как я и говорил прибегаем к наипростейшему пути:

apt-get install nginx

Теперь отредактируем /etc/nginx/nginx.conf и добавим upstream для php-fpm:

user www www;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
worker_connections  1024;
}

http {
include     /etc/nginx/mime.types;
access_log  /var/log/nginx/access.log;

sendfile        on;
keepalive_timeout  65;
tcp_nodelay        on;

upstream php-fpm {
#server 127.0.0.1:9000;
server unix:/tmp/php-fpm.sock;
}

include /etc/nginx/conf.d/*.conf;
}

Теперь приступим к установке PHP.

Ставим PHP 5.3 + PHP-FPM

Для того чтобы собрать php 5.3 + php-fpm нам потребуется слить сорцы php-fpm 5.3, но для начала убедитесь что у вас версия autoconf — 2.13, говорят что с другой версией будут проблемы. Пробовал собирать с более высокой версией (autoconf 2.59, вроде) — правда, проблемы есть. Поэтому ставим именно 2.13:

apt-get install autoconf2.13

Теперь надо поставить bison:

apt-get install bison

Далее libevent из сорцов. А именно версию 1.4.13 (установленная более ранняя версия не подходила).
Во время установки libevent была проблема — не хватало libtoolize… Сначала поставим libtool:

apt-get install libtool

А теперь libevent:

wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
tar -xzvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./autogen.sh
./configure
make install

Все версии libevent тут.

И напоследок соберем libxml:

wget ftp://xmlsoft.org/libxml2/libxml2-2.7.6.tar.gz
tar -xzvf libxml2-2.7.6.tar.gz
cd libxml2-2.7.6
./configure
make && make install

Вам может понадобится mysql_config, например для Sphinx или модуля MySQL для PHP, то поставьте libmysqld-dev:

apt-get install libmysqld-dev

А теперь наконец сольем php-fpm и запустим скрипт сборщика:

svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_3_FPM php_5_3_fpm
cd php_5_3_fpm
./buildconf

Теперь у нас появился ./configure и мы можем указать с какими опциями собрать PHP:

./configure —prefix=/usr/local —disable-short-tags —enable-fpm —with-layout=GNU —without-pear \
—enable-mbstring —with-mysql=/usr/bin/mysql_config —with-mysqli=mysqlnd
make && make install

некоторые опции по пыху можно вычитать тут, а по поводу расширений типа mysqli/mbstring и прочих можно почитать в разделе «Installation» официальной документации, например mbstring или mysqli.

Многие опции включены по умолчанию, вы можете это поменять с помощью —disable-all.

Так как я ставил в кастомный каталог, то делаю ссылку на мой php для удобства:

ln -s /usr/local/bin/php /usr/bin/php

Нам понадобится скрипт управления php-fpm, скопируем его из сорцов:

cp php_5_3_fpm/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

У меня стоял до этого PHP 5.2.10 (ставил из пакетов), поэтому у меня остался php.ini и я его скопировал:

cp /etc/php5/apache2/php.ini /usr/local/etc/php.ini

Если вы не знаете куда класть ваш php.ini, то зайдите в phpinfo и посмотрим пункт «Configuration File (php.ini) Path» и положите туда свой php.ini. В момент перезапуска PHP объявил некоторые опции как deprecated и я их закоментил просто-напросто. Если у вас нет файла php.ini, могу дать свой, в нем нет ничего особенного, это на случай отсутствия у вас этого файла.

Настройка PHP-FPM

Скопируем дефолтный конфиг:

cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

И доведем его немного до ума:

Address to accept fastcgi requests on.
Valid syntax is ‘ip.ad.re.ss:port’ or just ‘port’ or ‘/path/to/unix/socket’
<!—<value name=»listen_address»>127.0.0.1:9000</value>—>
<value name=»listen_address»>/tmp/php-fpm.sock</value>
….
<value name=»listen_options»>

Set listen(2) backlog
<value name=»backlog»>-1</value>

Set permissions for unix socket, if one used.
In Linux read/write permissions must be set in order to allow connections from web server.
Many BSD-derrived systems allow connections regardless of permissions.
<value name=»owner»>www</value>
<value name=»group»>www</value>
<value name=»mode»>0666</value>
</value>

<value name=»php_defines»>
<!— <value name=»sendmail_path»>/usr/sbin/sendmail -t -i</value> —>
<value name=»display_errors»>1</value>
<value name=»error_log»>/var/log/php-error.log</value>
<value name=»log_errors»>true</value>
</value>

Unix user of processes
<value name=»user»>www</value>

Unix group of processes
<value name=»group»>www</value>

Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
Makes sense only with AF_INET listening socket.
<value name=»allowed_clients»>127.0.0.1</value>

Вкратце что меняем:
1. Используем не tcp, а unix-сокет
2. Назначаем юзера и группу — www
3. Делаем вывод ошибок в стандартный поток и указываем файл лога ошибок

Это конфиг я уже приводил тут.

Проблемы с MySQLi

MySQLi ругался что не может открыть mysql-сокет по адресу «/tmp/mysql.sock», я отыскал путь до сокета в «/etc/my.cnf», скопировал его и поправил в «/usr/local/etc/php.ini» путь:

mysqli.default_socket = /var/run/mysqld/mysqld.sock

Запускаем наш сервер приложений

Добавим в Nginx виртуальный хост:

server {
listen 80;
server_name test.loc;
root /www/test/htdocs;

location / {
index index.php;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php-fpm;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

И запустим наш сервер:

service mysql start
service nginx start
service php-fpm start

Как всегда все просто! 🙂

 
 
  1. offshore banking

    26.04.2011 at 12:47 пп

    ….How to Install Nginx . wget ….Extract php-fpm…. tar -zxvf php-fpm-0.6 7E5.2.11.tar.gz. php-fpm-0.6-5.2.11 generate-fpm-patch….Extract .

     
  2. buy silver

    27.04.2011 at 4:06 дп

    ….How to Install Nginx . wget ….Extract php-fpm…. tar -zxvf php-fpm-0.6 7E5.2.11.tar.gz. php-fpm-0.6-5.2.11 generate-fpm-patch….Extract .