/
/
Режим обработчика Python WSGI (Apache + Python)

Режим обработчика Python WSGI (Apache + Python)

Для использования обработчика Python в режиме WSGI (Apache + Python), потребуется создать шаблон пользователя, а также изменить шаблон конфигурационных файлов Apache в ispmanager 6.

Установка и настройка модуля

Работа режиме выполняется через модуль Phusion Passenger. Установите пакет модуля:

apt-get install -y libapache2-mod-passenger

Для RHEL-based систем перед установкой требуется установить cURL и подключить репозиторий Phusion Passanger:

dnf install curl
curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo

После выполните установку модуля:

dnf install mod_passenger

Теперь необходимо отключить модуль в основной конфигурации Apache, в противном случае модуль сразу после установки начнет сканировать корневые директории всех сайтов на наличие файла passenger_wsgi.py:

cat > /etc/apache2/conf-available/passenger-global-off.conf << 'EOF'
<IfModule mod_passenger.c>
PassengerEnabled off
</IfModule>
EOF

a2enconf passenger-global-off
systemctl reload apache2
cat > /etc/httpd/conf.d/passenger-global-off.conf << 'EOF'
<IfModule mod_passenger.c>
PassengerEnabled off
</IfModule>
EOF

systemctl reload httpd

Настройки шаблонов в панели

Создайте отдельный шаблон пользователей, которые смогу использовать обработчик Python в режиме ApachePassenger (Apache + Python), назвав его custompython.

Если вы не используете собственный шаблоны Apache в шаблонизаторе конфигурационных файлов, создайте их:

cp -ar /usr/local/mgr5/etc/templates/default/apache2-vhosts.template /usr/local/mgr5/etc/templates/ 
cp -ar /usr/local/mgr5/etc/templates/default/apache2-vhosts-ssl.template /usrlocal/mgr5/etc/templates/

В ином случае, вносите следующие изменения в уже существующие шаблоны /usr/local/mgr5/etc/templates/apache2-vhosts.template и /usr/local/mgr5/etc/templates/apache2-vhosts-ssl.template.

Изменение корневой директории

Замените строку

DocumentRoot [% $DOCROOT %]

на блок

{% if $PRESET == custompython %}
	DocumentRoot [% $DOCROOT %]/public
{% else %}
	DocumentRoot [% $DOCROOT %]
{% endif %}

Добавление конфигурации Passenger

Замените блок

{% if $PYTHON_MODE == python_mode_cgi %}
	ScriptAlias /python-bin/ [% $PYTHON_BIN_DIR %]
	AddHandler application/x-httpd-python .py
	Action application/x-httpd-python /python-bin/python
	<FilesMatch "\.py$">
		SetHandler application/x-httpd-python
	</FilesMatch>
{% endif %}

на блок

{% if $PYTHON_MODE == python_mode_cgi %}
{% if $PRESET == custompython %}
        PassengerEnabled on
        PassengerFriendlyErrorPages off
        PassengerAppType wsgi
        PassengerStartupFile passenger_wsgi.py
        PassengerAppRoot {% $DOCROOT %}
        PassengerPython {% $DOCROOT %}/.venv/bin/python3
{% else %}
        ScriptAlias /python-bin/ [% $PYTHON_BIN_DIR %]
        AddHandler application/x-httpd-python .py
        Action application/x-httpd-python /python-bin/python
        <FilesMatch "\.py$">
                SetHandler application/x-httpd-python
        </FilesMatch>
{% endif %}
{% endif %}

Проверка работы модуля

Сначала потребуется создать нового пользователя панели, к которому должен быть применен шаблон custompython. Во вкладке Доступ разрешите пользователю использовать Python.

Затем создайте сайт с обработчиком Python+CGI для созданного ранее пользователя: конфигурация сайта для работы Python в режиме WSGI (Apache + Python) будет сгенерирована автоматически.

Создайте тестовое окружение для проверки конфигурации:

cd /var/www/<имя_пользователя>/data/www/<имя_сайта>
python3 -m venv .venv
.venv/bin/pip install flask

Создайте в корневом каталоге сайта файл passenger_wsgi.py со следующим содержимым:

import sys, os
sys.path.insert(0, os.path.dirname(__file__))
from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "Totally by ispmanager through $PRESET! Python: " + sys.version

Файл passenger_wsgi.py должен располагаться в коренвой директории сайта, а статичные файлы - в подкаталоге public.

Если всё настроено корректно, то при открытии сайта в браузере будет выведено следующее сообщение:

Totally by ispmanager through custompython! Python <версия_python>