Развертывание приложения Django в Windows с помощью Apache и mod_wsgi
Django — это мощная веб-инфраструктура, широко используемая многими известными приложениями. Django включает в себя упрощенный сервер разработки для локального тестирования вашего кода, но для всего, что даже немного связано с производством, требуется более безопасный и мощный веб-сервер.
В этом руководстве мы покажем, как установить и настроить некоторые компоненты на сервере Windows для поддержки и обслуживания приложений Django. Мы будем настраивать базу данных MySQL вместо использования базы данных SQLite по умолчанию. Мы настроим mod_wsgi для взаимодействия с нашими приложениями и настроим Apache, чтобы он действовал как шлюз в мир.
Питон
Первый шаг — загрузить и установить Python с веб-сайта. Веб-сайт Python. Выберите Windows в качестве операционной системы и выберите 32- или 64-разрядную версию в зависимости от требований вашего компьютера.
После загрузки установочного файла щелкните его правой кнопкой мыши и выберите Run as Administrator
. Вы должны увидеть экран ниже
Убедитесь, что оба флажка в нижней части окна отмечены (флажки «Установить для всех пользователей» и «Добавить Python 3.7 в PATH»).
Нажмите «Установить сейчас». После завершения установки вы можете закрыть окно. Чтобы убедиться, что установка прошла успешно, откройте Powershell и введите python
. Если установка прошла успешно, вы должны увидеть вывод, подобный приведенному ниже.
MySQL
Следующим шагом будет установка MySQL. Перед установкой MySQL необходимо установить Visual Studio и библиотеки Visual C++.
Загрузите Visual Studio 2017 с здесь. При установке Visual Studio убедитесь, что вы выбрали Desktop Environment with C++
в разделе «Рабочие нагрузки» и C++/CLI Support
вариант в правой части экрана.
Загрузите последнюю версию Visual C++ с здесь и установите его. Загрузите последнюю версию MySQL. Запустите загруженный установочный файл. Первый экран должен выглядеть так:
Нажмите на I accept the license terms
и нажмите Next
В типе установки выберите Developer Default
В разделе требований нажмите Далее. Затем нажмите выполнить. Как только все элементы в списке будут установлены, вы попадете на страницы конфигурации. в Type and Networking
странице выберите Тип конфигурации как Server Computer
На следующем экране установите пароль пользователя root. И в разделе пользователей добавьте пользователя с таким же именем, как у вошедшего в систему пользователя. Нажмите «Далее» до конца и, наконец, нажмите «Выполнить». В следующих двух шагах конфигурации ничего менять не нужно, поэтому вы можете нажать Next/Execute.
После завершения установки создайте новую базу данных с именем my_application
и предоставьте все те же привилегии новому созданному пользователю.
mysql> create database my_application;
Query OK, 1 row affected (0.04 sec)
mysql> grant all on my_application.* to '<my-user>'@'localhost';
Query OK, 0 rows affected (0.08 sec)
виртуальная среда
Виртуальная среда — это инструмент, который помогает разделять зависимости, необходимые для разных проектов, путем создания для них изолированных виртуальных сред Python. Установить virtualenv
откройте powershell и запустите
pip install virtualenvwrapper-win
Это установит пакет virtualenv. Чтобы создать виртуальную среду и начать работу с виртуальной средой, запустите
mkvirtualenv my_application
workon my_application
Установить Джанго
Установите соединитель Django и mysql, используя pip
с помощью следующей команды
pip install django
pip install pymysql
Создать Джанго-приложение
Далее давайте создадим пример проекта Django. Введите следующую команду в окне powershell.
django-admin startproject my_application
После выполнения этой команды вы должны увидеть папку с именем my_application
в текущей папке и my_application
будет иметь следующую структуру
my_application
| manage.py
|
\---my_application
settings.py
urls.py
wsgi.py
__init__.py
Теперь запустим сервер и проверим, что к нему можно получить доступ из браузера.
cd my_application
python manage.py runserver
Как только сервер запустится, вы должны увидеть аналогичный вывод в терминале powershell.
PS C:\Users\myuser\my_application> python .\manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
April 29, 2019 - 06:15:40
Django version 2.1.5, using settings 'my_application.settings'
Starting development server at
Quit the server with CTRL-BREAK.
Теперь давайте зайдем на сервер из браузера. Перейти по URL — из вашего браузера, и вы должны увидеть следующий экран
Теперь вы можете остановить сервер, нажав Ctrl + C
в терминале powershell.
Локальная установка
Следующим шагом является предоставление соответствующих настроек БД и т. д. для приложения Django. Откройте файл my_application/settings.py и замените переменную DATABASES на следующую:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_application',
'USER': '<my-user>',
'PASSWORD': '<my-password>',
'HOST': 'localhost',
'PORT': 3306
}
}
В рабочей среде Django не обслуживает статические файлы (css, js и изображения). Для того, чтобы Apache правильно работал с сервером, давайте настроим параметры staticfile в приложении. Добавьте следующее в конце вашего my_application/settings.py
файл
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
После ввода данных создайте таблицы базы данных и соберите статические файлы, запустив
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic
После collectstatic вы должны увидеть static
папка, созданная в вашей базовой папке. Текущая структура будет такой
my_application
+---my_application
| \---__pycache__
\---static
\---admin
+---css
| \---vendor
| \---select2
+---fonts
+---img
| \---gis
\---js
+---admin
\---vendor
+---jquery
+---select2
| \---i18n
\---xregexp
Апачи
Apache — это веб-сервер, который будет обрабатывать веб-запросы и обмениваться данными с приложением Django с помощью mod_wsgi. Загрузите сервер WAMP с здесь. При установке по умолчанию должна была быть создана папка на диске C:, т.к. C:\wamp64
Убедившись, что указанная выше папка создана, добавьте переменную среды на свой компьютер с именем MOD_WSGI_APACHE_ROOTDIR
значение которого должно быть C:\wamp64\bin\apache\apache<version>\
.
Вам нужно будет перезапустить окно PowerShell, чтобы это изменение вступило в силу.
wsgi.py
Wsgi.py по умолчанию, созданный Django, правильно работает для развертываний на основе LINUX, но для Windows нам нужно внести несколько изменений в файл. Создать новый файл my_application/wsgi_windows.py
и вставьте в файл следующее содержимое:
activate_this="C:/Users/myuser/Envs/my_application/Scripts/activate_this.py"
# execfile(activate_this, dict(__file__=activate_this))
exec(open(activate_this).read(),dict(__file__=activate_this))
import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('C:/Users/myuser/Envs/my_application/Lib/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('C:/Users/myuser/my_application')
sys.path.append('C:/Users/myuser/my_application/my_application')
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_application.settings'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_application.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
mod_wsgi
После установки WAMP перейдите в папку my_application в powershell и установите mod_wsgi, запустив
pip install mod_wsgi
Чтобы установить конфигурацию Apache, связанную с этим проектом, запустите
mod_wsgi-express module-config
Вывод должен быть примерно таким:
LoadFile "c:/users/myuser/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/myuser/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/serve
r/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/myuser/appdata/local/programs/python/python37"
Скопируйте вывод, созданный mod_wsgi-express
команду и вставьте ее в конце C:\wamp64\bin\apache\apache<version>\conf\httpd.conf
.
Следующим шагом является открытие vhosts
файл в C:\wamp64\bin\apache\apache<version>\conf\extra\httpd_vhosts.conf
и замените содержимое там содержимым ниже:
# virtual SupervisionTool
<VirtualHost *:80>
ServerName localhost
WSGIPassAuthorization On
ErrorLog "logs/my_application.error.log"
CustomLog "logs/my_application.access.log" combined
WSGIScriptAlias / "C:\Users\myuser\my_application\my_application\wsgi_windows.py"
<Directory "C:\Users\myuser\my_application\my_application">
<Files wsgi_windows.py>
Require all granted
</Files>
</Directory>
Alias /static "C:/Users/myuser/my_application/static"
<Directory "C:/Users/myuser/my_application/static">
Require all granted
</Directory>
</VirtualHost>
# end virtual SupervisionTool
С этой настройкой вы теперь сможете перейти на панель «Системные службы», запустить службу Apache и получить доступ к приложению по адресу