Установка и настройка Apache mod_wsgi на Ubuntu 22.04

Apache модуль mod_wsgi предоставляет интерфейс для размещения Python‑веб‑приложений. Это надёжный выбор для профессионального хостинга: он даёт высокую производительность и остаётся удобным для небольших сайтов. mod_wsgi упрощает развёртывание приложений на Django, Flask, Web.py, Werkzeug, CherryPy, TurboGears и других фреймворков.
В этом руководстве показано, как установить и настроить mod_wsgi с Apache на Ubuntu 22.04 LTS. Инструкция обновлена по сравнению с руководством для Ubuntu 20.04.
Что нужно перед началом
- Сервер или рабочая станция с Ubuntu 22.04 (Server или Desktop).
- У вас должны быть права администратора: root или sudo.
Быстрый план (методология)
- Обновить систему.
- Установить Apache и пакет libapache2-mod-wsgi-py3.
- Создать WSGI-скрипт в веб‑корне.
- Настроить виртуальный хост: добавить WSGIScriptAlias.
- Перезапустить Apache и проверить работу по адресу /wsgi.
Обновление системы
Перед началом обновите пакеты:
sudo apt update -y
sudo apt upgrade -yПосле обновления рекомендуется перезагрузить систему, чтобы все изменения вступили в силу.
Установка Python
По умолчанию Python 3 уже установлен в Ubuntu 22.04. Если на вашей системе Python отсутствует, установите его так:
sudo apt install python3 libexpat1 -y
Установка Apache и mod_wsgi
Установите Apache и модуль WSGI для Python 3:
sudo apt install apache2 apache2-utils ssl-cert libapache2-mod-wsgi-py3 -yПосле установки пакетов вы готовы к настройке Apache.
Создание простого WSGI‑приложения
Для проверки создадим минимальный «Hello World» WSGI‑скрипт и разместим его в корне веб‑сайта.
Откройте редактор и создайте файл:
sudo nano /var/www/html/wsgitest.pyВставьте содержимое:
def application(environ, start_response):
status = '200 OK'
output = b'Hello Howtoforge!\n'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]Сохраните и закройте файл.
Измените владельца и права, чтобы Apache мог читать и (при необходимости) исполнять файл:
sudo chown www-data:www-data /var/www/html/wsgitest.py
sudo chmod 775 /var/www/html/wsgitest.pyВажно: держите код приложения вне доступных из веба директорий или ограничьте доступ, если скрипт содержит секреты.
Настройка виртуального хоста Apache
Откройте файл виртуального хоста по умолчанию:
sudo nano /etc/apache2/sites-enabled/000-default.confДобавьте строку WSGIScriptAlias, чтобы сопоставить URL с файлом WSGI. Добавьте её прямо перед закрывающим :
WSGIScriptAlias /wsgi /var/www/html/wsgitest.pyПример содержимого файла (фрагмент):
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
WSGIScriptAlias /wsgi /var/www/html/wsgitest.pyСохраните изменения и закройте редактор.
Перезапуск Apache
Примените конфигурацию:
systemctl restart apache2Проверьте статус сервера:
systemctl status apache2Тестирование WSGI‑скрипта
Откройте браузер и перейдите по адресу:
Замените your-server-ip на IP вашего сервера. Вы должны увидеть белую страницу с текстом “Hello Howtoforge!”.
Если вы видите ошибку 500 или пустую страницу — смотрите раздел «Устранение неполадок» ниже.
Развёртывание реального приложения
Перенесите код вашего приложения в каталог вроде /var/www/html/ или в отдельный каталог вне DocumentRoot и настройте WSGIScriptAlias на точку входа (файл, где определяется callable application или аналог).
Рекомендации:
- Для изоляции используйте virtualenv или venv и указывайте в WSGI‑скрипте путь к окружению.
- Для многопроцессного или многопоточного выполнения настройте WSGIDaemonProcess и WSGIProcessGroup (см. документацию mod_wsgi).
- Держите секреты вне репозитория и в конфигурации окружения.
Безопасность и жёсткая конфигурация
- Включите HTTPS (LetsEncrypt) для публичных сайтов.
- Запускайте приложение под ограниченной учётной записью (www-data или специальный пользователь).
- Ограничьте права на файлы: не давайте записи всем пользователям.
- Размещайте виртуальное окружение и зависимости вне DocumentRoot.
Роли и чек-листы
Администратор (системный инженер):
- Обновить пакеты и перезагрузить систему.
- Установить Apache и libapache2-mod-wsgi-py3.
- Настроить виртуальные хосты и права.
- Включить HTTPS и настроить брандмауэр (ufw).
Разработчик (Dev):
- Подготовить WSGI-подходящий точка входа (callable application).
- Собрать зависимости в venv и задокументировать версии в requirements.txt.
- Протестировать локально перед деплоем.
Операции по развёртыванию (SOP):
- Включить maintenance page.
- Вылить код на сервер.
- Активировать virtualenv и установить зависимости.
- Проверить права на файлы.
- Рестартнуть Apache.
- Выполнить smoke‑test по /wsgi и основным URL.
Устранение неполадок и откат (runbook)
Сценарий: Пустая страница или 500 Internal Server Error
- Просмотрите логи Apache:
sudo tail -n 200 /var/log/apache2/error.log- Проверьте права файла и владельца:
ls -l /var/www/html/wsgitest.py- Проверьте синтаксис Python и отсутствие ошибок импорта в требуемом окружении.
- Если используете virtualenv, убедитесь, что WSGI‑скрипт добавляет путь к окружению и активирует его.
Откат конфигурации
- Если новая конфигурация не работает, восстановите резервную копию /etc/apache2/sites-enabled/000-default.conf и выполните
systemctl restart apache2.
Кому не подойдёт mod_wsgi (критерии отказа)
- Если вы хотите гибкое автошкалиуемое решение с лёгким балансировщиком процессов — рассматривайте Gunicorn/uvicorn + nginx или контейнеризацию (Docker/Kubernetes).
- Если приложение требует асинхронного сервера на уровне протокола (например, WebSocket), mod_wsgi не самый подходящий выбор; предпочитайте ASGI‑серверы (uvicorn, daphne).
Альтернативы и сравнение (кратко)
- mod_wsgi + Apache: хорош для интеграции с существующим Apache, прост в управлении на традиционных хостингах.
- Gunicorn/uvicorn + nginx: больше гибкости и часто лучше подходит для контейнерных/облачных сценариев.
- uWSGI + nginx: мощный, но более сложен в конфигурации.
Краткая таблица соответствия
- Простой статический «Hello World»: mod_wsgi подходит.
- Высокая асинхронная нагрузка и WebSocket: выбрать ASGI (uvicorn).
- Контейнерная инфраструктура: часто лучше Gunicorn/uvicorn + nginx.
Факто-бокс
- ОС: Ubuntu 22.04 LTS.
- Пакет: libapache2-mod-wsgi-py3.
- Файл примера: /var/www/html/wsgitest.py.
- Конфигурация виртуального хоста: /etc/apache2/sites-enabled/000-default.conf.
Глоссарий (1 строка)
- WSGI: интерфейс между Python‑веб‑приложением и веб-сервером.
- mod_wsgi: модуль Apache для запуска Python‑приложений через WSGI.
- VirtualHost: конфигурация виртуального хоста Apache.
Скачать как виртуальную машину
Этот набор доступен как виртуальная машина в форматах ova/ovf (совместим с VMWare и VirtualBox) для подписчиков howtoforge.
Данные для входа в VM
- Имя пользователя: ‘admininstrator’
- Пароль: ‘howtoforge’
Пользователь имеет sudo‑права. Обязательно смените все пароли при первом входе.
- IP виртуальной машины: 192.168.0.100
Краткое резюме
- mod_wsgi на Apache — рабочее и производительное решение для множества Python‑приложений.
- Для развёртывания: обновите систему, установите пакеты, создайте WSGI‑скрипт, добавьте WSGIScriptAlias и перезапустите Apache.
- Для продакшена добавьте virtualenv, настройте права, включите HTTPS и следите за логами.
Важно: всегда тестируйте изменения на тестовой среде и делайте резервные копии конфигураций перед изменениями.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента