База знаний

Часто задаваемые вопросы, на которые мы уже ответили

Perl, Python, Node.JS

Perl

Для выполнения Perl-скриптов необходимо установить сам интерпретатор и дополнительные модули.

Использовать Perl в качестве backend на веб-сервере Apache можно двумя способами:

  • с помощью модуля mod_perl;
  • как CGI-скрипты.

Debian/Ubuntu

Установка

  • Устанавливаем Perl:
$ sudo apt-get install perl
  • Устанавливаем интерфейс для работой с базой данных:
$ sudo apt-get install libdbi-perl
  • Устанавливаем драйвер для конкретной СУБД,например, sqlite:
$ sudo apt-get install libdbd-sqlite3-perl
  • Для сборки дополнительных модулей через CPAN устанавливаем пакет build-essential:
$ sudo apt-get install build-essential

Далее модули устанавливаются средствами CPAN.

Apache + mod_perl

  • Устанавливаем модуль mod_perl для веб-сервера Apache:
$ sudo apt-get -y install libapache2-mod-perl2
  • Создаем конфигурационный файл /etc/apache2/conf-available/mod_perl.conf со следующим содержимым:
PerlSwitches -w
PerlSwitches -T

Alias /perl /var/www/perl

AddHandler perl-script .pl
PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI



SetHandler perl-script
PerlResponseHandler Apache2::Status
Require ip 127.0.0.1 10.0.0.0/24

  • Активируем конфигурацию:
$ sudo a2enconf mod_perl 
  • Перезагружаем веб-сервер Apache для применения изменений:
$ sudo systemctl restart apache2
  • Пример скрипта /var/www/perl/test-mod_perl.pl, результат которого будет доступен по ссылке http://domain.ru/perl/test-mod_perl.pl: 
#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";
print "\n\n";
print "
"; my $a = 0; &number(); print "
\n\n"; sub number { $a++; print "number \$a = $a"; }

Apache + CGI

  • CGI по умолчанию присутствует почти в любой конфигурации Apache, достаточно его активировать командой:
$ sudo a2enmod cgi
  • Если необходимо изменить директорию для хранения cgi-скриптов с /usr/lib/cgi-bin/, создаем файл /etc/apache2/conf-available/cgi-enabled.conf со следующими директивами:
Options +ExecCGI
AddHandler cgi-script .cgi .pl

  • Активируем новую конфигурацию:
$ sudo a2enconf cgi-enabled
  • Перезапускаем веб-сервер Apache:
$ sudo service restart apache2
  • Пример скрипта /var/www/html/cgi-enabled/index.cgi, результат которого будет доступен по адресу http://domain.ru/cgi-enabled/index.cgi: 
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "\n\n";
print "
\n"; print "CGI Test Page"; print "\n
\n"; print "\n\n";

CentOS

Установка

  • Устанавливаем Perl:
sudo yum install perl-libwww-perl
  • Устанавливаем интерфейс для работой с БД:
sudo yum install perl-DBI
  • Устанавливаем драйвер для конкретной СУБД, например, MySQL:
sudo yum install perl-DBD-MySQL

Далее модули устанавливаются средствами CPAN.

Apache + mod_perl

  • Подключаем расширенный репозиторий EPEL:
$ sudo yum install -y epel-release
  • Устанавливаем модуль mod_perl:
$ sudo yum install -y mod_perl
  • Корректируем конфигурационный файл /etc/httpd/conf.d/perl.conf, приводя его к виду:
PerlSwitches -w
PerlSwitches -T

Alias /perl /var/www/perl

SetHandler perl-script
#    AddHandler perl-script .cgi
#    PerlResponseHandler ModPerl::Registry
PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI



SetHandler perl-script
PerlResponseHandler Apache2::Status
#    Order deny,allow
#    Deny from all
#    Allow from .example.com

  • Перезапускаем веб-сервер для применения настроек:
$ sudo systemctl restart httpd
  • Пример файла /var/www/perl/test-mod_perl.cgi, результат работы которого будет доступен по ссылке http://domain.ru/perl/test-mod_perl.cgi: 
#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";
print "\n\n";
print "
"; my $a = 0; &number(); print "
\n\n"; sub number { $a++; print "number \$a = $a"; }

Apache + CGI

  • CGI по умолчанию присутствует почти в любой конфигурации веб-сервера Apache, достаточно его включить командой:
$ sudo a2enmod cgi
  • Если необходимо изменить директорию для хранения cgi-скриптов с /var/www/cgi-bin/, создаем файл /etc/httpd/conf.d/cgi-enabled.conf с директивами:
Options +ExecCGI
AddHandler cgi-script .cgi .pl

  • Если на сервере включен SELinux, то также потребуется скорректировать права для доступа к этой директории:
$ sudo chcon -R -t httpd_sys_script_exec_t /var/www/html/cgi-enabled 
$ sudo semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled 
  • Для применения настроек перезапускаем веб-сервер:
$ sudo systemctl restart httpd
  • Пример скрипта /var/www/html/cgi-enabled/index.cgi, результат работы которого будет доступен по ссылке http://domain.ru/cgi-enabled/index.cgi:  
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "\n\n";
print "
\n"; print "CGI Test Page"; print "\n
\n"; print "\n\n";

Python

Debian/Ubuntu

Установка

На версиях Ubuntu 16.04, Debian 8 и старше и других других этого семейства Linux установлена по умолчанию последняя версия Python 3.

Если нужна другая версия — ее нужно устанавливать отдельно.

Разберем на примере Python 3.7 действия для установки языка из исходников с сайта разработчика.

Устанавливаем пакеты, которые потребуются для сборки:

# apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev

Скачиваем исходники:

# wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.gz

Распаковываем архив:

# tar -xzf Python-3.7.2.tar.gz

Переходим в директорию с распакованным архивом и подготавливаем установку:

# cd Python-3.7.2 && ./configure --enable-optimizations

Компилируем интерпретатор. Процесс долгий, в зависимости от конфигурации бокса может занять до получаса. Команда:

# make

Устанавливаем интерпретатор. Обычно при установке используется команда make install, но если использовать её, собранная нами версия заменит предустановленную в системе, поэтому используем другую команду, чтобы сохранить обе:

# make altinstall

Проверяем, что Python установился:

# python3.7 --version
Python 3.7.2

Apache + mod_wsgi

  • Устанавливаем mod_wsgi для Apache:
$ sudo apt-get -y install libapache2-mod-wsgi
  • Создаем конфигурационный файл /etc/apache2/conf-available/wsgi.conf: 
WSGIScriptAlias /test_wsgi /var/www/html/test_wsgi.py
  • Активируем конфигурацию:
$ sudo a2enmod wsgi
  • Перезагружаем веб-сервер:
$ sudo service restart apache2

Apache + CGI

  • CGI по умолчанию присутствует почти в любой конфигурации Apache, достаточно его включить:
$ sudo a2enmod cgi
  • Если необходимо изменить директорию для хранения cgi-скриптов с /usr/lib/cgi-bin/, создаем файл /etc/apache2/conf-available/cgi-enabled.conf с настройками:
Options +ExecCGI
AddHandler cgi-script .cgi .pl

  • Активируем новую конфигурацию:
$ sudo a2enconf cgi-enabled
  • Перезапускаем веб-сервер:
$ sudo service restart apache2
  • Пример скрипта /var/www/html/cgi-enabled/index.py, результат работы которого будет доступен по адресу http://domain.ru/cgi-enabled/index.py: 
#!/usr/bin/env python

print "Content-type: text/html\n\n" 
print "Python Script Test Page"

CentOS

Установка

  • Устанавливаем инструменты для компиляции:
$ sudo yum -y install yum-utils
$ sudo yum -y groupinstall development
  • Подключаем репозиторий:
$ sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
  • Устанавливаем Python3.6:
$ sudo yum -y install python36u
  • Устанавливаем pip:
$ sudo yum -y install python36u-pip

Далее модули устанавливаются средствами pip.

Apache + mod_wsgi

  • Подключаем расширенный репозиторий EPEL:
$ sudo yum install -y epel-release
  • Устанавливаем mod_wsgi:
$ sudo yum -y install mod_wsgi
  • Создаем файл /etc/httpd/conf.d/wsgi.conf:
WSGIScriptAlias /test_wsgi /var/www/html/test_wsgi.py
  • Перезапускаем веб-сервер:
$ sudo systemctl restart httpd
  • Пример скрипта /var/www/html/test_wsgi.py , результат работы которого будет доступен по ссылке http://domain.ru/test_wsgi: 
#!/usr/bin/env python

print "Content-type: text/html\n\n" 
print "Python Script Test Page" 

Apache + CGI

  • CGI по умолчанию присутствует почти в любой компиляции Apache, достаточно его включить:
$ sudo a2enmod cgi
  • Если необходимо изменить директорию для хранения cgi-скриптов с /var/www/cgi-bin/, создаем файл /etc/httpd/conf.d/cgi-enabled.conf с настройками:
Options +ExecCGI
AddHandler cgi-script .cgi .pl

  • Если на сервере включен SELinux, то также потребуется скорректировать права для доступа к этой директории:
$ sudo chcon -R -t httpd_sys_script_exec_t /var/www/html/cgi-enabled 
$ sudo semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled 
  • Для применения настроек перезапускаем веб-сервер:
$ sudo systemctl restart httpd
  • Пример скрипта /var/www/html/cgi-enabled/index.py, результат работы которого будет доступен по ссылке http://domain.ru/cgi-enabled/index.py: 
 #!/usr/bin/env python

print "Content-type: text/html\n\n" 
print "Python Script Test Page" 

Node.JS

Node.JS — ПО, позволяющее скриптам на языке JavaScript взаимодействовать с устройствами ввода-вывода через свой API. Используется для создания веб-сервера, процесс которого постоянно запущен на машине в ожидании запросов.

Так как разработка принципов работы веб-сервера в данном случае полностью зависит от поставленной задачи, рассмотрим только процесс установки ПО.

Debian/Ubuntu

  • Загружаем дистрибутив:
$ wget https://nodejs.org/dist/v4.2.3/node-v4.2.3-linux-x64.tar.gz
  • Создаем директорию node и распаковываем содержимое архива:
$ mkdir node
$ tar xvf node-v*.tar.?z --strip-components=1 -C ./node
  • Создаем директорию node/etc:
$ mkdir node/etc
  • Размещаем ПО в директории /opt/node:
$ echo 'prefix=/usr/local' > node/etc/npmrc
$ mv node /opt/
$ chown -R root: /opt/node
  • Создаем символьные ссылки:
$ ln -s /opt/node/bin/node /usr/local/bin/node
$ ln -s /opt/node/bin/npm /usr/local/bin/npm

Далее установка модулей осуществляется с помощью npm.

CentOS

  • Устанавливаем репозиторий EPEL:
$ sudo yum install epel-release
  • Обновляем список доступных пакетов:
$ yum update
  • Устанавливаем ПО:
$ sudo yum install nodejs
  • Проверяем версию:
$ node --version
v0.10.30
  • Устанавливаем менеджер пакетов:
$ sudo yum install npm

Далее установка модулей осуществляется с помощью npm.


Была ли эта инструкция полезной?