И так у нас есть задача. Заставить работать вместе легкий веб-сервер nginx и lua(в данном случае lua через wsapi(lua web server API)-fastcgi).
Что нам потребуется? Ну для начала голова на плечах. Ну то есть не то, что бы она особо нужна, но пригодится.
А далее… А далее сервер в нашем случае с GNU/Linux на борту(но думаю что сойдет и, скажем FreeBSD), мы будем рассматривать на примере Ubuntu GNU/Linux, так сложилось исторически.
Ставим nginx.
и собственно nginx с нами, это понятно, тут все просто.
Далее начинаются чудеса.
Как говорят наши программисты работающие с lua в Ubuntu luarocks покорежен так, что мама родная не узнает, плюс к тому luarocks зарелизил версию 2.0 за несколько дней до релиза Ubuntu 9.10 и версия не вошла в релиз, а программисты хотят именно его. Значит luarocks временно будем ставим из сырцов, а чуть позже сделаем свой репозиторий и будем собирать пакетик.
ну а пока…
Да, таким образом мы конечно разведем некоторую помойку в системе, но пока это мы оставим так, до поры, до времени.
luarocks мы поставили, молодцы.
ставим wsapi-fcgi
ага, молодцы, поставили.
теперь нам пожалуй пригодится spawn-cgi, что бы наш wsapi-fcgi нас где-нибудь поджидал :)
следующей проблемой является отсутствие стартового скрипта для spawn-fcgi в Ubuntu. решается использованием примерно такого скрипта:
укладываем скрипт на место в /etc/init.d/spawn-fcgi, добавляем на уровени загрузки, вуаля! с запуском как fcgi wsapi вопрос решен.
конфигурируем nginx, что бы отдавал все что приходит на наш хост который нужно дальше для обработки wsapi-fcgi
мой пример не является особо правильным, просто под те нужды под которые писалось было достаточно.
в /etc/nginx/sites-available создаем файлик fcgi следующего содержания:
создаем с него симлинку в /etc/nginx/sites-enabled, перезапускаем nginx
по адресу /srv/www/nginx/fcgi/lua размещаем наш тестовый index.lua
заходим браузером и проверяем работает ли.
данный текст был написан для внутренней документации, но решил опубликовать, вдруг кому пригодится.
на русском языке документации по такой связке я не встретил(впрочем и на английском тоже)
Что нам потребуется? Ну для начала голова на плечах. Ну то есть не то, что бы она особо нужна, но пригодится.
А далее… А далее сервер в нашем случае с GNU/Linux на борту(но думаю что сойдет и, скажем FreeBSD), мы будем рассматривать на примере Ubuntu GNU/Linux, так сложилось исторически.
Ставим nginx.
# apt-get install nginx
и собственно nginx с нами, это понятно, тут все просто.
Далее начинаются чудеса.
Как говорят наши программисты работающие с lua в Ubuntu luarocks покорежен так, что мама родная не узнает, плюс к тому luarocks зарелизил версию 2.0 за несколько дней до релиза Ubuntu 9.10 и версия не вошла в релиз, а программисты хотят именно его. Значит luarocks временно будем ставим из сырцов, а чуть позже сделаем свой репозиторий и будем собирать пакетик.
ну а пока…
1. $ sudo apt-get install unzip lua5.1 liblua5.1-dev libreadline-dev
2. $ mkdir -p ~/build && cd ~/build
3. $ wget http://luarocks.org/releases/luarocks-2.0.tar.gz (взять самую свежую версию с http://luarocks.org)
4. $ tar -zxf luarocks-2.0.tar.gz && cd luarocks-2.0
5. $ ./configure --with-lua-include=/usr/include/lua5.1
6. $ make
7. $ sudo make install
Да, таким образом мы конечно разведем некоторую помойку в системе, но пока это мы оставим так, до поры, до времени.
luarocks мы поставили, молодцы.
ставим wsapi-fcgi
# luarocks install wsapi-fcgi
ага, молодцы, поставили.
теперь нам пожалуй пригодится spawn-cgi, что бы наш wsapi-fcgi нас где-нибудь поджидал :)
# apt-get install spawn-cgi
следующей проблемой является отсутствие стартового скрипта для spawn-fcgi в Ubuntu. решается использованием примерно такого скрипта:
#! /bin/sh<br/>
<br/>
### BEGIN INIT INFO<br/>
# Provides: spawn-fcgi<br/>
# Required-Start: $all<br/>
# Required-Stop: $all<br/>
# Default-Start: 2 3 4 5<br/>
# Default-Stop: 0 1 6<br/>
# Short-Description: starts FastCGI<br/>
# Description: starts FastCGI with spawn-fcgi<br/>
### END INIT INFO<br/>
<br/>
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin<br/>
NAME=spawn-fcgi<br/>
PID=/var/run/spawn-fcgi.pid<br/>
DAEMON=/usr/bin/spawn-fcgi<br/>
DAEMON_OPTS="-f /usr/local/lib/luarocks/bin/wsapi.fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -P $PID"<br/>
. /lib/lsb/init-functions<br/>
<br/>
test -x $DAEMON || exit 0<br/>
<br/>
set -e<br/>
<br/>
case "$1" in<br/>
start)<br/>
log_daemon_msg "spawn-fcgi starting"<br/>
start-stop-daemon --start --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS<br/>
echo "done."<br/>
;;<br/>
stop)<br/>
log_daemon_msg "spawn-fcgi stopping"<br/>
start-stop-daemon --stop --pidfile $PID --retry 5<br/>
rm -f $PID<br/>
echo "done."<br/>
;;<br/>
restart)<br/>
echo "Stopping $NAME: "<br/>
start-stop-daemon --stop --pidfile $PID --retry 5<br/>
rm -f $PID<br/>
echo "done..."<br/>
sleep 1<br/>
echo "Starting $NAME: "<br/>
start-stop-daemon --start --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS<br/>
echo "done."<br/>
;;<br/>
*)<br/>
echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&2<br/>
exit 1<br/>
;;<br/>
esac<br/>
<br/>
exit 0
укладываем скрипт на место в /etc/init.d/spawn-fcgi, добавляем на уровени загрузки, вуаля! с запуском как fcgi wsapi вопрос решен.
# update-rc.d spawn-fcgi defaults 21
конфигурируем nginx, что бы отдавал все что приходит на наш хост который нужно дальше для обработки wsapi-fcgi
мой пример не является особо правильным, просто под те нужды под которые писалось было достаточно.
в /etc/nginx/sites-available создаем файлик fcgi следующего содержания:
server {
listen наш-сервер-wsapi.cxm:80;
server_name наш-сервер-wsapi.cxm;
access_log /var/log/nginx/наш-сервер-wsapi.cxm.access.log;
location / {
fastcgi_pass localhost:9000;
fastcgi_index index.lua;
fastcgi_param SCRIPT_FILENAME /srv/www/nginx/fcgi/lua$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
}
создаем с него симлинку в /etc/nginx/sites-enabled, перезапускаем nginx
по адресу /srv/www/nginx/fcgi/lua размещаем наш тестовый index.lua
заходим браузером и проверяем работает ли.
данный текст был написан для внутренней документации, но решил опубликовать, вдруг кому пригодится.
на русском языке документации по такой связке я не встретил(впрочем и на английском тоже)