Написано по мотивам вот этой статьи, в отличии от которой все здесь описанное реально работает. Читая этот (по основному адресу) Вы можете в этом убедиться лично.

Ставится это все на VDS под управлением VDSmanager, заказать такой можно у FirstVDS.Ru, ISPserver.com или MiniVDS.com, используется дисковый шаблон «ОС FreeBSD 6.x и самое современное ПО», именуемый в VDSmanager как Soft2006.

В качестве web-сервера был выбран лайти (да-да, именно так это lighttpd произносится). Почему не nginx? От него я отказался после того как стал устанавливать себе rTorrent и мне вдруг понадобился SCGI, которого у nginx не оказалось, кроме того хотелось отказаться от второго (пусть и маленького) http-сервера mini_httpd, используемого для запуска скрипта на perl, т.к. CGI у nginx тоже нет. Собственно лирика закончена, переходим к установке.

Лайти ставим из портов

# cd /usr/ports/www/lighttpd
# make install clean

в опциях нужно убрать IPv6, на VDS его все равно нет, остальное по желанию, я себе включил SSL, BZIP2, MEMCACHE и WebDAV.

Для установки php-fpm берем фрибсдшный порт для версии php-5.2.6 отсюда. В отличии от способа описанного моим коллегой тут, при сборке этого порта rc-скрипт складывается в нужное место (/usr/local/etc/rc.d) и отсутствует описанный мной глюк. Устанавливаем

# tar -xvf php5_fpm_526.tar.gz -C /usr/ports/lang/
# cd /usr/ports/lang/php5-fpm
# make

На этом этапе у нас есть два пути:

  1. Воспользоваться советом моего коллеги и не перезаписывать темплейтные файлы, а просто скопировать бинарник, стартовый скрипт и конфиг на свои места
  2. Установить поверх шаблона, сказав make install

Я выбрал второе, т.к. php у меня уже давно не из шаблона :) .

Предположим что нам нужно хостить двух юзеров (user1 и user2) с их сайтами, которым необходим php. Для начала создадим всех необходимых пользователей и сайты через панель управления ISPmanager. Зачем? Да очень просто, чтобы в случае чего можно было вернуть все как было отказавшись от lighttpd+php-fpm.

Выполняем настройку php-fpm

# cd /usr/local/etc
# cp php-fpm.conf.dist php-fpm.conf
# vi php-fpm.conf

Нужно создать два пула обработчиков — по одному для каждого юзера, вглядеть это будет примерно так

<section name="pool">
<value name="name">user1</value>
<value name="listen_address">/home/user1/data/sockets/php.sock</value>
<value name="listen_options">
<value name="backlog">-1</value>
<value name="owner">user1</value>
<value name="group">www</value>
<value name="mode">0660</value>
</value>
<value name="php_defines">
<value name="open_basedir">/home/user1/data:.</value>
<value name="upload_tmp_dir">/home/user1/data/tmp</value>
<value name="session.save_path">/home/user1/data/tmp</value>
<value name="error_log">/home/user1/data/logs/user1.ru.error.log</value>
</value>
<value name="user">user1</value>
<value name="group">user1</value>
<value name="pm">
<value name="style">static</value>
<value name="max_children">1</value>
<value name="apache_like">
<value name="StartServers">20</value>
<value name="MinSpareServers">5</value>
<value name="MaxSpareServers">35</value>
</value>
</value>
<value name="request_execution_timeout">31s</value>
<value name="rlimit_files">1024</value>
<value name="rlimit_core">unlimited</value>
<value name="chroot"></value>
<value name="chdir"></value>
<value name="catch_workers_output">yes</value>
<value name="max_requests">500</value>
<value name="allowed_clients">localhost</value>
<value name="environment">
<value name="HOSTNAME">$HOSTNAME</value>
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
<value name="TMP">/tmp</value>
<value name="TMPDIR">/tmp</value>
<value name="TEMP">/tmp</value>
<value name="OSTYPE">$OSTYPE</value>
<value name="MACHTYPE">$MACHTYPE</value>
<value name="MALLOC_CHECK_">2</value>
</value>
</section>

Аналогично для второго юзера. Не забываем создать каждому пользователю директорию под сокет через который будем подключаться

# mkdir /home/user1/data/sockets
# chown user1:www /home/user1/data/sockets
# chmod 770 /home/user1/data/sockets

Теперь настроим лайти

# cp lighttpd.conf.sample lighttpd.conf
# vi lighttpd.conf

Нужно описать все виртуальные хосты пользователей примерно вот так

$HTTP["host"] =~ «(^|\.)user1\.ru$» {
server.document-root = «/home/user1/data/www/user1.ru»
server.errorlog = «/home/user1/data/logs/user1.error.log»

accesslog.filename = «/home/user1/data/logs/user1.ru.access.log»
# Следующая строчка нужна для работы пермалинков в
server.error-handler-404 = «/index.php?error=404»
fastcgi.server = ( «.php» =>
(( «socket» => «/home/user1/data/sockets/php.sock»,
«bin-copy-environment» => (
«HOSTNAME», «PATH», «TMP», «TMPDIR», «TEMP», «OSTYPE», «MACHTYPE», «MALLOC_CHECK_» ),
«broken-scriptfilename» => «enable»
))
)
}

Если пользователю надо CGI — тоже не проблема

$HTTP["url"] =~ «^/cgi-bin» {
cgi.assign = ( «.pl» => "",
«.cgi» => ««)
}

Аналогично для всех остальных. Все, можно пробовать.

# apachectl stop
# /usr/local/etc/rc.d/php-fpm forcestart
# /usr/local/etc/rc.d/lighttpd forcestart

Если работает — мои поздравления и последние штрихи

# vi /etc/rc.conf
apache22_enable=»NO»
lighttpd_enable="YES"
php_fpm_enable="YES"

Если нет — проверяем что все сделано правильно или добро пожаловать сюда и сюда. Или если уже совсем ничего не помогает

# vi /etc/rc.conf
apache22_enable="YES"

Напоследок об оптимизаторе eAccellerator, который везде советуют. Скажу сразу, я никакие оптимизаторы не использую не те у меня нагрузки, но если opcode cacher Вам все-таки нужен берите xcache (в потрах /usr/ports/www/xcache), его и eAccellerator я для теста включал у себя. Так вот при использовании xcache php в корки не валится, а с конкурентом очень даже. Других отличий не заметил. Вот теперь точно все.

Комментарии и конструктивная критика приветсвуются.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Связанные записи