Гид по технологиям

Установка mod_wsgi с Apache на Ubuntu 20.04

• 4 min read • Серверы • Обновлено 22 Nov 2025
mod_wsgi с Apache на Ubuntu 20.04
mod_wsgi с Apache на Ubuntu 20.04

Изображение: сервер Apache и модуль mod_wsgi

mod_wsgi — это модуль Apache, который позволяет запускать Python‑веб‑приложения под Apache. Подходит как для производственных сайтов с высокой нагрузкой, так и для персональных сайтов. С помощью mod_wsgi можно разворачивать приложения на Django, Flask, Web.py, Werkzeug, CherryPy, TurboGears и других фреймворках.

Кому полезно

  • Сисадминам, которые хотят запускать Python‑приложения внутри Apache.
  • Разработчикам, которым нужно быстро протестировать WSGI‑скрипт через Apache.

Предварительные требования

  • Сервер с Ubuntu 20.04.
  • Доступ root или пользователь с sudo.
  • Базовые навыки работы с терминалом и редактором (nano/vi).

Важно: в рабочем окружении рекомендуется использовать виртуальное окружение Python и запускать приложение от непользовательского аккаунта (например, www‑data). Включите HTTPS для публичных сервисов.

Обновление системы

Перед началом обновите пакеты:

sudo apt-get update -y
sudo apt-get upgrade -y

Перезапустите систему при необходимости, чтобы применить обновления.

Установка Python

Ubuntu 20.04 обычно поставляется с Python 3. Если по какой‑то причине Python не установлен, установите его так:

sudo apt-get install python3 libexpat1 -y

Для развёртывания приложений в продакшене используйте virtualenv или venv:

python3 -m venv /opt/myapp/venv
source /opt/myapp/venv/bin/activate
pip install --upgrade pip

Установка Apache и mod_wsgi

Установите Apache и модуль WSGI. В большинстве случаев для Python 3 нужен пакет libapache2-mod-wsgi-py3:

sudo apt-get install apache2 apache2-utils ssl-cert libapache2-mod-wsgi-py3 -y

Примечание: в старых руководствах встречается libapache2-mod-wsgi (для Python 2). Для Ubuntu 20.04 используйте вариант для Python 3.

После установки можно продолжить конфигурацию.

Быстрая тестовая страница через mod_wsgi

Создадим простой WSGI‑скрипт в корне веб‑сайта Apache:

sudo nano /var/www/html/wsgi.py

Добавьте в файл следующий код (корректный минимальный WSGI‑приложение):

def application(environ, start_response):
    status = '200 OK'
    html = '\n' \
           '\n' \
           '\n' \
           '
\n' \ 'Welcome to mod_wsgi Test Page\n' \ '
\n' \ '\n' \ '\n' response_header = [('Content-Type', 'text/html; charset=utf-8')] start_response(status, response_header) return [html.encode('utf-8')]

Сохраните файл и измените владельца на www‑data:

sudo chown www-data:www-data /var/www/html/wsgi.py

Создайте конфигурацию Apache для привязки WSGI‑скрипта к пути /wsgi:

sudo nano /etc/apache2/conf-available/wsgi.conf

Добавьте строку:

WSGIScriptAlias /wsgi /var/www/html/wsgi.py

Сохраните файл, включите конфигурацию и перезапустите Apache:

sudo a2enconf wsgi
sudo systemctl restart apache2

Теперь откройте в браузере http://your-server-ip/wsgi — вы должны увидеть тестовую страницу.

Скриншот: тестовая страница mod_wsgi в браузере

Рекомендации по безопасности и производительности

Важно: базовая конфигурация подходит для тестов. Для реальных приложений используйте демонический режим mod_wsgi, настройте права и включите HTTPS.

Пример безопасной конфигурации виртуального хоста с WSGIDaemonProcess:


    ServerName example.com

    WSGIDaemonProcess myapp python-home=/opt/myapp/venv python-path=/opt/myapp
    WSGIProcessGroup myapp
    WSGIScriptAlias / /opt/myapp/myapp/wsgi.py

    
        Require all granted
    

    ErrorLog ${APACHE_LOG_DIR}/myapp-error.log
    CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined

Что важно сделать:

  • Использовать WSGIDaemonProcess и WSGIProcessGroup для изоляции процессов.
  • Запускать процессы от непривилегированного пользователя (указанного в WSGIDaemonProcess).
  • Настроить права доступа так, чтобы только Apache мог читать код и файлы конфигурации.
  • Включить HTTPS (Let’s Encrypt / certbot) для публичных сервисов.
  • Отключить индексирование директорий и лишние модули Apache.

Альтернативные подходы

Если вам нужна лучшая масштабируемость или контейнеризация, рассмотрите альтернативы:

  • Gunicorn + systemd + Nginx в качестве обратного прокси — часто проще отлаживать и масштабировать.
  • uWSGI + Emperor + Nginx — мощный стек с множеством настроек.
  • Запуск в контейнерах (Docker) с orchestration (Kubernetes) для микросервисной архитектуры.

mod_wsgi хорош для тех, кто хочет держать всё внутри Apache и минимизировать число компонентов.

Тесты и критерии приёмки

Критерии приёмки для базовой установки:

  • Apache установлен и активен (systemctl status apache2).
  • Пакет libapache2-mod-wsgi-py3 установлен.
  • URL http://your-server-ip/wsgi возвращает 200 OK и корректный HTML.
  • Логи Apache не содержат ошибок, связанных с загрузкой WSGI‑скрипта.

Мини‑тесты:

  • curl -I http://your-server-ip/wsgi — ответ 200 и Content-Type text/html.
  • Проверить владелец файла: ls -l /var/www/html/wsgi.py -> www-data:www-data.

Типичные проблемы и как их решать

  • 500 Internal Server Error — смотрите /var/log/apache2/error.log для деталей.
  • ModuleNotFoundError — убедитесь, что приложение запускается в том же виртуальном окружении, что и модуль mod_wsgi (python-home в WSGIDaemonProcess).
  • Неправильный пакет mod_wsgi — используйте libapache2-mod-wsgi-py3 для Python 3.

Чеклист по ролям

Для системного администратора:

  • Установить Apache и модуль WSGI.
  • Настроить службы, логи и ротацию логов.
  • Настроить брандмауэр (ufw allow ‘Apache Full’) и HTTPS.

Для разработчика:

  • Подготовить WSGI‑файл и virtualenv.
  • Проверить локально приложение через gunicorn/uWSGI.
  • Настроить переменные окружения и секреты вне кода.

Для владельца продукта:

  • Определить SLA и требования ко времени отклика.
  • Решить стратегию бэкапов и мониторинга.

Короткий глоссарий

  • WSGI — интерфейс между веб‑сервером и Python‑приложением.
  • mod_wsgi — модуль Apache, реализующий WSGI.
  • WSGIDaemonProcess — директива для изолированного процесса WSGI.
  • virtualenv / venv — инструмент для изоляции зависимостей Python.

Заключение

Вы успешно настроили базовую интеграцию mod_wsgi и Apache на Ubuntu 20.04 и протестировали простое WSGI‑приложение. Для продакшн‑окружения используйте демонический режим mod_wsgi, виртуальное окружение, HTTPS и строгие права доступа. Рассмотрите альтернативы (Gunicorn/uWSGI + Nginx) для более гибкого масштабирования.

Важно: выбор между mod_wsgi и внешними WSGI‑серверами зависит от требований к масштабируемости, управляемости и окружению развёртывания.

Сводка — что сделать далее:

  • Перенести приложение в виртуальное окружение.
  • Настроить WSGIDaemonProcess с нужным пользователем и python-home.
  • Настроить HTTPS с certbot и обеспечить бэкапы логов.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро