Запуск Django на хостинге
Django (Джанго) – это свободный фреймворк, позволяющий быстро и качественно разрабатывать динамические веб-приложения на языке Python.
Django на хостинге доступен на всех тарифах, кроме «базового» и «старта». Также снято ограничение на один Django-проект на аккаунт. Это стало возможным благодаря существенным изменениям, которые мы произвели в технической части тарифов хостинга (см. новость).
В данной статье будет описываться один из способов запуска фреймворка Django на хостинге для тарифного плана «Профи». Выполнение настроек на сервере будет производиться через протокол SSH. Для установки соединения можно воспользоваться программой PUTTY и инструкциями из статьи SSH-доступ. Без каких-либо изменений приведенные инструкции будут работать для тарифов «Лайт» и «Стандарт».
Настройка virtualenv
Авторизовавшись на сервере, мы окажемся в своем домашнем каталоге. Внутри домашнего каталога располагаются каталоги ваших сайтов, а также служебные каталоги bin, etc, log и tmp.
Для облегчения работы с библиотеками и приложениями Python на хостинге мы воспользуемся дополнительным приложением virtualenv, который установлен на всех серверах хостинга. Инструмент virtualenv позволит нам создать собственное изолированное окружение Python:
virtualenv ~/python
После выполнения указанной выше команды будет создан каталог python. Его
содержимое выглядит следующим образом:
bin
include
lib
В директории python/bin находится исполняемый бинарный файл python и
несколько дополнительных скриптов. В python/lib -- дерево каталогов,
повторяющее оное у текущего установленного python в системе.
Для того чтобы код, написанный на языке python, работал в этом окружении, его нужно запускать, используя интерпретатор /home/uXXXX/python/bin/python, или
воспользоваться следующими командами:
source ~/python/bin/activate
echo "source ~/python/bin/activate" >> ~/.bashrc
Установка Django
Сущесвует по меньшей мере два способа установки персональной версии Django: из архива, вручную скачанного с официального сайта, или из пакета, автоматически установленного из PyPI с помощью утилиты pip. Вы можете выбрать ту, которая вам кажется более удобной.
Django из архива
Загрузим последнюю версию фреймворка и распакуем его в домашний каталог:
wget http://www.djangoproject.com/download/1.3/tarball
tar -zxf Django-1.1.1.tar.gz && cd Django-1.3
Если вы уже активировали изолированное окружение, то для установки достаточно выполнить:
python setup.py install
Django через pip
Если вы уже активировали изолированное окружение, то установка может быть выполнена еще проще:
pip Django
Проверка корректности установки
Выйдите из каталога с Django (например, перейдите в домашний каталог) и проверьте, импортируется ли модуль django.
cd
python
>>> import django
>>> django.VERSION
(1, 3, 0, 'final', 0)
>>> django.__path__
['/home/uXXXX/python/lib/python2.6/site-packages/django']
Если указанные команды выполняются без ошибок, значит установка Django на хостинге прошла успешно.
Дополнительные замечания
- На серверах хостинга у Вас не получится установить python-модуль, который содержит в себе компоненты, написанные на Си и компилирующиеся в процессе установки.
Развертывание проекта
Теперь мы можем создать пустой проект Django и приступить к его наполнению смыслом. Рекомендуем для каждого проекта создавать каталог внутри каталога с сайтом, к которому этот проект относится:
cd ~/sitename.ru && python django-admin.py startproject myproject
Весьма вероятно, что проект на самом деле уже готов. В этом случае достаточно просто скопировать каталог с проектом в соответствующую папку.
Поскольку Django будет работать через интерфейс FastCGI, то для включения соответствующих настроек нам необходимо создать CGI-обработчик (враппер):
touch ~/sitename.ru/cgi-bin/django-wrapper.fcgi && chmod 755 ~/sitename.ru/cgi-bin/django-wrapper.fcgi
Созданный файл нужно заполнить следующим текстом:
#!/home/uXXXXX/python/bin/python
# -*- coding: utf-8 -*-
import sys, os
# Add a custom Python path.
sys.path.insert(0, "/home/uXXXXX/sitename.ru/")
# Switch to the directory of your project. (Optional.)
# os.chdir("/home/uXXXXX/sitename.ru/myproject")
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="prefork", daemonize="false",
minspare=1, maxspare=1, maxchildren=1)
здесь:
uXXXXX -- имя вашего пользователя на сервере хостинга. В большинстве случаев, совпадает с логином myproject -- название созданного проекта
Обратите особое внимание на первую строку:
#!/home/uXXXXX/python/bin/python
Эта строка заставляет работать Python в созданном виртуальном окружении.
Теперь необходимо сообщить веб-серверу Apache о том, что для обработки поступающих запросов должен использоваться созданный ранее враппер. Создадим файл .htaccess в каталоге sitename.ru/www и запишем в него следующее
указание:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ cgi-bin/django-wrapper.fcgi/$1 [QSA,L]
Обратившись к сайту sitename.ru через браузер, мы должны увидеть приветственное сообщение от Django. Это означает, что настройки выполнены правильно и можно приступать к работе с проектом.