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

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

• 5 min read • DevOps • Обновлено 28 Nov 2025
Apache mod_wsgi на Ubuntu 22.04 — установка и настройка
Apache mod_wsgi на Ubuntu 22.04 — установка и настройка

Схема развертывания Python-приложения через mod_wsgi

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.

Быстрый план (методология)

  1. Обновить систему.
  2. Установить Apache и пакет libapache2-mod-wsgi-py3.
  3. Создать WSGI-скрипт в веб‑корне.
  4. Настроить виртуальный хост: добавить WSGIScriptAlias.
  5. Перезапустить Apache и проверить работу по адресу /wsgi.

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

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

sudo apt update -y  
sudo apt upgrade -y

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

Установка Python

По умолчанию Python 3 уже установлен в Ubuntu 22.04. Если на вашей системе Python отсутствует, установите его так:

sudo apt install python3 libexpat1 -y

Вывод команды установки Python: python3 уже установлен

Установка 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‑скрипта

Откройте браузер и перейдите по адресу:

http://your-server-ip/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):

  1. Включить maintenance page.
  2. Вылить код на сервер.
  3. Активировать virtualenv и установить зависимости.
  4. Проверить права на файлы.
  5. Рестартнуть Apache.
  6. Выполнить smoke‑test по /wsgi и основным URL.

Устранение неполадок и откат (runbook)

Сценарий: Пустая страница или 500 Internal Server Error

  1. Просмотрите логи Apache:
sudo tail -n 200 /var/log/apache2/error.log
  1. Проверьте права файла и владельца:
ls -l /var/www/html/wsgitest.py
  1. Проверьте синтаксис Python и отсутствие ошибок импорта в требуемом окружении.
  2. Если используете 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 и следите за логами.

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

Поделиться: 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 быстро