Развертывание приложения Django в Windows с помощью Apache и mod_wsgi

Django — это мощная веб-инфраструктура, широко используемая многими известными приложениями. Django включает в себя упрощенный сервер разработки для локального тестирования вашего кода, но для всего, что даже немного связано с производством, требуется более безопасный и мощный веб-сервер.

В этом руководстве мы покажем, как установить и настроить некоторые компоненты на сервере Windows для поддержки и обслуживания приложений Django. Мы будем настраивать базу данных MySQL вместо использования базы данных SQLite по умолчанию. Мы настроим mod_wsgi для взаимодействия с нашими приложениями и настроим Apache, чтобы он действовал как шлюз в мир.

Питон

Первый шаг — загрузить и установить Python с веб-сайта. Веб-сайт Python. Выберите Windows в качестве операционной системы и выберите 32- или 64-разрядную версию в зависимости от требований вашего компьютера.

После загрузки установочного файла щелкните его правой кнопкой мыши и выберите Run as Administrator. Вы должны увидеть экран ниже

Установка Python

Убедитесь, что оба флажка в нижней части окна отмечены (флажки «Установить для всех пользователей» и «Добавить Python 3.7 в PATH»).

Нажмите «Установить сейчас». После завершения установки вы можете закрыть окно. Чтобы убедиться, что установка прошла успешно, откройте Powershell и введите python. Если установка прошла успешно, вы должны увидеть вывод, подобный приведенному ниже.

Оболочка Python

MySQL

Следующим шагом будет установка MySQL. Перед установкой MySQL необходимо установить Visual Studio и библиотеки Visual C++.

Загрузите Visual Studio 2017 с здесь. При установке Visual Studio убедитесь, что вы выбрали Desktop Environment with C++ в разделе «Рабочие нагрузки» и C++/CLI Support вариант в правой части экрана.

Установка Visual Studio 2017

Загрузите последнюю версию Visual C++ с здесь и установите его. Загрузите последнюю версию MySQL. Запустите загруженный установочный файл. Первый экран должен выглядеть так:

MySQL шаг 1

Нажмите на I accept the license terms и нажмите Next

В типе установки выберите Developer Default

MySQL — тип установки

В разделе требований нажмите Далее. Затем нажмите выполнить. Как только все элементы в списке будут установлены, вы попадете на страницы конфигурации. в Type and Networking странице выберите Тип конфигурации как Server Computer

Тип MySQL и сеть

На следующем экране установите пароль пользователя 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 — из вашего браузера, и вы должны увидеть следующий экран

Страница Django по умолчанию

Теперь вы можете остановить сервер, нажав 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 и получить доступ к приложению по адресу

Похожие записи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *