Django-сайт на выделенном сервере

Django - фреймворк для питона, который позволяет делать очень многие вещи, которые хотелось бы делать, программируя что-то в вебе... Но об общих возможностях как-нибудь потом.

Итак, создание django-сайта... Не совсем тривиальная вещь, поэтому я сейчас немного расскажу о том, как ее провернуть. А именно затрону весь процесс с начала и до конца: от покупки выделенного сервера и до оптимизации скорости.

Все намного проще, чем кажется, в двух словах алгоритм такой: скачать django, прописать пути к нему, создать проект, настроить apache+mod_python так, чтобы запрос по адресу mydomain.ru обрабатывался именно вашим проектом.


В общем-то django позволяет на стадии разработки использовать встроенный минисервер, но после того, как человек научился делать сайты на питоне, следующим, и вполне логичным шагом, является размещение одного из своих творений в сети интернет. И сделать это проще всего (и надежнее, и удобнее) на выделенном сервере, коих в интернете тысячи. Преимущества от этого очевидны: это дешево, это очень гибко и динамично (хоть и сложно ориентироваться без мануалов первое время), а главное, можно не искать хостинги с поддержкой джанго. Лично я использую firstvds - один из самых дешевых, но, повторюсь, таких много, выбирайте любой. Главное иметь root-доступ и желательно (чтобы все было максимально похоже на описанный здесь процесс) FreeBSD в качестве операционной системы.
Все, сервер есть, идея сайта есть, надо купить доменное имя. Как правило, это делается с панели управления выделенным сервером (лично я использовал ISPmanager, вполне удобная штука). Поэтому этот шаг тоже считаем простым и опускаем.

Заходим на выделенный сервер по ssh (например, с помощью программы Putty в Windows). Видим перед собой строку консоли.

1. Установка SVN (Subversion). Ставить будем из портов (только для FreeBSD) - самый простой путь.
cd /usr/ports/devel/subversion
make install clean
В качестве опций отмечаем MOD_DAV_SVN mod_dav_svn module for Apache 2.X и NEON WebDAV/Delta-V repository access module.

2. Установка Django. Идем в директорию питона, скачиваем из репозиториев django, прописываем ссылки, чтобы django-admin.py был виден из любого места.
cd /usr/local/lib/python2.6/site-packages
svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
ln -s django-trunk/django /usr/local/lib/python2.6/site-packages/django
cd /usr/local/bin
ln -s /usr/local/lib/python2.6/site-packages/django-trunk/django/bin/django-admin.py django-admin.py
3. Установка модулей питона: mysql-python и mod_python. Также ставим из портов. Первый нужен для общения питона с базой данных (как можно было догадаться, MySQL), второй - для общения питона с apache.
cd /usr/ports/databases/py-MySQLdb
make install clean
Отмечаем опцию MYSQLCLIENT_R Use libmysqlclient_r (thread safe)
cd /usr/ports/www/mod_python3
make install
4. Создаем проекты django. Делаем это в практически в произвольном месте (мы будем в /home/myname/data/djangoapps/), и прописываем опять же ссылки, чтобы из этой директории было видно исходники джанго.
cd /home/myname/data/
mkdir djangoapps
cd djangoapps
ln -s /usr/local/lib/python2.6/site-packages/django-trunk/django django
Теперь создаем чистый проект, потом туда можно будет перенести проект, созданный на локальной машине (скопировать его практически любым scp-клиентом, например, WinSCP), и синхронизировать все, что с ним повязано (базу данных, например), или создать прямо там с нуля:
django-admin.py startproject mydjangoproject
cd mydjangoproject
manage.py syncdb
5. Настройка Django. Открываем settings.py и начинаем менять.
import sys
sys.path.append('/home/myname/data/djangoapps/mydjangoproject')
DEBUG = False
Пути к медиа файлам (своим и файлам администраторской панели), их обработкой будет заниматься не питон. Если ваши медиа-файлы хранятся в директории /www/mydomain.ru/files/, выглядить это будет так:
MEDIA_ROOT = '/home/myname/data/www/mydomain.ru/files/'
MEDIA_URL = 'http://mydomain.ru/files/'
ADMIN_MEDIA_blockquoteFIX = '/media/'
ADMIN_MEDIA_ROOT = '/usr/local/lib/python2.6/site-packages/django-trunk/django/contrib/admin/media/'
И еще после всего этого добавляем символическую ссылку, на всякий случай (это уже не в файле settings.py, разумеется, а в консоли):
cd /home/mysite/data/www/mydomain.ru
ln -s /usr/local/lib/python2.6/site-packages/django-trunk/django/contrib/admin/media media
6. Настройка Apache. Теперь надо сконфигурировать сам сервер, для этого изменяем файл httpd.conf.
Ищем файл:
cd /usr/local/etc/apache22/
Открываем его и меняем (перед этим неплохо было бы сохранить его резервную копию). Добавляем модуль загрузки питона:
LoadModule python_module libexec/apache22/mod_python.so
Меняем определение виртуального хоста, на котором висит доменное имя, получаем примерно следующее:

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 myaddress@mydomain.ru
AddDefaultCharset utf8

SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mydjangoproject.settings
PythonOption django.root /mydjangoproject
PythonAutoReload On
PythonDebug On
PythonPath "['/home/myname/data/django-apps', '/usr/local/lib/python2.6/site-packages/django'] + sys.path"


SetHandler None

7. Перезагружаем сервер, создаем сайт (или копируем в созданную директорию), наслаждаемся!

Внимание: после всех изменений в файле httpd.conf или в settings.py необходимо перегрузить apache.

No comments :

Post a Comment