Установка Django на IIS: пошаговое руководство

Опубликовано: 2022-03-11

Хотя многие разработчики Django могут счесть это кощунством, иногда действительно необходимо развертывать приложения Django в Windows/IIS, особенно при работе с клиентом, инфраструктура которого основана на экосистеме Windows. Часть «богохульства» исходит из того, что Django действительно был нацелен на среду Unix, в значительной степени полагаясь на такие функции, как WSGI, FastCGI и инструменты командной строки, которые чужды Windows. К счастью, совместимость Django/IIS улучшается благодаря добавлению функций (которые в противном случае были бы бесполезными) как для Windows, так и для Python+Django, что помогает решить проблемы совместимости между этими двумя несопоставимыми техническими мирами.

Это короткое целенаправленное руководство проведет вас через базовую настройку проекта Django в Windows. Он охватывает установку Python, Django и связанных с ними инструментов, включая запуск проекта Django как автономно, так и в качестве сервера FastCGI. Кстати, последнее становится все более важным, поскольку IIS теперь официально поддерживает FastCGI (в IIS 7+ просто установите функцию CGI).

Примечание. Это руководство предназначено для тех, кто разбирается в Windows и знаком с консолью управления IIS. В этом руководстве используется версия IIS 8.5, но описания и методы аналогичны более ранним версиям. Учебник основан на Python 2.7 и Django 1.7, поскольку именно эти версии я использую в своих проектах. Вы можете найти еще один учебник по Django здесь.

Совет для профессионалов: если вы собираетесь развернуть несколько проектов Django (или даже простого Python) или если вы являетесь разработчиком, вам следует обратить внимание на virtualenv, инструмент для создания изолированных сред Python.

Установка Python в Windows

Во-первых, скачайте Python. Предоставляются как 32-разрядные, так и 64-разрядные установщики MSI, и вам следует выбрать тот, который подходит для машины, на которую вы устанавливаете.

Основы PIP

PIP — это инструмент, который устанавливает и поддерживает библиотеки Python (одним из примеров которых является Django). Он вызывается запуском команды pip в командной строке. Он реализует несколько подкоманд, и две наиболее полезные из них — это install и Freeze . PIP также установит зависимости проекта (дополнительные библиотеки), если они есть в проекте.

Запуск pip install <package_name> загрузит и установит пакет и все его зависимости (которые могут быть вложенными и довольно сложными). Запуск pip install --upgrade <package_name> аналогичным образом обновит существующий пакет до его самой последней версии. PIP поддерживает специальный синтаксис для установки точных версий пакета вместо «самой последней». Это делается путем добавления оператора и номера версии к имени пакета; например, "Jinja2==2.7.3" (чтобы установить точную версию) или "six>=1.8" (чтобы установить любую версию, равную или превышающую указанный номер версии).

Запуск pip freeze просто показывает список установленных в данный момент пакетов в формате, который непосредственно может использоваться pip install .

Обратите внимание, что некоторые пакеты Python/PIP поставляются с библиотеками, написанными на C, которые должны быть скомпилированы для работы пакета. Если вы не настроите свою систему на работающий компилятор C, который также совместим с исполняемыми файлами Python, вы не сможете установить такие пакеты. Django — это чистая библиотека Python, поэтому для ее установки не требуется компилятор C.

Важно, чтобы вы установили Python 2.7.9 или более позднюю версию, поскольку версии Python, начиная с 2.7.9, включают PIP, менеджер библиотек/пакетов/программ Python, который используется для установки всего остального в этом руководстве.

Процесс установки очень простой и понятный. Он предложит установить Python в каталог C:\Python27 , что вы должны принять, так как впоследствии это облегчит вам жизнь. Старайтесь не поддаваться привычке Windows устанавливать программы в каталоги с пробелами в именах.

Базовый каталог после установки будет содержать около 8 подкаталогов, несколько разных файлов и два исполняемых файла с именами Python.exe и PythonW.exe . Первый является интерпретатором командной строки по умолчанию и оболочкой Python, а второй является только интерпретатором, который не будет использовать (или создавать) окно консоли при вызове и поэтому подходит для запуска приложений Python с графическим интерфейсом.

Далее следует добавить Python в системную переменную окружения PATH. Это делается в Advanced System Settings (или System Properties ), на вкладке Advanced , нажав на кнопку Environment Variables . Необходимо добавить два каталога: C:\Python27 и C:\Python27\Scripts . Они должны быть добавлены к списку PATH, разделенные точкой с запятой ( ; ). Конец вашей переменной PATH должен выглядеть так ;C:\Python27;C:\Python27\Scripts .

Совет для профессионалов: вы также можете установить GOW, облегченную коллекцию утилит командной строки Unix, аналогичную Cygwin. Он предоставит вам такие инструменты, как ls , а также более интересные, такие как make , wget , curl , ssh , scp , gzip и tar .

Установка Джанго в Windows

Django можно установить с помощью PIP с помощью такой команды, как pip install django . Процесс может задействовать некоторые дополнительные зависимости, если их еще нет в вашей системе. В противном случае он просто установит только Django с выводом, подобным следующему:

 Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...

Вы можете проверить, работают ли как Python, так и Django для Windows, запустив новую командную строку Windows, выполнив команду python и введя команду import django в командной строке Python. Если он работает правильно, после команды import django не должно быть вывода или сообщений; то есть:

 Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>

Установка проекта Django в Windows

«Проект» Django состоит из одного или нескольких «приложений». Каталог верхнего уровня проекта обычно содержит один специальный подкаталог проекта, который содержит настройки и некоторую общую информацию об уровне проекта, один подкаталог для каждого приложения и сценарий командной строки с именем manage.py . Например:

 C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free

Проекты Django можно просто распространять, архивируя весь каталог проекта и распаковывая его на другом компьютере. В приведенном выше примере проект содержит подкаталог project , каталог приложения с именем djangoapp и подкаталог вспомогательных templates .

Скрипт manage.py — это «швейцарский армейский нож» приложений Django. Он делает все: от создания новых приложений до миграции баз данных до запуска тестового (встроенного) HTTP-сервера или даже сервера FastCGI.

Запуск тестового HTTP-сервера

Если проект и его приложения работают, вы сможете запустить HTTP-сервер Django по умолчанию только для разработки, выполнив команду manage.py runserver , что должно привести к выводу, подобному следующему:

 C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

Как видно из сообщений, это запускает сервер на локальном хосте, порт 8000. Вы можете сразу получить к нему доступ через свой веб-браузер.

Настройка и запуск сервера FastCGI

Более интересный вариант — включить сервер FastCGI. С FastCGI вы можете использовать IIS, Apache или любой другой веб-сервер для обслуживания приложения в производственных условиях. Чтобы это работало, вам нужно скачать fcgi.py (команда управления Django для запуска Django в Windows с IIS через FastCGI) и поместить ее в подкаталог management/commands приложения Django (не проекта!) Подкаталог. В подкаталогах management и commands должен быть пустой файл с именем __init__.py (который превращает эти каталоги в модули Python).

fcgi.py — это очень простой и минималистичный адаптер WSGI-FastCGI, который не поддерживает прослушивание TCP-сокета или канала и выполняет всю свою обработку с использованием stdin и stdout`. Таким образом, его нельзя использовать с современными веб-серверами, такими как nginx, но он будет работать с IIS.

Настройка IIS для запуска приложения FastCGI

Если модуль FastCGI загружен в IIS (или просто модуль CGI в IIS 7+), в консоли управления IIS будет доступен значок «Настройки FastCGI». Django — это фреймворк, который имеет собственную маршрутизацию URL-адресов, поэтому приложения Django должны быть установлены в качестве «обработчика» в IIS для определенных путей. Чтобы установить приложение Django на веб-сайт IIS по умолчанию , выберите его в консоли управления и откройте функцию настройки сопоставлений обработчиков . В нем нажмите на действие Add Module Mapping… и введите следующую информацию:

  • Путь запроса : установите для него значение \* , чтобы обрабатывать все запросы с внутренней маршрутизацией Django.
  • Модуль : Установите его в FastCgiModule , чтобы использовать модуль FastCGI IIS.
  • Исполняемый файл : здесь необходимо указать как путь к python.exe , так и его аргументы командной строки, используя символ вертикальной черты ( | ) в качестве разделителя. Пример значения этого параметра: C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings . Обратите внимание, что вам нужно указать команду fcgi для сценария manage.py и вручную указать путь поиска интерпретатора Python для проекта, а также имя модуля Python для модуля настроек проекта.
  • Имя : Вы можете установить это как угодно.

Ваш диалог конфигурации должен выглядеть примерно так:

диалоговое окно конфигурации iis

Затем нажмите кнопку Запросить ограничения и отредактируйте вкладку Сопоставление . Снимите флажок «Вызывать обработчик, только если запрос сопоставлен с…» (в противном случае у IIS возникнут проблемы с сопоставлением того, что он считает подкаталогами в запросе URL):

запросить ограничения

Нажмите OK в диалоговом окне информации об обработчике. Затем IIS попросит вас подтвердить создание соответствующей записи приложения FastCGI, которую вам нужно будет подтвердить. Эта запись будет видна в функции настроек FastCGI , доступной на корневом экране консоли управления IIS. Запись по умолчанию, созданная самой IIS, является адекватной, но есть некоторые доступные дополнительные настройки, которыми вы можете воспользоваться:

  • Максимальное количество экземпляров : Подход, который мы используем для запуска приложений FastCGI, является однопроцессным, однопоточным, что означает, что для каждого одновременного запроса будет запускаться отдельный процесс интерпретатора Python. Этот параметр ограничивает количество одновременных экземпляров приложения Django.
  • Мониторинг изменений в файле : по умолчанию после запуска процессы приложения будут активны либо до тех пор, пока не будут закрыты вручную, либо до тех пор, пока они не обработают запросы Instance MaxRequest . Используя этот параметр, IIS будет отслеживать метку времени произвольного файла и, если она изменится, остановит и перезагрузит экземпляры приложения. Это удобно как для разработчиков, так и для производственных сред, поскольку позволяет перезагружать приложения при изменении. «Контролировать метку времени файла для индикатора перезагрузки» — довольно странная концепция в Windows, но это нормально в Unix-подобных средах, и поэтому она была перенесена сюда с помощью FastCGI.

добавить приложение FastCGI

Настройка каталогов статических ресурсов и медиа

Современные веб-приложения используют несколько файлов ресурсов, таких как CSS, JavaScript и другие, и приложения Django не являются исключением. Django предоставляет очень удобную функцию, которая позволяет разработчикам интегрировать необходимые ресурсы в дерево каталогов приложений, но Django может извлечь и скопировать их в соответствующий статический каталог. По сути, это функция, контролируемая разработчиком, и места, где Django будет хранить статические файлы, управляются в settings.py проекта. В проектах с хорошим поведением для этого будет использоваться разумный путь, но он не стандартизирован.

Приложения, которые обрабатывают загруженные файлы, хранят их в аналогично управляемом каталоге, который в Django традиционно называется media . static и media необходимо добавить в конфигурацию IIS как виртуальные каталоги:

Настройка каталогов статических ресурсов и медиа

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

Обратите внимание, что static каталог должен быть доступен для чтения IIS (как и все другие файлы и каталоги в проекте Django), но каталог media также должен быть доступен для записи IIS. Окончательная конфигурация сайта должна выглядеть следующим образом:

пример конфигурации сайта iis

Примечание о базах данных

SQLite по умолчанию работает в Windows, как и в Unix-подобных системах. Большинство других баз данных с открытым исходным кодом теперь работают в Windows, даже PostgreSQL, который я рекомендую. Однако в существующих установках Windows может потребоваться развернуть Django с MS SQL Server. Это возможно либо с помощью драйвера моста ODBC, либо с помощью собственного драйвера MS SQL. Теоретически оба работают, но я их не проверял. По крайней мере, параметры подключения к базе данных (в файле settings.py проекта) необходимо изменить для переключения на новую базу данных. Перенос данных необходимо выполнять вручную.

Обратите внимание, что при использовании базы данных SQLite и файл базы данных, и каталог, в котором он находится, должны быть доступны для записи для IIS.

Поиск проблемы

Описанная конфигурация протестирована и доказала свою работоспособность, но если что-то пойдет не так, вот несколько основных шагов для устранения неполадок с установкой Django для Windows:

  1. Попробуйте запустить командную строку FastCGI самостоятельно. Это команда, настроенная в настройках FastCGI , и она должна совпадать с командой, настроенной в сопоставлениях обработчиков для сайта.
  2. Установите функцию трассировки для IIS, затем настройте ее для сайта Django в правилах трассировки неудачных запросов , чтобы отслеживать все содержимое ( ), код состояния «500» и серьезность события «Ошибка». Трассировки будут доступны в виде XML-файлов (с прикрепленным XSLT) в каталоге IIS C:\inetpub\logs\FailedReqLogFiles (или аналогичном, в зависимости от вашей конфигурации). Затем вам нужно включить трассировку для конкретного веб-сайта (или виртуального каталога) в действии *Настройка->Отслеживание неудачных запросов… .

Заключение

Безусловно, Django адаптирован для Unix-подобной среды, а наиболее распространенный и поддерживаемый способ запуска Django — в системе Linux (например, с uwsgi и nginx).

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