conda - менеджер пакетов и для создания виртуальной среды для размещения вашего приложения на Python (например, для развертывания модели машинного обучения)
Flask - фреймворк для использования кода Python в качестве конечной точки API.
apache - интерфейсный веб-сервер, который будет обслуживать API.
mod_wsgi - пакет, который предоставляет модуль Apache, реализующий WSGI-совместимый интерфейс для размещения веб-приложений на основе Python поверх веб-сервера Apache.
Здесь мы настроим 3 примера приложений python-flask и 3 различных виртуальных среды conda. Каждое приложение будет иметь коннектор шлюза wsgi, обращающийся к нему и вызывающий приложение в нем. Затем Apache будет настроен для обращения к их соответствующим средам conda и запуска каждого приложения в одной среде и обслуживания всех из них по разным URL-адресам.
Предпосылки установки:
Есть два способа настроить mod_wsgi в конфигурации apache.
- Установите его как модуль apache напрямую и обслуживайте приложения в нескольких виртуальных средах conda / python.
- Установите и скомпилируйте его как модуль python в виртуальных средах conda / python отдельно и настройте apache для его использования.
Мы сосредоточимся на первом методе, так как он лучше всего рекомендуется для производственных сред и прост в настройке нескольких приложений, поскольку он будет доступен во всем мире.
Предварительные условия:
Установите apache и miniconda. Вы можете следить за моим постом здесь.
Установите mod_wsgi:
Здесь мы устанавливаем соответствующий пакет mod_wsgi для python 3.6.
Установите и включите соответствующий модуль apache. Вы можете найти точную версию модуля, соответствующую вашему дистрибутиву ОС, на сайте ниже.
Https://packages.ubuntu.com/bionic/libapache2-mod-wsgi-py3
(base)~/Python-3.6.5/flaskproject$ sudo apt-get install libapache2-mod-wsgi-py3 Unpacking libapache2-mod-wsgi-py3 (4.3.0-1.1build1) ... Setting up libapache2-mod-wsgi-py3 (4.3.0-1.1build1) ... apache2_invoke: Enable module wsgi (TestEnv)~/Python-3.6.5/flaskproject$ sudo a2enmod wsgi Module wsgi already enabled
Проверьте версию пакета и соответствующую информацию, чтобы убедиться, что он включен.
(base)/etc/apache2/mods-enabled$ apt-cache show libapache2-mod-wsgi-py3 Package: libapache2-mod-wsgi-py3 Priority: optional Section: universe/httpd Installed-Size: 243 Maintainer: Ubuntu Developers <[email protected]> Original-Maintainer: Debian Python Modules Team <[email protected]> Architecture: amd64 Source: mod-wsgi Version: 4.3.0-1.1build1 Provides: httpd-wsgi Depends: libc6 (>= 2.14), libpython3.5 (>= 3.5.0~b1), apache2-api-20120211, apache2-bin (>= 2.4.16), python3 (>= 3.5), python3 (<< 3.6) (base) ~$ sudo apachectl -M | grep wsgi wsgi_module (shared)
Создание сред Conda:
Создайте несколько сред conda с помощью flask. Вы также можете установить дополнительные пакеты с файлом environment.yml.
(base) ~$ conda create -n app1_env python=3.6 flask Collecting package metadata (current_repodata.json): done Solving environment: done . . ## Package Plan ## environment location: /home/ubuntu/miniconda3/envs/app1_env added / updated specs: - flask - python=3.6
Проверьте среды и их соответствующие каталоги.
(base) $ conda env list # conda environments: base * /home/ubuntu/miniconda3 app1_env /home/ubuntu/miniconda3/envs/app1_env app2_env /home/ubuntu/miniconda3/envs/app2_env app3_env /home/ubuntu/miniconda3/envs/app3_env
Настройте приложения:
Настройте каталоги приложений в корне документа Apache ‘/ var / www / html’.
(base)/var/www/html$ ls -lrth total 40K -rw-r--r-- 1 root root 12K Sep 18 09:47 index.html drwxr-xr-x 2 root root 4.0K Sep 25 09:42 app1 drwxr-xr-x 2 root root 4.0K Sep 25 09:42 app2 drwxr-xr-x 2 root root 4.0K Sep 25 09:42 app3
Здесь мы настраиваем образец приложения Python в каждом из каталогов.
(base)/var/www/html/app1$ ls -lrth total 8.0K -rwxr-xr-x 1 root root 129 Sep 25 09:42 wsgi.py -rw-r--r-- 1 root root 102 Sep 25 09:42 sample.py
Это содержимое примера приложения hello world. Мы создадим эти файлы во всех трех каталогах приложений как «Hello World, from app1 / 2/3» соответственно.
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World, from app1."
Создайте файл коннектора wsgi.py, который будет импортировать коннектор flask из sample.py. Убедитесь, что вы настроили системный путь для каталога приложения.
import sys sys.path.insert(0, "/var/www/html/app1") from sample import app as application
Настроить apache:
Откройте файл конфигурации apache.
(base)/etc/apache2/sites-enabled$ sudo vi 000-default.conf
Добавьте ниже конфигурацию для каждого приложения. Это специфические директивы mod_wsgi. Добавьте их в раздел ‹/VirtualHost›. Обратите внимание на путь ‘WSGIScriptAlia, он будет определять URL-адреса для каждого приложения. Еще одна вещь, которую необходимо обеспечить, - это переменная «python-path» в директиве «WSGIDaemonProcess». Этот параметр будет указывать среду conda для каждого приложения.
WSGIDaemonProcess app1 python- path=/home/ubuntu/miniconda3/envs/app1_env/lib/python3.6/site-packages WSGIScriptAlias /app1 /var/www/html/app1/wsgi.py <Directory /var/www/html/app1> WSGIProcessGroup app1 WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory> WSGIDaemonProcess app2 python-path=/home/ubuntu/miniconda3/envs/app2_env/lib/python3.6/site-packages WSGIScriptAlias /app2 /var/www/html/app2/wsgi.py <Directory /var/www/html/app2> WSGIProcessGroup app2 WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory> </VirtualHost>
Убедитесь, что в конфигурации apache есть ошибки.
(base)/etc/apache2/sites-enabled$ sudo apachectl -t Syntax OK
Изящно перезагрузите демон apache и протестируйте сайт.
http:<Your IP>:80/app1 http:<Your IP>:80/app2 http:<Your IP>:80/app3
Вот как мы можем настроить несколько флеш-приложений на apache с помощью mod_wsgi. Это очень важный сценарий использования для размещения API-интерфейсов модели машинного обучения для разных моделей на flask и apache.
Подпишитесь на нас в Twitter 🐦 и Facebook 👥 и присоединитесь к нашей группе Facebook 💬 .
Чтобы присоединиться к нашему сообществу Slack 🗣️ и читать наши еженедельные темы о Фавнах 🗞️, нажмите здесь⬇