Обслуживание приложений Django при помощи mod_wsgi
Linux, VPS | Комментировать запись
Требования
Прежде чем приступить к выполнению данного руководства, ознакомьтесь с двумя предыдущими статьями из этой серии:
Создание приложения 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: Apache, Cloud Server, Django, Linux, mod_wsgi, WSGI