Обслуживание приложений Django при помощи mod_wsgi

Требования

Прежде чем приступить к выполнению данного руководства, ознакомьтесь с двумя предыдущими статьями из этой серии:

Создание приложения Django

Для начала перейдите в домашний каталог, в нем создайте новый каталог и откройте его:

mkdir  -p ~/public_html/domain1.com
cd ~/public_html/domain1.com

Затем создайте проект при помощи инструмента django-admin.py:

django-admin.py startproject MyTestProject

Создание виртуального хоста и файла WSGI

Чтобы обслуживать приложение Django корректно, Apache должен направлять определенные типы запросов модулю mod_wsgi. Важно также создать файл wsgi, который будет сообщать mod_wsgi, как обрабатывать такие запросы. Для этого нужно настроить виртуальный хост, который сообщит Apache расположение файла wsgi.

Откройте файл нового виртуального хоста:

sudo nano /etc/apache2/sites-available/domain1.com

Внесите в него следующий код, указав свои реальные данные:

<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
WSGIScriptAlias / /home/username/public_html/domain1.com/MyTestProject.wsgi
</VirtualHost>

Теперь веб-сервер Apache знает, что полученные запросы нужно передавать mod_wsgi и где находится файл, настройки которого нужно использовать; осталось только создать этот файл:

nano ~/public_html/domain1.com/MyTestProject.wsgi

Внесите в него следующие настройки:

import os
import sys
sys.path.append('~/public_html/domain1.com/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'MyTestProject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Этот код импортирует необходимые модули, а также внесет путь проекта Django в путь Python и внесет ряд переменных для корректной работы mod_wsgi. Затем нужно включить виртуальный хост и перезапустить Apache:

sudo a2ensite domain1.com
sudo /etc/init.d/apache2 reload

Если все было сделано должным образом, в браузере появится домен (или IP сервера) и созданное ранее приложение. При возникновении ошибок портов или NameVirtualHost перезапустите Apache.

Статический контент

При создании виртуального хоста нужно иметь в виду: статический контент не будет поддерживаться. Чтобы статический контент обслуживался корректно, обновите несколько параметров в файле MyTestProject/settings.py и используйте следующие конфигурации виртуального хоста:

<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
WSGIScriptAlias / /home/username/public_html/domain1.com/MyTestProject.wsgi
Alias /static/ /home/username/public_html/domain1.com/static/
<Location "/static/">
Options -Indexes
</Location>
</VirtualHost>

Благодаря директиве Alias веб-сервер Apache не позволяет Django и mod_wsgi обрабатывать данные, расположенные в директории /static/ домена. Тут можно использовать любую доступную в /home/username/public_html/domain1.com/ директорию; в данном случае эта директория называется static. Обновите settings.py, установив переменные MEDIA_ROOT и MEDIA_URL.

nano /home/username/public_html/domain1.com/MyMyTestProject/settings.py

Найдите и отредактируйте следующие параметры:

MEDIA_ROOT = '/home/username/public_html/domain1.com/static/'
MEDIA_URL = '/static/'

В завершение перезапустите Apache, чтобы активировать изменения.

sudo /etc/init.d/apache2 reload

Теперь можно получить доступ ко всем элементам, которые были помещены в MEDIA_ROOT, при помощи http://www.domain1.com/static/path/to/file.

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

Tags: , , , , ,

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