Краткая инструкция, которая позволяет запустить интерпретатор Perl и расширить стек LEMP на ОС Debian GNU/Linux 11.2, Ubuntu Server 21.10 и CentOS Stream 8.
Настройка LEMP-сервера для Debian описана здесь: https://dondub.com/2021/07/zapusk-lemp-servera-na-debian-10/, а для Ubuntu Server — здесь: https://dondub.com/2021/07/zapusk-lemp-servera-na-ubuntu-server/
Устанавливаем необходимые пакеты
# apt install perl nginx fcgiwrap
Затем создадим файл конфигурации nginx для fcgiwrap
# touch /etc/nginx/fcgiwrap.conf
откроем его
# nano /etc/nginx/fcgiwrap.conf
и пропишем несколько строк:
location /cgi-bin/ { gzip off; root /var/www; fastcgi_pass unix:/var/run/fcgiwrap.socket; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; }
После этого создадим директорию /var/www/cgi-bin/ и зададим для неё необходимые права
# mkdir /var/www/cgi-bin/ # chmod 755 /var/www/cgi-bin/
Далее откроем файл конфигурации /etc/nginx/sites-available/default
# nano /etc/nginx/sites-available/default
и в самом конце секции server перед закрывающей фигурной скобкой добавим сроку подключения файла fcgiwrap.conf:
include /etc/nginx/fcgiwrap.conf;
Затем перезапустим службу nginx
# systemctl restart nginx
Теперь создадим файл (скрипт) /var/www/cgi-bin/welcome.cgi
# touch /var/www/cgi-bin/welcome.cgi
зададим ему необходимые права
# chmod 755 /var/www/cgi-bin/welcome.cgi
откроем его
# nano /var/www/cgi-bin/welcome.cgi
и для проверки работы Perl впишем такой код:
#!/usr/bin/perl print "Content-Type: text/html; charset=utf-8 \n\n"; print "<h1>Файл welcome.cgi работает!</h1>";
На другой машине в сети в адресной строке браузера введём http://IP_адрес_или_имя_хоста/cgi-bin/welcome.cgi и увидим страницу с сообщением:
Файл welcome.cgi работает!
Также создадим скрипт с краткой информацией о данном сервере
# touch /var/www/cgi-bin/cgi.pl # chmod 755 /var/www/cgi-bin/cgi.pl
откроем его
# nano /var/www/cgi-bin/cgi.pl
и впишем такие строчки:
#!/usr/bin/perl print "Content-Type: text/plain; charset=utf-8 \r\n\r\n"; print "Информация о сервере: \n"; foreach ( keys %ENV ) { print "$_\t$ENV{$_}\n"; }
На странице http://IP_адрес_или_имя_хоста/cgi-bin/cgi.pl должна отобразиться информация о сервере.
Для подключения к базе данных с помощью скриптов Perl необходимо будет установить и дополнительные пакеты. Это описано здесь: https://dondub.com/2022/03/podklyuchenie-perl-k-lamp-serveru-v-linux/
Добрый день.
Тут,наверное, еще надо написать про запуск демона, который это будет распаралелливать.
Иначе запросы будут выстраиваться в очередь. Вот к примеру напишем скрипт, который будет выполнться n секунд, где n это параметр из гет запроса по ключу sec
my $params = {split(‘=’,$ENV{QUERY_STRING})};
sleep($params->{sec});
Откроем первую вкладку http://IP_адрес_или_имя_хоста/cgi-bin/cgi.pl?sec=10
Откроем вторую вкладку http://IP_адрес_или_имя_хоста/cgi-bin/cgi.pl?sec=2
Так вот вторая вкладка(sec=2) будет висеть пока не отработает первая(sec=10).
В случае с php, вы запустили службу php-fpm. Тут как запускать? Допишите пожалуйста.
Добрый день.
Ну там смысл был в том, чтобы Перл вообще заработал на сервере, а скрипты, которые в пример приведены, примитивны, просто показывают, что запускается.
php-fpm запускается аналогично? командой
systemctl start php7.4-fpm
Здесь 7.4 — это версия PHP, она у вас может быть другой.
Там в самом начале приведены ссылки на статьи, описывающие запуск LEMP.
Дело в том, что после запуска php-fpm больше ничего делать не нужно. Все работает из коробки. запросы друг другу не мешают и выполняются параллельно.
А с перлом как?
Запустил fcgiwrap, а дальше что делать? Как распараллелить запросы?
Здесь наверное, этот вопрос лучше задать разработчикам на Перл. Цель данной статьи была только в том, чтобы Перл заработал. Остальные нюансы — уже вопрос детальной разработки.