Магазин пластинок nowhereland.ru - виниловые пластинки
Вход →  Регистрация →

Django хостинг

Здесь описано как дистанционно установить Django на хостинге, позволяющем это сделать.
Я размещаю свои сайты на Django, в том числе этот, здесь.

Это — виртуальный выделенный сервер (VDS) по абсолютно виртуальной цене от 5 уе в месяц. На нем можно разместить любой сайт, требующий нестандартного программного обеспечения, в том числе Django сайт.

Что такое VDS? VDS — это практически полноценный выделенный сервер, на котором вы — полный хозяин: вы можете установить или удалить любое программное обеспечение, вы можете конфигурировать все, что угодно, под свои нужды, вы можете перезагружать сервер или отключить его совсем и установить другой. Root доступ, отличная панель управления, возможность не только разместить множество собственных сайтов, но и перепродавать услуги хостинга, техническая поддержка.

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

Ограничения данной схемы: вы имеете в распоряжении не все ресурсы, имеющиеся в наличии, а только столько, сколько предусмотрено вашим тарифным планом. Если ваш проект потребует больше ресурсов, нужно подключить другой тарифный план. Делается это за несколько секунд из панели управления и делать это можно ежедневно. Скажем, если на младших тарифных планах не проходит компиляция какой-нибудь толстой штуковины вроде Sphinx, нужно просто включить максимальный тарифный план, установить все, что нужно, а на следующий день переключиться обратно. Есть также полезная опция "VDS-Анлим", которая снимает ограничения по ресурсам при необходимости и при наличии этих самых свободных ресурсов. Превышение сверх оплаченноой в абонентской плате квоты просто будет добавляться в счет.

Преимущества VDS: вместо сотен $$$ (аренда выделенного сервера) вы платите в ДЕСЯТКИ раз меньше и имеете полную свободу действий в ваших web-экспериментах. Цена младшего тарифного плана около 5 уе.

Для ресурсоемких проектов та же компания предлагает хостинг посерьезнее. Основные отличия от предыдущего хостинга заключаются в бОльшем просторе для роста и возможности иметь за отдельную плату профессиональное администрирование вашего виртуально сервера. Тарифные планы VDS здесь начинаются с 20 уе, т.е. как раз там, где кончаются VDS предложения firstvds, рассмотренные выше. Обычный виртуальный хостинг также предоставляется и стоит от 4 уе в месяц. И уж совсем роскошное предложение - выделенные сервера от 69 уе в месяц.

Обратите внимание: по этой ссылке вы получите немедленно, БЕЗ ОПЛАТЫ, полнофункциональный VDS на 3 часа для тестирования. Если вас что-то не устроит, вы не потеряете ни копейки. Да, еще вы получите скидку 25% при заказе хостинга, т.к. приведенные ссылки - партнёрские.

Установка Django + modpython

Далее описан процесс уcтановки Django по SSH на вышеуказанном хостинге. Надеюсь, эта шпаргалка поможет вам устроиться на новом месте быстрее.

Наша цель — запустить джанго-проект на freeBSD + Apache + modpython + MySQL + Django SVN (текущая версия из транка).

Для работы необходим ssh клиент. Я использую putty.
Также установите sftp клиент (ftp через ssh). Я использую WinSCP. Обычный FTP не позволяет входить с правами root.

Установка Subversion

Subversion — программа контроля версий. С её помощью мы далее установим Django и его модули и всегда сможем одной командой обновить их до последних версий.

Ставим из портов.
Порты freeBSD — это стандартный набор ПО, тестированного на данной ОС.
Установка из портов - самый быстрый и надежный способ.

cd /usr/ports/devel/subversion
make install clean
Отмечаем только эти 2 опции:
[X] MOD_DAV_SVN mod_dav_svn module for Apache 2.X
[X] NEON WebDAV/Delta-V repository access module

На втором появившемся экране настроек жмем "cancel".

Установка Django

cd /usr/local/lib/python2.5/site-packages
svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
Создаем символическую ссылку, указывающую, что /django на самом деле нужно искать в /django-trunk/django
ln -s django-trunk/django /usr/local/lib/python2.5/site-packages/django
Далее "подкладываем" ссылку на django-admin.py туда, где система может ее найти.
cd /usr/local/bin
ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django/bin/django-admin.py django-admin.py
Если вы ошиблись при создании ссылки и хотите, чтобы новая ссылка перезаписала уже существующую, используйте ключ f:
ln -fs ...

Установка mysql-python

mysql-python — драйвер, реализующий доступ к MySQL из python.
Ставим из портов.

cd /usr/ports/databases/py-MySQLdb
make install clean
Отмечаем единственную опцию
[X] MYSQLCLIENT_R Use libmysqlclient_r (thread safe)

Установка mod_python

mod_python — модуль python для Apache
Ставим из портов.

cd /usr/ports/www/mod_python3 
make install clean

Создание папки для наших django проектов

Джанго-код рекомендуется хранить в местах, недоступных по http. В остальном место, куда вы его положите, принципиального значения не имеет. Предположим, ваш пользовательский эккаунт называется myname (существует пользователь myname).

cd /home/myname/data/
mkdir django-apps
Создаем symlink, чтобы иметь отсюда доступ к django:
cd django-apps
ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django django
проверяем, доступен ли здесь django:

python
import django
если сообщений об ошибке не появилось, выходим из коммандной оболочки python коммандой quit()

Если django недоступен, проверяем, имеется ли в папке django-apps ссылка django и действительно ли она ведет туда, куда мы ожидаем. Например, щелкните по ссылке в ftp — если появится ссобщение об ошибке ("файл не найден"), это значит, что ссылка неверна. В WinSCP можно получить окно редактирования символической ссылки, выделив ее и нажав Alt+F6.

Создание django проекта

В папке django-apps создаем папку проекта (например, myproject1) и переносим туда по FTP все имеющиеся у нас файлы и папки из папки нашего django-проекта.

mkdir  myproject1
В эту папку мы переносим наши папки приложений, файлы urls.py, settings.py и т.д.

Чистый проект можно содать командой

python django-admin.py startproject myproject2
Возможная ошибка: No module named django.core
Решение: возвращаемя к пункту "Если django недоступен"

python manage.py syncdb

Установка модулей Django

cd /home/myname/data/django-apps/myproject1/
svn co http://откуда ставить модуль
и т.д.

Установка memcached

memcached реализует кэширование страниц. Установка этого ПО опциональна и не влияет на работоспособность всего остального.
Ставим из портов.

cd /usr/ports/databases/memcached
make install clean
Опцию REPCACHED не отмечаем

Установка python библиотеки для memcached

cd /usr/ports/databases/py-memcached
make install clean
Подробнее о конфигурировании и использовании Django + memcached см. на сайте Django.

Настройка settings.py

Для добавления пути к проекту в system path включите в начале settings.py

import sys
sys.path.append('/home/myname/data/django-apps/myproject1')
Не забудьте, что данные доступа к БД на продакшн сервере скорее всего не такие, как на тестовом сервере.

После отладки проекта нужно будет отключить вывод подробных сообщений об ошибках:

DEBUG = False
Настройте пути к медиа файлам (своим и админки Джанго):
MEDIA_ROOT = '/home/myname/data/www/mydomain.ru/files/'
MEDIA_URL = 'http://mydomain.ru/files/'
ADMIN_MEDIA_PREFIX = '/media/'
Предполагается, что пути к медийным файлам (которые обрабатываются сервером, а не django), указаны в вашем коде как "/files/myimage.jpg", "/files/js/myscript.js" и т.п.

Теперь по URL
http://mydomain.ru/files/myimage.jpg или http://mydomain.ru/files/js/myscript.js сервер будет выдавать соответственно файлы
/home/myname/data/www/mydomain.ru/files/myimage.jpg,
/home/myname/data/www/mydomain.ru/files/js/myscript.js

Теперь нужно создать папку files /home/myname/data/www/mydomain.ru/files и положить туда по FTP свои файлы и папки.

Чтобы админка django нашла свои медийные файлы, нужно будет создать ссылку, связывающую путь /media в URL файлов с их реальным расположением в папке django:

cd /home/myname/data/www/mydomain.ru
ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django/contrib/admin/media media

Настройка httpd.conf

httpd.conf — конфигурационный файл Apache, путь к нему:
/usr/local/etc/apache22/httpd.conf

Рекомендую перед внесением изменений в httpd.conf сохранить его копию в тихом теплом месте. Если вы в нем допустите ошибку, Apache не будет работать и вам пригодится начальная копия для восстановления порядка.

Кстати, ISPmanager (панель управления) позволяет редактировать любые файлы, в том числе этот.

Итак, вносим в httpd.conf команду загрузки мод-питона:

LoadModule python_module libexec/apache22/mod_python.so
Далее дополняем определение вашего виртуального хоста так, чтобы получилось похоже на это:

<VirtualHost 11.222.3.44:80>
	ServerName mydomain.ru
	DocumentRoot /home/myname/data/www/mydomain.ru
	SuexecUserGroup myname myname
	CustomLog /home/httpd-logs/mydomain.ru.access.log combined
	ErrorLog /home/httpd-logs/mydomain.ru.com.error.log
	ServerAlias www.mydomain.ru
	ServerAdmin webmaster@mydomain.ru
	AddDefaultCharset utf8
	......

#Этот блок определяет, что все url (/) обрабатываются mod-python, 
#устанавливает корневую папку нашего джанго-проекта,
#включает вывод сообщений об ошибках mod-python и его рестарт при рестарте сервера,
#добавляет пути к папке наших проектов и к Django в PythonPath
<Location "/">
	SetHandler python-program
	PythonHandler django.core.handlers.modpython
	SetEnv DJANGO_SETTINGS_MODULE myproject1.settings
	PythonOption django.root /myproject1
	PythonAutoReload On
	PythonDebug On
	PythonPath "['/home/myname/data/django-apps', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
</Location>

#Этот блок определяет, что все пути, начинающиеся на /files, обрабатываются сервером.
#В папке mydomain.ru/files/... хранятся все наши медиа файлы - картинки, css, js, pdf...
<Location "/files">
	SetHandler None
</Location>

#Этот блок определяет, что все пути, начинающиеся на /media, обрабатываются сервером.
#В папке mydomain.ru/media/... как бы хранятся медиа файлы джанго-админ интерфейса.
#На самом деле нет никакой надобности куда-то переносить сами файлы, достаточно
#создать в mydomain.ru/ ссылку media, указывающую на действительное расположение файлов.
<Location "/media">
    SetHandler None
</Location>

#этот блок определяет, что все пути, кончающиеся .jpg .gif и т.д., обрабатываются сервером.
<LocationMatch "\.(jpg|gif|pdf|zip|css|js|ico)$">
    SetHandler None
</LocationMatch>	
	
</VirtualHost>
Перезапускаем сервер (это можно сделать из панели управления). Если после перезагрузки в списке сервисов (см. в панели управления) нет ни одного процесса httpd — проверяем, что мы написали в httpd.conf и исправляем ошибки. Если httpd (один или несколько) есть в списке процессов — сервер работает нормально.

Не забывайте, что после любых изменений в httpd.conf или settings.py сервер необходимо перезагрузить.

Осталось набрать в браузере URL вашего сайта и посмотреть, что из всего этого получилось...

Если с первого раза не все идет гладко — не расстаивайтесь, внимательно пройдитесь по всем моментам процесса настройки и разберитесь, что вы пропустили. Зайдите по FTP и посмотрите, действительно ли все созданные вами папки и ссылки находятся там, где им предполагается быть.
Я же благодарю всех, кто воспользовался вышеприведенными ссылками и желаю им удач во всех web-начинаниях!