Как настроить переменную окружения обработчика WSGI для Django в IIS?

Что такое WSGI и зачем он нужен для Django?

WSGI (Web Server Gateway Interface) – это стандартный интерфейс между веб-серверами и Python-приложениями, в том числе Django. Он позволяет вашему Django-приложению взаимодействовать с веб-сервером, таким как IIS (Internet Information Services). Без WSGI веб-сервер не сможет понять, как обрабатывать Python-код вашего приложения.

Обзор IIS как веб-сервера для Django-приложений

IIS – это веб-сервер, разработанный Microsoft. Хотя традиционно IIS ассоциируется с ASP.NET, он вполне пригоден для хостинга Django-приложений с использованием WSGI. Преимущества использования IIS включают интеграцию с Windows Server, простоту настройки (после освоения) и надежность.

Почему важна правильная настройка переменных окружения?

Переменные окружения предоставляют конфигурационную информацию вашему Django-приложению во время выполнения. Неправильно настроенные переменные, такие как PYTHONPATH и DJANGO_SETTINGS_MODULE, могут привести к тому, что приложение не сможет найти необходимые модули или файл настроек, что вызовет ошибки и сбои.

Необходимые компоненты и подготовка среды

Установка Python и Django

Убедитесь, что у вас установлен Python. Рекомендуется использовать последнюю стабильную версию. Django можно установить с помощью pip:

pip install django

Рекомендуется использовать виртуальное окружение для каждого проекта Django. Создайте и активируйте виртуальное окружение:

python -m venv venv
venv\Scripts\activate  # В Windows
source venv/bin/activate # В Linux/macOS

Установка и настройка IIS (Internet Information Services)

IIS устанавливается через панель управления Windows: «Панель управления» -> «Программы» -> «Включение или отключение компонентов Windows». Включите «Службы IIS» и все необходимые компоненты, такие как «CGI» в разделе «Службы приложений». Перезагрузите сервер после установки.

Установка и настройка wfastcgi (WSGI Handler для IIS)

wfastcgi – это расширение IIS, которое позволяет запускать Python-приложения WSGI. Установите его через pip:

pip install wfastcgi

После установки, зарегистрируйте wfastcgi в IIS. Перейдите в директорию, где установлен Python (например, C:\Program Files\Python39) и выполните:

python wfastcgi.py --install

Настройка переменных окружения WSGI в IIS

Определение необходимых переменных окружения (PYTHONPATH, DJANGOSETTINGSMODULE)

  • PYTHONPATH: Указывает Python, где искать модули. Обычно содержит путь к вашему проекту Django и виртуальному окружению.
  • DJANGO_SETTINGS_MODULE: Указывает Django, какой файл настроек использовать. Обычно это your_project.settings.

Настройка переменных окружения через GUI IIS Manager

  1. Откройте IIS Manager (выполните inetmgr в командной строке).
  2. Выберите ваш веб-сайт в левой панели.
  3. Дважды щелкните на «Application Settings».
  4. Добавьте переменные окружения PYTHONPATH и DJANGO_SETTINGS_MODULE с соответствующими значениями.

Настройка переменных окружения через web.config

Переменные окружения также можно настроить в файле web.config. Этот метод позволяет хранить конфигурацию вместе с вашим приложением. Пример будет показан ниже, в разделе «Конфигурация web.config для Django».

Конфигурация web.config для Django

Пример минимальной конфигурации web.config

Вот пример минимального файла web.config:

Реклама
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\path\to\your\venv\Scripts\python.exe|C:\path\to\your\venv\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <match url="(.*\.css$|.*\.js$|.*\.gif$|.*\.jpg$|.*\.png$)" ignoreCase="true" />
          <action type="Rewrite" url="static/{R:1}" appendQueryString="false" />
        </rule>
        <rule name="Configure Django" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <action type="Rewrite" url="index.wsgi/{R:1}" />
        </rule>
      </rules>
    </rewrite>
    <security>
        <requestFiltering>
            <hiddenSegments>
                <add segment="index.wsgi" />
            </hiddenSegments>
        </requestFiltering>
    </security>
    <httpErrors errorMode="Detailed" />
  </system.webServer>
  <appSettings>
    <add key="PYTHONPATH" value="C:\path\to\your\project" />
    <add key="DJANGO_SETTINGS_MODULE" value="your_project.settings" />
  </appSettings>
</configuration>

Замените C:\path\to\your\venv и C:\path\to\your\project на соответствующие пути к вашему виртуальному окружению и проекту Django.

Разъяснение ключевых параметров в web.config

  • <handlers>: Определяет обработчик для Python-приложения. scriptProcessor указывает на интерпретатор Python и скрипт wfastcgi.py.
  • <rewrite>: Используется для перенаправления всех запросов к вашему Django-приложению. В данном примере, все запросы перенаправляются на index.wsgi.
  • <appSettings>: Содержит переменные окружения, такие как PYTHONPATH и DJANGO_SETTINGS_MODULE. IIS автоматически устанавливает эти переменные для вашего приложения.

Настройка статических файлов (CSS, JavaScript, изображения)

Статические файлы не обрабатываются Django напрямую. IIS должен обслуживать их напрямую. В web.config используется правило rewrite, которое перенаправляет запросы к статическим файлам в директорию static. Убедитесь, что вы выполнили команду python manage.py collectstatic и поместили статические файлы в директорию static внутри вашего проекта.

Устранение неполадок и распространенные ошибки

Ошибка: ‘The WSGI application could not be loaded’

Эта ошибка обычно указывает на проблемы с путем к WSGI-скрипту или проблемами в самом скрипте. Проверьте путь к index.wsgi в web.config и убедитесь, что в скрипте нет синтаксических ошибок.

Ошибка: ‘ImportError: No module named django.core.wsgi’

Эта ошибка означает, что Python не может найти модуль django.core.wsgi. Убедитесь, что PYTHONPATH настроен правильно и указывает на директорию с Django.

Проверка правильности настроек переменных окружения

Вы можете проверить значения переменных окружения, распечатав их в вашем Django-приложении. Например, в views.py:

import os
from django.http import HttpResponse

def my_view(request):
    path = os.environ.get('PYTHONPATH', 'Not found')
    settings = os.environ.get('DJANGO_SETTINGS_MODULE', 'Not found')
    return HttpResponse(f'PYTHONPATH: {path}<br>DJANGO_SETTINGS_MODULE: {settings}')

Советы по отладке и логированию WSGI приложений в IIS

  • Включите подробные сообщения об ошибках в IIS (в web.config установите httpErrors errorMode="Detailed").
  • Используйте логирование в вашем Django-приложении для записи информации об ошибках и исключениях. Например, можно использовать встроенный модуль logging в Python.
  • Проверьте логи IIS для поиска дополнительных сведений об ошибках. Логи находятся в директории %SystemDrive%\inetpub\logs\LogFiles.

Добавить комментарий