Django хостинг PDF Печать E-mail
Автор: Administrator   
25.12.2009 18:04

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

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

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

Преимущества данной схемы: вместо $500+ (аренда выделенного сервера) вы платите на два порядка меньше и имеете полную свободу действий в ваших web-экспериментах. Цена младшего тарифного плана около 5 уе.

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

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

 

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

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

Наша цель — запустить джанго-проект на 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

Установка 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

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

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

 

cd /home/mysite/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) и переносим туда имеющиеся у нас файлы.

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

django-admin.py startproject myproject2

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

 

manage.py syncdb

Возможная ошибка: Can't find the file 'settings.py' in the directory containing 'manage.py'
Если settings.py на самом деле лежит на своем месте, проверьте, не импортируете ли вы в нем что-то, что еще не установлено, например deseb.

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

cd /home/mysite/data/django-apps/myproject1/

svn co http://deseb.googlecode.com/svn/trunk/src/deseb/

svn co http://django-registration.googlecode.com/svn/trunk/registration/

и т.д.

Установка 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/mysite/data/django-apps/myproject1')

Не забудьте, что данные доступа к БД на продакшн сервере могут быть не такими, как на тестовом сервере.

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

 

DEBUG = False

Настройте пути к медиа файлам (своим и админки Джанго):

MEDIA_ROOT = '/home/mysite/data/www/mydomain.ru/files/'

MEDIA_URL = 'http://mydomain.ru/files/'

ADMIN_MEDIA_PREFIX = '/media/'

ADMIN_MEDIA_ROOT = '/usr/local/lib/python2.5/site-packages/django-trunk/django/contrib/admin/media/'

Теперь в Django-коде пути к медийным файлам будут выглядеть как "/files/myimage.jpg", что для сервера (эти файлы будет обрабатывать сервер, а не django) равнозначно "http://mydomain.ru/files/myimage.jpg".

Здесь оговорюсь, что несмотря на то, что последних двух строчек формально вроде бы должно быть достаточно, у меня без создания символической ссылки, связывающей путь /media/ с реальным расположением админских файлов, админка была видна в виде голого html.
Лечил так:

 

cd /home/mysite/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/mysite/data/www/mydomain.ru

SuexecUserGroup mysite mysite

CustomLog /home/httpd-logs/mydomain.ru.access.log combined

ErrorLog /home/httpd-logs/mydomain.ru.com.error.log

ServerAlias www.mydomain.ru

ServerAdmin Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

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/mysite/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>

Перезапускаем сервер (это можно сделать из панели управления или по ssh). Если после перезагрузки в списке процессов (см. в панели управления) нет ни одного процесса httpd — проверяем, что мы написали в httpd.conf и исправляем ошибки. Если httpd (один или несколько) есть в списке процессов — сервер работает нормально.

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

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

 

Обновлено 25.12.2009 18:06