Системное администрирование / [Из песочницы] Разворачиваем PSGI приложение на Plack+Starman+Nginx

в 13:49, , рубрики: nginx, perl, plack, PSGI, метки: , , ,

PSGI — это интерфейс между perl приложением и веб сервером, позволяющий абстрагироваться от реализации подключения к веб серверу. PSGI приложения хорошо масштабируются, особенно при использовании Nginx в качестве фронтенда и балансировщика нагрузки.
В этой небольшой заметке я расскажу как развернуть небольшое PSGI приложение. Если приложение будет большим, вероятно, и заметка потребуется побольше.
Итак, будем исходить из предположения, что само PSGI приложение и Nginx у вас уже имеются, либо вы знаете как их установить при помощи вашего пакетного менеджера, либо вручную. Есть возможность пропатчить Nginx и запустить приложение непосредственно на нем, но это не наш метод, потому что во-первых такой подход нарушает стройность работы обновлений ПО, заставляя вас самостоятельно следить за всеми изменениями и возможными проблемами безопасности в Nginx, а во-вторых никто не может гарантировать, что автор патча не перестанет его допиливать под последующие версии Nginx.
В общем, надо выбирать бэкенд. Конечно, тут есть варианты — например Apache с mod_psgi, но на основе тестирования производительности, которое было проведено мной, оптимальным вариантом является Starman — высокопроизводительный веб сервер с preforking моделью, с поддержкой PSGI и HTTP/1.1. Если у вас нет каких-то апач-специфичных штук, лучшим вариантом будет использовать его.
Установите cpanminus (инструкция тут http://search.cpan.org/perldoc?App::cpanminus#INSTALL).
Установите набор адаптеров Plack и веб сервер Starman.$ cpanm Task::Plack
Запустите Starman.$ plackup --env production --server Starman --workers=10 --port 50000 --app /srv/www/site/bin/app.pl
Можете убедиться, в системе запустилось 10 рабочих процессов Starman, которые исполняют указанное вами приложение и отдают результаты на TCP порту 50000. Вероятно, вы захотите добавить все запускающиеся приложения в автозагрузку, что может быть вами с успехом проделано способом, специфичным для вашего дистрибутива.
Настало время настроить фронтенд на Nginx.upstream starman {
server 127.0.0.1:50000;
}
server {
server_name mysite.ru;
location ^~ (/images/|/css/) {
root /srv/www/site/html;
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 starman;
}
}
Само собой, использовать Nginx для раздачи статического контента — отличная идея и это обязательно нужно использовать. В случае необходимости масштабирования, легко получить ещё N starman нод аналогичным образом и настроить на Nginx балансировку нагрузки.
Я планирую небольшой цикл статей о perl, web-фреймворках на perl, о Dancer и PSGI. В качестве первой, вводной статьи, я сознательно выбрал рассказ об инсталляции рабочей среды для PSGI, поскольку при написании первого PSGI приложения невредно бы иметь готовый стенд для экспериментов.
Если благородные доны пожелают и небо не упадет на землю, так тому и быть.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js