Установка node.js на FreeBSD и использование под Nginx

Операционные системы, Программирование 02.02.2010

Случайно нашел сайт nodejs.ru, полистал и добавил в ридер. Давно хотел попробовать node.js, но именно этот сайт стал той самой последней каплей в чаше желания и я решил незамедлительно попробовать node.js в действии.

Установка

Заходим на оф. сайт node.js и копируем ссылку на архив с сорцами.

# cd /tmp
# fetch http://s3.amazonaws.com/four.livejournal/20100120/node-v0.1.26.tar.gz
# tar -xzvf node-v0.1.26.tar.gz
# cd node-v0.1.26
# ./configure --prefix=/usr/local
# make && make install
# rehash

Если у вас не установлен libexecinfo, то:

# cd /usr/ports/devel/libexecinfo
# make install

Использование

Потестим для начала сам node, для этого создайте файлик example.js со следующим содержимым:

var sys = require('sys');
sys.puts('Hello, people!');

И запустите этот файлик:

# node example.js

Если нет ошибок, то можете продолжить и завязать node с nginx. А если есть ошибки — пишите в комментарии, помогу.

Читать полностью »

Nginx. Использование PHP в режиме FastCGI с помощью php-fpm

Операционные системы 27.01.2010

php-fastcgi

У меня стоял Apache 2.2 и mod_php, так как Apache жрет не мало ресурсов, я решил постепенно переводить проекты на сервере на связку Nginx + PHP-FastCGI, а в качестве спаунера php-fpm.

Вкратце, что такое FastCGI и почему он лучше чем mod_php?

FastCGI это высокопроизводительный и масштабируемый интерфейс для взаимодействия web-сервера и приложений, дальнейшее развитие технологии CGI. Ознакомиться с более подробной информацией о FastCGI вы можете на официальном сайте или в Википедии.

Основное преимущество FastCGI в изолировании динамического языка от web-сервера. Например, запуск FastCGI процесса под пользователем, отличным от пользователя web-сервера, а также процесс может находиться в chroot'е, отличном от chroot'а web-сервера. Помимо всего прочего, эта технология позволяет запускать web-сервера и CGI процессы (теже php скрипты) на различных хостах, что улучшает масштабируемость и также способствует безопасности без существенной потери в производительности.

Ну а зачем нам php-fpm, если PHP и так поддерживает работу в режиме FastCGI?

php-fpm — это патч для PHP, для использования PHP как FastCGI процесса в высоконагруженных системах. Устраняет ряд проблем мешающих использовать PHP в режиме FastCGI. Андрей Нигматулин представил набор патчей php-fpm к PHP 4/5, устраняющих ряд проблем, которые мешают использовать PHP в режиме FastCGI на высоконагруженных системах.

Возможности php-fpm:

* Управление процессами. Возможность «плавно» останавливать и перезапускать php воркеры без потери запросов. Возможность плавно обновлять конфигурацию и binary без потери запросов;
* Ограничение ip адресов, с которых могут приходить запросы от web сервера;
* Динамическое количество процессов, в зависимости от нагрузки (TODO);
* Запуск воркеров с разными uid/gid/chroot/environment и разными php.ini опциями;
* Логирование stdout & stderr рабочих процессов;
* Аварийный перезапуск всех процессов при случайном разрушении shared memory opcode cache, если используется акселератор;
* Принудительное завершение подвисших процессов, если set_time_limit () не срабатывает (TODO);

http://php-fpm.org/wiki/What_is_PHP-FPM

Андрей Нигматулин / php-fpm / PHPConf 08 from Mihail Andreev on Vimeo.

Кстати, в видео я тоже поучаствовал, на 5-ой минуте и 20-ой секунде я там прохожу перед камерой в костюме и красной футболке... :D

Читать полностью »

Помогите с переводом мануала по IMagick

Личка 15.11.2009

imagick

Всем привет, прошу вашей помощи с переводом мануала по PHP модулю IMagick. Не так давно я хотел своими усилиями перевести мануал по IMagick, но из-за нехватки времени никак не могу заставить себя перевести его до конца.

Мне помогало сообщество Pyha.ru, но у них тоже как видно не так много времени, возможно у моих читателей найдется больше желание и главное — время для этой цели.

Переводить можно тут http://wiki.adw0rd.ru/index.php/IMagick, для этого необходимо всего лишь зарегистрироваться в вики и приступить к переводу.

Далее этот документ планируется перенести на страницы сообщества Pyha.ru, или вы можете посоветовать куда более подходящее место (например php.net), либо оставить все там же на моем wiki.

Заранее спасибо, по вопросам и предложениям — пишите в камменты!

Использование Nginx+Tornado для приложений на Django

Python. Изучаем вместе!, Операционные системы 15.11.2009

tornado

Не так давно был анонсирован новый веб-сервер Tornado, написанный на Python, отличительной чертой которого являлась скорость работы и то что это не просто веб-сервер, а целый фреймворк.

Впервые я с ним познакомился на хабре, а вскоре после этого прочел заметку Django + Tornado и решил попробовать торнадо в действии!

На самом деле конфигурация «Nginx+Tornado+Django» позаимствована у заметки, ссылку на которую я привел выше, однако у меня та конфигурация не заработала, поэтому я выкладываю для себя и друзей свой конфиг.

Установка

Устанавливаем Tornado:

cd /usr/ports/www/py-tornado
make install clean

Устанавливаем Nginx, если он у вас не установлен:

cd /usr/ports/www/nginx-devel
make install clean

Читать полностью »

PHP. heap corruption detected в phpQuery и Segmentation fault в PHP CLI

Операционные системы 18.09.2009

suhosin_bug

После переустановки PHP 5.2.10 столкнулся я с такой проблемой как «linked list corrupt on efree () — heap corruption detected» при использовании библиотеки phpQuery, а также «Segmentation fault» в CLI версии свежеустановленного PHP.

Ошибка «linked list corrupt on efree () — heap corruption detected» проявлялась только в одном месте, и связана была с DOM модулем, как мне казалось. До переустановки я не юзал phpQuery в продакшене, поэтому не мог сказать однозначно повлияла ли это переустановка, или так и было бы с ошибкой.

При запуске любого скрипта в CLI режиме, было нечто подобное:

php -f /www/script.php
Segmentation fault

Решение проблемы с Segmentation fault в CLI

Погуглив немного, не нашел ничего путного и запостил на Пыху топик о своей проблеме, пару дней мы думали по этой теме, предлагались разные решения и побороли в первый день «Segmentation fault» в CLI, путем упорядочивания PHP модулей (спасибо пользователю OFF), сейчас у меня так:

extension=mbstring.so
extension=simplexml.so
extension=spl.so
extension=mysqli.so
extension=mysql.so
extension=session.so
extension=mcrypt.so
extension=gd.so
extension=json.so
extension=ctype.so
extension=iconv.so
extension=hash.so
extension=curl.so
extension=zlib.so
extension=imagick.so
extension=ffmpeg.so
extension=sphinx.so
extension=pcre.so
extension=memcache.so
extension=memcached.so
extension=dom.so

С тех пор CLI работал исправно и работает до сих пор.

Решение проблемы с heap corruption detected в phpQuery

Признаюсь, я грешил на PHP-модуль «php5-dom», однако проблема оказалась не в нем. Ошибка была вида:

[Thu Sep 17 01:48:23 2009] [error] [client 93.111.111.111] ALERT — linked list corrupt on efree () — heap corruption detected (attacker '93.111.111.111', file '/path/to/kinsburg/path/to/libs/phpquery.php', line 5689), referer: http://kinsburg.ru/path/to/admin/path/to/parser/

где, 93.111.111.111 — ip-адрес моего локального компьютера (аля клиент)

Решение оказалось совсем для меня не очевидным, во всем оказался виноват «Suhosin Patch», который нужен для обеспечения безопасности. Я просто переустановил PHP, но в этот раз отключил Suhosin.

На эту мысль меня натолкнул пост пользователя OFF с Пыха.ру, за что ему огромное спасибо! Были еще варианты решения этой проблемы, но они не венчались успехом.

В данный момент, я планирую включить снова Suhosin Patch, потомучто запускать тот злосчастный скрипт мне необходимо всего раз 3-6 месяцев, а за это время может возникнут патчи бага, либо найдется куда более продуктивное решение.