Режим обработчика 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>