Как установить Django на виртуальном хостинге
В последнее время много внимания уделяется различным веб-фреймворкам, в особенности Ruby on Rails, при этом незаслуженно многие забывают о существовании достаточно мощного средства для создания веб-приложений - Django. Среди веб-сайтов, которые используют Django - The Washington Post, Yandex и многие другие. На конференции Российские интернет технологии 2007 в своем выступлении сотрудники Яндекса рассказали о тестировании различных веб-фреймворков, по результатам тесВ последнее время много внимания уделяется различным веб-фреймворкам, в особенности Ruby on Rails, при этом незаслуженно многие забывают о существовании достаточно мощного средства для создания веб-приложений - Django. Среди веб-сайтов, которые используют Django - The Washington Post, Yandex и многие другие. На конференции Российские интернет технологии 2007 в своем выступлении сотрудники Яндекса рассказали о тестировании различных веб-фреймворков, по результатам тестирования наибольшую производительность показал Django.
Установка Django производилась на хостинге компании "Хостинговые телесистемы", это один из немногих хостингов, который поддерживает достаточно большой перечень приложений и баз данных, (см. ссылку справа вверху страницы) и при этом саппорт и админы достаточно адекватные люди и помогают решать различные вопросы, в то время как на других хостингах как правило или не знают что делать или просто говорят что они не поддерживают что-то. При установке Django я руководствовался статьей с wiki хостинг-провайдера Dreamhost, кроме этого мне очень помогли в выявлении причин различных ошибок сотрудники компании "Хостинговые телесистемы" в связи с чем хотелось бы поблагодарить их за это :-) Собственно установка Django: в данном случае предпложим что
- home директория: /home/username/
- сайт и все доступные извне файлы находятся в каталоге: /home/username/domain.ru
- media файлы мы будем хранить в каталоге: /home/username/media/domain, файлы находящиеся в этом каталоге будут доступны по адресу http://media.domain.ru/ (о том как настроить домен, можно почитать в FAQ)
- все наши проекты будут храниться в каталоге: /home/username/django_projects/
- наш тестовый проект будет называться myproject
- шаблоны будут храниться в каталоге /home/username/django_templates/myproject
Создаем каталог где будем временно хранить файлы для установки django и модулей, и каталог куда мы все это будем устанавливать
$ cd $ mkdir build python
Скачиваем Django, модуль для работы с PostgreSQL и модуль для работы с FastCGI и устанавливаем их
$ cd build $ wget http://www.djangoproject.com/download/0.96/tarball/ && wget http://initd.org/pub/software/psycopg/psycopg2-2.0.6.tar.gz && wget http://www.saddi.com/software/flup/dist/flup-0.5.tar.gz $ tar zxf Django-0.96.tar.gz $ tar zxf psycopg2-2.0.6.tar.gz $ tar zxf flup-0.5.tar.gz $ cd Django-0.96 $ python setup.py install --prefix /home/username/python $ cd ../psycopg2-2.0.6 $ python setup.py install --prefix /home/username/python
после того как они установились в каталоге /home/username/python появятся две папки - bin и lib, в папке bin лежит django-admin.py в папке libs появляется еще несколько папок среди которых /home/username/python/lib/python2.4/site-packages и /home/username/python/lib/python2.4/site-packages/psycopg2
С flup такой метод установки не сработал, поэтому он устанавливается таким образом:
$ cp ~/build/flup-0.5/flup/server/fcgi.py ~/python/lib/python2.4/site-packages/ $ cp -R ~/build/flup-0.5/flup/ ~/python/lib/python2.4/site-packages/flup
Теперь необходимо внести изменения в переменные окружения, я пользуюсь bash поэтому настройки написаны для этого интерпретатора. Редактируем /home/username/.bashrc и добавляем в него следующие строки:
export PATH=$PATH:$HOME/python/bin:$HOME/python/lib/python2.4/site-packages export PYTHONPATH=$PYTHONPATH:$HOME/python/lib/python2.4/site-packages:$HOME/django_projects:
после чего нужно перезагрузить конфиг
$ source .bash_profile
Теперь можно проверить правильно ли все установлено:
$ python
Python 2.4.4 (#2, Jun 6 2007, 17:41:44)
[GCC 3.4.6 [FreeBSD] 20060305] on freebsd6
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append('/home/username/python/lib/python2.4/site-packages')
>>> sys.path.append('/home/username/django_projects')
>>> import psycopg2
>>> from fcgi import WSGIServerна этом этапе никаких ошибок не должно появится. Если копировать код отсюда и вставлять в консоль то может появится пробел в начале строки это вызовет ошибку типа во такой
File "", line 1 import psycopg2 ^ SyntaxError: invalid syntax
Django будет работать через FastCGI для включения соответствующих настроек необходимо создать файл /home/username/domain.ru/dispatch.fcgi c таким содержанием:
#!/usr/local/bin/python import sys sys.path.append('/home/username/python/lib/python2.4/site-packages') sys.path.append('/home/username/django_projects') from fcgi import WSGIServer from django.core.handlers.wsgi import WSGIHandler import os os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' WSGIServer(WSGIHandler()).run()
после чего выставить ему необходимые для корректной работы права
$ chmod 750 ~/domain.ru/dispatch.fcgi
в файл /home/username/domain.ru/.htaccess необходимо добавить:
Options +ExecCGI AddHandler fastcgi-script .fcgi RewriteEngine On RewriteBase / RewriteRule ^(dispatch\.fcgi/.*)$ - [L] RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]
Различные media-файлы мы будем хранить в /home/username/media/domain/ кроме этого когда мы работаем в административном интерфейсе Djungo различные media-например css хранятся в отдельной папке, местонахождение которой задается в настройках нашего проекта, речь о которых пойдет ниже. Для того чтобы они были доступны мы создадим symlink на соответствующую директорию в дистрибутиве django:
$ ln -s $HOME/home/username/python/lib/python2.4/site-packages/django/contrib/admin/media/ $HOME/media/myproject/admin_media
Теперь о настройках, для начала нужно создать новый проект, создать папку где мы будем хранить проекты и папку для шаблонов:
$ mkdir ~/django_projects ~/django_templates $ cd ~/django_projects $ django-admin.py startproject myproject
После этого появляется папка myproject, в ней редактируем файл /home/username/django_projects/myproject/settings.py я использовал в качестве базы PostgreSQL для MySQL соответсвенно нужно выбрать DATABASE_ENGINE = 'mysql' и DATABASE_PORT = 3306
DATABASE_ENGINE = 'postgresql_psycopg2' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = 'djungo_db' # Or path to database file if using sqlite3. DATABASE_USER = 'djungo_user' # Not used with sqlite3. DATABASE_PASSWORD = 'Wk7hhL2I' # Not used with sqlite3. DATABASE_HOST = 'database_host' # Set to empty string for localhost. Not used with sqlite3.
После этого можно запускать синхронизацию с БД, после успешного завершения которой будет предложено создать административный аккаунт:
$ cd ~/django_projects/myproject/ $ python manage.py syncdb Creating table auth_message Creating table auth_group Creating table auth_user Creating table auth_permission Creating table django_content_type Creating table django_session Creating table django_site Creating table django_admin_log You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (Leave blank to use 'boris'): someuser E-mail address: contact@somesite.ru Password: Password (again): Superuser created successfully. Installing index for auth.Permission model Installing index for auth.Message model
После этого можно попробовать загрузить страницу http://www.domain.ru/admin/ - все должно работать. ps: в официальном руководстве указано что необходимо запустить свой сервер на время разработки командой python manage.py runserver. Ничего это делать не нужно, административный интерфейс будет и так доступен после выполнения всех перечисленных выше действий.