Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 25 Май, 2012, 03:27:02

Страниц: [1]
Печать
Автор Тема: FAQ: Установка веб-фреймворка Perl Dancer на Nginx используя PSGI/Plack  (Прочитано 654 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ivan    ↓ 
08 Февраль, 2012, 05:20:34
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98

PerlDancer - веб-фреймворк на perl, косящий под веб-фреймворк RubyOnRails на ruby.
PSGI - является мощнейшим шлюзом между скриптом и веб-сервером для perl, аналогичен WSGI для питона. Варианты серверов/шлюзов смотрите на http://plackperl.org/
 
Данный FAQ подразумевает уже установленный NGINX!
 
Устанавливаем PerlDancer:
Text
curl -L http://cpanmin.us | perl - --sudo Dancer

Устанавливаем PSGI/Plack:
Text
curl -L http://cpanmin.us | perl - --sudo Task::Plack

Создаём новый Dancer-Site для нашего домена site.ru:
Text
cd /srv/www
dancer -a site_ru

Сайт готов:
+ site_ru
+ site_ru/bin
+ site_ru/bin/app.pl
+ site_ru/config.yml
+ site_ru/environments
+ site_ru/environments/development.yml
+ site_ru/environments/production.yml
+ site_ru/views
+ site_ru/views/index.tt
+ site_ru/views/layouts
+ site_ru/views/layouts/main.tt
+ site_ru/MANIFEST.SKIP
+ site_ru/lib
 site_ru/lib/
+ site_ru/lib/site_ru.pm
+ site_ru/public
+ site_ru/public/css
+ site_ru/public/css/style.css
+ site_ru/public/css/error.css
+ site_ru/public/images
+ site_ru/public/500.html
+ site_ru/public/404.html
+ site_ru/public/dispatch.fcgi
+ site_ru/public/dispatch.cgi
+ site_ru/public/javascripts
+ site_ru/public/javascripts/jquery.js
+ site_ru/t
+ site_ru/t/002_index_route.t
+ site_ru/t/001_base.t
+ site_ru/Makefile.PL

В Dancer есть свой встроенный сервер прямо как и в ROR, вешающийся на 3000 порт. Данный сервер служит лишь для тестирования и не рекомендован к употреблению в публичных целях. В данном случае запустить его не грех - нужно проверить работоспособность фреймворка на текущей версии perl:
Text
cd site_ru
./bin/app.pl

Открываем в браузере страничку http://ваш_ип:3000 и лицезреем дефолтную страничку. Если всё хорошо - продолжаем:
Нажмите CTRL+C, это остановит сервер и вернет вам управление shell. Использовать в качестве сервера мы будем высокопроизводительный Starman. Его дополнительная установка не требуется - при установке Task::Plack вы уже автоматически установили в систему все возможные PSGI-сервера.
 
Строка запуска которая нам нужна, выглядит таким образом:
Text
plackup --env deployment --server Starman --workers=10 --port 5001 --app /srv/www/site_ru/bin/app.pl

Сделаем из неё демон (переменные в баш загоним для удобства создания init daemon):
Text
STARMAN_WWW_DIR="/srv/www"
STARMAN_WORKERS="10"
STARMAN_PORT="5001"
Text
printf "#! /bin/sh\n\nPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nDAEMON=/usr/local/bin/plackup\nNAME=\"starman\"\nCWD=${STARMAN_WWW_DIR}/\$2\n# Defaults\nRUN=\"no\"\nOPTIONS=\"--env \$3 --server Starman --workers=${STARMAN_WORKERS} --port ${STARMAN_PORT} --app \$CWD/bin/app.pl\"\nPIDFILE=\"\$NAME.pid\"\n\ntest -x \$DAEMON || exit 0\n\nlog_daemon_msg() {\n    echo -n \"\$1: \$2\"\n}\n\nlog_end_msg() {\n    if [ \$1 -ne 0 ]; then\necho \" failed\"\n    else\necho \".\"\n    fi\n}\n\n[ -f /lib/lsb/init-functions ] && . /lib/lsb/init-functions\n\nstart()\n{\n    log_daemon_msg \"Starting plack server\" \"\$NAME\"\n    start-stop-daemon -b -m --start --quiet --pidfile \"\$PIDFILE\" --exec \$DAEMON -- \$OPTIONS\n    if [ \$? != 0 ]; then\nlog_end_msg 1\n        exit 1\n    else\nlog_end_msg 0\n    fi\n}\n\nsignal()\n{\n\n    if [ \"\$1\" = \"stop\" ]; then\nSIGNAL=\"TERM\"\n        log_daemon_msg \"Stopping plack server\" \"\$NAME\"\n    else\nif [ \"\$1\" = \"reload\" ]; then\nSIGNAL=\"HUP\"\n            log_daemon_msg \"Reloading plack server\" \"\$NAME\"\n    else\necho \"ERR: wrong parameter given to signal()\"\n        exit 1\n    fi\nfi\nif [ -f \"\$PIDFILE\" ]; then\nstart-stop-daemon --stop --signal \$SIGNAL --quiet --pidfile \"\$PIDFILE\"\n     if [ \$? = 0 ]; then\nlog_end_msg 0\n        else\nSIGNAL=\"KILL\"\n        start-stop-daemon --stop --signal \$SIGNAL --quiet --pidfile \"\$PIDFILE\"\n            if [ \$? != 0 ]; then\nlog_end_msg 1\n                [ \$2 != 0 ] || exit 0\n            else\nrm \"\$PIDFILE\"\n                log_end_msg 0\n            fi\nfi\nif [ \"\$SIGNAL\" = \"KILL\" ]; then\nrm -f \"\$PIDFILE\"\n        fi\nelse\nlog_end_msg 0\n    fi\n}\n\ncase \"\$1\" in\n    start)\n    start\n    ;;\n\n    force-start)\n    start\n    ;;\n\n    stop)\n        signal stop 0\n    ;;\n\n    force-stop)\n    signal stop 0\n    ;;\n\n    reload)\n    signal reload 0\n    ;;\n\n    force-reload|restart)\n    signal stop 1\n    sleep 2\n    start\n    ;;\n\n    *)\n    echo \"Usage: /etc/init.d/\$NAME {start|force-start|stop|force-stop|reload|restart|force-reload}\"\n    exit 1\n    ;;\nesac\n\nexit 0" > /etc/init.d/starman
Text
chmod +x /etc/init.d/starman
update-rc.d starman defaults
Если вы не хотите каждый раз при перезагрузке сервера запускать starman - просто не пишите последнюю команду
 
Проверяем наш демон:
Text
service starman start site_ru deployment
starman [Команда] [Dancer-Site] [Environment]
Доступные команды:
start, stop, restart, force-start, force-stop, reload, force-reload
При остановке достаточно указать лишь команду stop, Dancer-Site и прочее указывать не нужно
 
При запуске htop можно наблюдать такую картину, если всё работает успешно:

 
Не стоит путать starman с каким-нибудь spawn-fcgi - starman является самостоятельным веб-сервером и весьма устойчив к хакерским атакам (по крайней мере относительно других PSGI-серверов)
 
Проверяем результат: http://ваш_ип:указанный_порт (5001)
Perl is dancing
You’ve joined the dance floor!
 
Значит все хорошо, продолжаем - наша задача теперь перебросить это дело на NGINX:
Придется руками подредактировать конфигурацию nginx (не люблю редактировать руками, обычно всё загоняю в команды)
Text
upstream starman {
    server 127.0.0.1:5001;
}
 
server {
    server_name site.ru;
   
    location ^~ (/images/|/css/|/javascripts/) {
        root /srv/www/site_ru/public;
        expires 30d;
    }
   
    location / {
        proxy_set_header        Host $http_host;
        proxy_set_header        X-Forwarded-Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass      http://starman;
    }
}

Обратите внимание что порт указан 5001, укажите ваш порт если он у вас отличается.
 
Рестартим сервер nginx:
Text
service nginx restart

Переходим на http://site.ru и радуемся =)
« Последнее редактирование: 08 Февраль, 2012, 05:20:34 от Ivan » Записан

Sinkler    ↓ 
24 Август, 2011, 10:21:30 , спустя
НЕ ХУЕТА! ХУЕТА!

Похуй, пляшем!
Группа: Джедаи

Карма: 73
Сообщений: 6806
Сила слова: 1.07

хоть бы марио пришел, через базу поменял группу Ване)))
Записан

md5    ↓ 
24 Август, 2011, 10:42:53 , спустя 21 минуту 23 секунды
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10495
Сила слова: 1.19

я въебал адеквата, оказывается, это через профиль в 2 щелчка делается :D
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
AlexB    ↓ 
24 Август, 2011, 10:54:26 , спустя 11 минут 33 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3427
Сила слова: 2.6

Кстати, тут знакомые из одной очень крупной и известной интернет-компании ищут перл программиста. Говорят позарез нужен, готовы любые условия обсуждать. Так что если есть желающие ...
Записан

Sinkler    ↓ 
24 Август, 2011, 10:57:03 , спустя 2 минуты 37 секунд
НЕ ХУЕТА! ХУЕТА!

Похуй, пляшем!
Группа: Джедаи

Карма: 73
Сообщений: 6806
Сила слова: 1.07


я въебал адеквата, оказывается, это через профиль в 2 щелчка делается :D
век живи век учись на пiха.ру
Записан

Ivan    ↓ 
24 Август, 2011, 02:29:37 , спустя 3 часа 32 минуты 34 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98

Спасибо за доверие!
Записан

Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd