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