nginx + FastCGI

На firstvds.ru среди готовых пакетов для выделенных серверов теперь есть FreeBSD 8. А поскольку несколько раз видел упоминание о лучшей производительности от версии к версии и к тому же начитался о связке nginx + php через fastcgi (+ опционально-желательно кеширующий в памяти инструмент типа eAccelerator), то понял, что пора это все попробовать настроить, благо инструкций в интернете валом.

Итак, больше для себя, а уж потом для остальных, соберу и сохраню здесь все свои шаги.

1) PHP через FastCGI.

На виду/слуху два способа: специальный патч для php php-fpm и утилита spawn-fcgi из дистрибутива lighttpd.

Оказалось, для spawn-fcgi есть свой порт на фрибсд, откуда оно легко устанавливается:

cd /usr/ports/www/spawn-fcgi/
make install clean

При этом надо обеспечить себе сборку php с cgi (собирается тоже из своего порта /usr/ports/lang/php5, и при сборке указать все опции CGI). Лучше сразу переустановить, а то я много времени потратил, гадая, почему php-cgi выдавал внутреннюю ошибку 500 при обработке index.php.

Итак , после установки spawn-fcgi, надо указать в системном конфиг-файле rc.conf, что программу надо запускать автоматом:

echo 'spawn_fcgi_enable="YES"'>> /etc/rc.conf

Запускаем:

/usr/local/etc/rc.d/spawn-fcgi start

При успешном запуске (в моем случае) увидел что-то типа:

Starting spawn_fcgi.
spawn-fcgi: child spawned successfully: PID: 81722

Примечание: если печатать spawn-fcgi start, находясь при этом в директории /usr/local/etc/rc.d/, ничего не выйдет.

Заключительный штрих: знающие люди говорят (и приводят доки при этом), что через сокет это все работает быстрее, чем через TCP (даже на одной машине), поэтому в spawn-fcgi комментируем строки про адрес и порт и добавляем путь к сокету:

#: ${spawn_fcgi_bindaddr="127.0.0.1"}
#: ${spawn_fcgi_bindport="9000"}
: ${spawn_fcgi_bindsocket="/tmp/fastcgi_sock"}

(С помощью команды netstat -Lan можно посмотреть, какие порты слушаются, и появился ли наш сокет.)

2) nginx

Nginx уже установлен и запущен, и даже настроен, но для ипользования с Апачем. Поэтому будем править имеющйся конфиг.

Если надо переустановить:

cd /usr/ports/www/nginx
make deinstall
make install clean

Конфиг написал на примерах следующих статей: раз - содержит готовые решения для известных CMS, а в моей правила rewrite как у вордпресса, два, три.

3) APC

Ну и напоследок - кеширующий механизм APC. Выбрал его, потому как где-то написали, что его на Facebook'е используют, причем не только как кешер исполняемого кода, но и хранилище произвольных пользовательских данных в памяти (типа memcached).

cd /usr/ports/www/pecl-APC
make install clean

Примечание: при сборке всяких расширений постоянно ругался компилятор на отсутствие php_pcre.h. Оказалось, можно его подложить из другого места. Для этого надо пойти в другой порт (напр, /usr/ports/devel/php52-spl/ или /usr/ports/lang/php5-что-то-еще (толком и не помню), собрать программу без установки и очистки промежуточных файлов, скомандовав просто make, потом найти нужную подпапку, которая появилась в поддиректории этого порта, и скопировать нужное в порт, который не собирается).

Make config не собирается отрабатывать

Сохранил решение проблемы отсутствия окна настройки установки из порта (make config, freebsd 8).

копипаст из форума

Автоматическое копирование бекапа с сервера

После перехода на выделенный сервер в качестве площадки для своих веб-проектов у меня появилась куча возможностей и немного дополнительных забот. Одна из них - как бекапить так, чтобы надежно.

На сервере данные резервируются, но для пущего спокойствия (для таких случаев - а я ведь там хостился, вовремя свалил) хотелось сливать их к себе. Не помню, как нашел программу WinSCP, но она оказалось тем, чем надо. Она может коннектиться по SFTP (SSH File Transfer Protocol), поддерживает командную строку, умеет синхронизировать каталоги — все то, что нужно для автослива.

Чтобы запустить WinSCP для синхронизации содержимого папки на сервере, я создал bat-ник с такой строкой (для удобства чтения здесь написал в несколько строк):

WinSCP.exe 
  /ini=путь-к-файлу-WinSCP.ini 
  /console "имя набора настроек для подключения" 
  /command "synchronize local -delete путь-к-локальной-папке путь-к-папке-на-сервере"

В WinSCP, как и в PuTTY, можно сохранять настройки подключения (даже пароль, в отличие от последней) для повторного использования, поэтому предварительно необходимо создать набор настроек. А если настроить коннект по ключу, то даже пароль не надо в открытом виде хранить.

После этого осталось только настроить автозапуск батника (для таких дел и для многих других использую nnCron), а резервирование на сервере запускать за час до запуска батника. Красота!