Назад на главную
Установка Django на VDS

Здесь описано как дистанционно установить Django на виртуальный выделенный сервер (VDS).

Установка 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 вашего сайта и посмотреть, что из всего этого получилось…

Назад на главную