Ответ 1
Я потратил последний день на чтение различных компонентов, и я думаю, что у меня достаточно понимания, чтобы ответить на мой собственный вопрос. Большинство моих ответов можно найти в разных местах в Интернете, но, надеюсь, будет некоторая ценность для размещения всех частей в одном месте:
- Nginx: первая и самая очевидная часть стека для понимания - nginx. Nginx - это легкий веб-сервер, который может выступать в качестве замены для вездесущего веб-сервера Apache. Nginx также может выступать в качестве прокси-сервера. Он быстро растет в своем использовании и в настоящее время обслуживает 10% всех веб-доменов. Одним из важных преимуществ nginx является то, что он асинхронен и управляется событиями, а не создает поток процессов для обработки каждого соединения. Теоретически это означает, что nginx способен обрабатывать большое количество соединений, не используя много системных ресурсов.
- PSGI: PSGI - это протокол (чтобы отличить его от конкретной реализации протокола, такого как Plack). Главной мотивацией для создания PSGI, насколько я могу судить, является то, что когда Apache был впервые создан, не было встроенной поддержки обработки запросов со сценариями, написанными, например, Perl. Возможность сделать это была привязана к Apache с помощью mod_cgi. Чтобы протестировать ваше приложение Perl, вам придется запускать весь веб-сервер, поскольку приложение запускается на веб-сервере. Напротив, PSGI предоставляет протокол, с которым веб-сервер может связываться с сервером, написанным, например, Perl. Одно из преимуществ этого заключается в том, что гораздо проще протестировать сервер Perl независимо от веб-сервера. Еще одно преимущество заключается в том, что после создания сервера приложений очень легко переключиться на различные совместимые с PSGI веб-серверы для тестирования, который обеспечивает лучшую производительность.
- Plack: Это конкретная реализация протокола PSGI, который обеспечивает клей между веб-сервером, совместимым с PSGI, и сервером приложений perl. Plack - эквивалент Perl Ruby Rack.
- Starman: веб-сервер на основе perl, совместимый с протоколом PSGI. Одна путаница у меня была то, что я хотел бы использовать как Starman, так и Nginx в то же время, но, к счастью, этот вопрос был довольно хорошо ответил на Stackoverflow. Суть в том, что было бы лучше позволить nginx обслуживать статические файлы, не требуя для этого процесса perl, а также позволяя серверу приложений Perl работать на более высоком порту.
-
Dancer: Рамка веб-приложений для Perl. Вид эквивалента Ruby on Rails. Или, точнее, эквивалент Sinatra для Ruby (разница в том, что Sinatra - минималистская структура, тогда как Ruby on Rails - это более полная веб-структура). Как кто-то, кто занимался PHP и раньше не использовал веб-фреймворк, я немного смутился о том, как это связано с обслуживающим стеком. Точка веб-фреймворков - это абстрактные общие задачи, которые очень часто выполняются в веб-приложениях, такие как преобразование запросов базы данных в объекты/структуры данных в веб-приложении.
-
Установка (на ubuntu):
sudo apt-get install nginx sudo apt-get install build-essential curl sudo cpan App::cpanminus sudo cpanm Starman sudo cpanm Task::Plack sudo apt-get install libdancer-perl
- Как начать работу:
cd dancer -a mywebapp sudo plackup -s Starman -p 5001 -E deployment --workers=10 -a mywebapp/bin/app.pl
Теперь у вас будет сервер starman, на котором запущено приложение Dancer на порту 5001. Чтобы nginx отправил трафик на сервер, вам нужно изменить
/etc/nginx/nginx.confи добавить в него что-то вроде этого в раздел http:
server { server_name permanentinvesting.com listen 80; location /css/ { alias /home/ubuntu/mywebapp/public/css/; expires 30d; access_log off; } location / { proxy_pass http://localhost:5001; proxy_set_header X-Real-IP $remote_addr; } }
Первое правило местоположения указывает, что nginx должен обрабатывать статический контент в каталоге /css, получая его из
/home/ubuntu/mywebapp/public/css/. В правиле второго местоположения указано, что трафик на веб-сервер на порту 80 должен быть отправлен на сервер Starman для обработки. Теперь нам просто нужно запустить nginx:
sudo service nginx start