Pull to refresh

Установка nginx + php-fpm + memcache + eaccelerator на FreeBSD

Reading time 3 min
Views 49K
Зачем всё это? — спросите вы. Да просто захотелось поделиться с общественностью некоторым опытом, полученным в процессе оптимизации vds под нужды одного общеизвестного блого-социального движка, который на обычном хостинге чувствует себя, мягко скажем, некомфортно.

Началось всё с того, что я ушёл от firstvds, где уже ничто не спасёт от тормозов. Ушел на ганди.нет, взял одну шару (1 share), которую дали на месяц бесплатно. Кстати, акция эта (This summer, your server is free!) вроде еще не закончилась. ;) И начал на этой шаре проводить зверские эксперименты с установкой разного ПО. Тестировал результаты с помощью siege.

В итоге конфигурация из сабжа оказалась самая быстрая. Опытом её установки и настройки я и хотел бы с вами поделиться.

Перво-наперво обновляем дерево портов, если давно этого не делали. А если никогда не делали, то без этого дальше никуда:
# portsnap fetch update

NGINX


Устанавливаем последнюю стабильную версию nginx из портов:
# cd /usr/ports/www/nginx
# make install clean

Добавляем строку 'nginx_enable=«YES»' в файл '/etc/rc.conf'.

Основные настройки nginx по-умолчанию, чтобы знать где искать:
  • Конфиг: /usr/local/etc/nginx/nginx.conf
  • Порты http / https: 80 / 443
  • Логи ошибок: /var/log/nginx-error.log
  • Логи доступа: /var/log/nginx-access.log
  • Коневая папка: /usr/local/www/nginx/

PHP-FPM


Сначала ставим сам php:
# cd /usr/ports/lang/php5
# make install clean

Поддержка PHP в FreeBSD построена по модульному принципу, поэтому базовая установка обладает ограниченной функциональностью. Дополнительные расширения могут быть легко добавлены при помощи порта php5-extensions. Установим расширения, которые нам необходимы (например, mbstring, gd, mysql...):
# cd /usr/ports/lang/php5-extensions
# make install clean

Далее ставим патч php-fpm. В портах freebsd этот патч отсутствует, но это не беда. Предлагаю всё-таки поставить его через порт, а не собрать из исходников. Скачиваем порт для FreeBSD с сайта php-fpm.org и распаковываем в директорию портов по-умолчанию, откуда и устанавливаем:
# fetch php-fpm.anight.org/downloads/freebsd-port/php-5.2.10-fpm-0.5.13.tar.gz
# tar -xvf php-5.2.10-fpm-0.5.13.tar.gz -C /usr/ports/lang/
# cd /usr/ports/lang/php5-fpm
# make install clean

Добавляем строку 'php_fpm_enable=”YES"' в файл '/etc/rc.conf'.

Дружим NGINX и PHP


Заходим в кофиг нашего http-сервера. По-умолчанию он находится здесь '/usr/local/etc/nginx/nginx.conf'. Стираем всё. Для начала конфиг будет такой с минимумом настроек:
user www;
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

server {
listen 80;
server_name localhost;

charset utf-8;

location / {
root /usr/local/www/nginx;
index index.php index.html index.htm;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name;
include fastcgi_params;
}
}
}

Детальное описание настроек конфигурационного файла можно найти тут и тут, поэтому подробно останавливаться не буду. Давеча вышла статья на Хабре про настройку nginx — рекомендую к просмотру.

Далее редактируем конфигурацию php-fpm. По-дефолту он лежит тут '/usr/local/etc/php-fpm.conf'. Находим в файле строки:
<!–- <value name=”user”>nobody</value> -–>
<!–- <value name=”group”&#62nobody</value> -–>

И меняем их на:
<value name=”user”&#62www</value>
<value name=”group”&#62www</value>

Тем самым указав пользователя и группу, под которыми будет крутиться php. Подробное описание этих и других настроек php-fpm есть на официальном сайте на русском языке.

MEMCACHE


Ставим расширение memcache:
# cd /usr/ports/databases/pecl-memcache
# make install clean

После чего заходим в файл '/usr/local/etc/php/extensions.ini', где добавляем строчку:
extension=memcache.so

EACCELERATOR


Устанавливаем:
# cd /usr/ports/www/eaccelerator
# make install clean

Аналогично memcache заходим в файл '/usr/local/etc/php/extensions.ini' и добавляем строчку:
extension=eaccelerator.so

Создаем папку, где eAccelerator будет хранить свой кэш, задаем владельца www и устанавливаем права:
# mkdir /tmp/eaccelerator
# chown www /tmp/eaccelerator
# chmod 0700 /tmp/eaccelerator

РЕЗУЛЬТАТ


Запускаем php и nginx:
# /usr/local/etc/rc.d/php-fpm start
# /usr/local/etc/rc.d/nginx start

Пришло время проверить, получилось ли у нас что-нибудь. :) Создаем файл '/usr/local/www/nginx/info.php' c содержимым "<?php phpinfo(); ?>". И смотрим результат в браузере: httр://ваш-домен/info.рhр — должно быть как-то так:

image

За рамки данной заметки вышли: установка mysql (ставится так же просто, как и всё остальное из портов) и куча различных настроек, читай тюнинга, всего этого великолепия. Но это огромный материал, который регулярно освещается на Хабре в той или иной мере по частям. Есть ли смысл собирать тюнинг всей связки в одной статье — пока не знаю. Спасибо за внимание. Мой первый топик здесь за два года присутствия. :)
Tags:
Hubs:
+58
Comments 48
Comments Comments 48

Articles