Django - быстрый старт (устарело)

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 15:58, 22 сентября 2011 (править)
Renton (Обсуждение | вклад)
(Подготовка окружения)
← К предыдущему изменению
Версия 11:01, 14 июня 2012 (править) (отменить)
Renton (Обсуждение | вклад)
(Подготовка окружения)
К следующему изменению →
Строка 4: Строка 4:
== Установка == == Установка ==
=== Подготовка окружения === === Подготовка окружения ===
-'''Внимание!''' Убедитесь, что ваш сайт работает под управлением web-сервера UNIX/Apache/FastCGI, это можно сделать, а также при необходимости сменить тип сервера, в разделе личного кабинета /Управление сайтами и серверами/.+'''Внимание!''' Убедитесь, что ваш сайт работает под управлением web-сервера <code>'''UNIX/Apache/FastCGI'''</code>, это можно сделать, а также при необходимости сменить тип сервера, в разделе личного кабинета <code>/Управление сайтами и серверами/</code>.
-Везде, где написано python2.6 нужно подставлять версию python, работающую на вашем сервере (первые два числа)+'''1.''' На хостинговом сервере может быть установлено несколько версей Python, но поскольку Django работает с версией Python до 2.7 включительно и не работает с Python 3, то нам необходимо определить для себя версию Python по умолчанию.
- python --version+Сделаем это через псевдонимы команд описываемые в файле <code>~/.bashrc</code> . Выполнив команду:
 + $ export PYTHON_VERSION=`eselect python list --python2 | awk '/\*$/ {print $2}'`; echo ${PYTHON_VERSION}
 +мы увидим какая версия 2-ой ветки Python установлена на сервере. Ее мы и будем использовать.<br />
-* Создаем в корне домашнего каталога файл <code>.pydistutils.cfg</code> для настройки путей инсталляции модулей, следующей командой:+Определим эту версию в качестве версии по умолчанию:
 + $ grep -q "${PYTHON_VERSION}" ~/.bashrc || sed -i "/happen/a alias python=${PYTHON_VERSION}" ~/.bashrc
 + $ source ~/.bashrc
 + 
 +Проверим:
 + $ python --version
 + Python 2.7.2
 +Если python показал версию '''2.x''', то можно переходить к следующему шагу, в противном случае обратитесь в поддержку хостинга.
 + 
 +'''2.''' Для настройки переменных <code>PATH</code>, <code>PYTHONPATH</code> в ваш <code>'''~/.bashrc'''</code> добавьте соответствующие строки командами:
 + $ echo 'export PATH=${HOME}/python/bin:${HOME}/python/lib64/'${PYTHON_VERSION}'/site-packages:${PATH}' >> ~/.bashrc
 + $ echo 'export PYTHONPATH=${HOME}/python/lib64/'${PYTHON_VERSION}'/site-packages:${PYTHONPATH}' >> ~/.bashrc
 + $ source ~/.bashrc
 +
 +'''3.''' Создаем в корне домашнего каталога файл <code>.pydistutils.cfg</code> для настройки путей инсталляции модулей, следующей командой:
$ cat > ~/.pydistutils.cfg <<END $ cat > ~/.pydistutils.cfg <<END
[install] [install]
- prefix = \$HOME/python+ prefix = \${HOME}/python
[easy_install] [easy_install]
- install_dir = \$HOME/python/lib64/python`python -c 'import sys; print sys.version[:3]'`/site-packages+ install_dir = \${HOME}/python/lib64/${PYTHON_VERSION}/site-packages
END END
-или с помощью любого текстового редактора с таким содержимым: 
- [install] 
- prefix = $HOME/python 
-  
- [easy_install] 
- install_dir = $HOME/python/lib64/python`python -c 'import sys; print sys.version[:3]'`/site-packages 
- 
-* Для настройки переменных <code>PATH</code>, <code>PYTHONPATH</code> добавьте строки: 
- export PATH=$HOME/python/bin:$HOME/python/lib64/python`python -c 'import sys; print sys.version[:3]'`/site-packages:$PATH 
- export PYTHONPATH=$HOME/python/lib64/python`python -c 'import sys; print sys.version[:3]'`/site-packages:$PYTHONPATH 
-в ваш <code>'''~/.bashrc'''</code> 
-* Выполняем команду:+'''4.''' Создаем различные каталоги:
- source ~/.bashrc+ mkdir -p ~/src ~/python/lib64/${PYTHON_VERSION}/site-packages ~/django
-для того, чтобы сделанные изменения вступили в силу.+
-* Создаем различные каталоги:+'''5.''' Симлинк:
- mkdir -p ~/src ~/python/lib64/python`python -c 'import sys; print sys.version[:3]'`/site-packages ~/django+
-* Симлинк:+
cd ~/python; ln -s lib64 lib; cd cd ~/python; ln -s lib64 lib; cd

Версия 11:01, 14 июня 2012

Содержание

Общие сведения

Эта статья поможет понять, как можно быстро и просто установить фреймворк Django в режиме FastCGI на хостинге 1Gb.ru, а также как устанавливать собственные модули Python

Установка

Подготовка окружения

Внимание! Убедитесь, что ваш сайт работает под управлением web-сервера UNIX/Apache/FastCGI, это можно сделать, а также при необходимости сменить тип сервера, в разделе личного кабинета /Управление сайтами и серверами/.

1. На хостинговом сервере может быть установлено несколько версей Python, но поскольку Django работает с версией Python до 2.7 включительно и не работает с Python 3, то нам необходимо определить для себя версию Python по умолчанию.

Сделаем это через псевдонимы команд описываемые в файле ~/.bashrc . Выполнив команду:

$ export PYTHON_VERSION=`eselect python list --python2 | awk '/\*$/ {print $2}'`; echo ${PYTHON_VERSION}

мы увидим какая версия 2-ой ветки Python установлена на сервере. Ее мы и будем использовать.

Определим эту версию в качестве версии по умолчанию:

$ grep -q "${PYTHON_VERSION}" ~/.bashrc || sed -i "/happen/a alias python=${PYTHON_VERSION}" ~/.bashrc
$ source ~/.bashrc

Проверим:

$ python --version
Python 2.7.2

Если python показал версию 2.x, то можно переходить к следующему шагу, в противном случае обратитесь в поддержку хостинга.

2. Для настройки переменных PATH, PYTHONPATH в ваш ~/.bashrc добавьте соответствующие строки командами:

$ echo 'export PATH=${HOME}/python/bin:${HOME}/python/lib64/'${PYTHON_VERSION}'/site-packages:${PATH}' >> ~/.bashrc 
$ echo 'export PYTHONPATH=${HOME}/python/lib64/'${PYTHON_VERSION}'/site-packages:${PYTHONPATH}' >> ~/.bashrc
$ source ~/.bashrc

3. Создаем в корне домашнего каталога файл .pydistutils.cfg для настройки путей инсталляции модулей, следующей командой:

$ cat > ~/.pydistutils.cfg <<END
[install]
prefix = \${HOME}/python

[easy_install]
install_dir = \${HOME}/python/lib64/${PYTHON_VERSION}/site-packages
END

4. Создаем различные каталоги:

mkdir -p ~/src ~/python/lib64/${PYTHON_VERSION}/site-packages ~/django

5. Симлинк:

cd ~/python; ln -s lib64 lib; cd

Установка библиотек

  • Скачиваем и устанавливаем Django:
cd ~/src
wget http://www.djangoproject.com/download/1.2.1/tarball/
tar xzvf Django-1.2.1.tar.gz
cd Django-1.2.1
python setup.py install
  • Устанавливаем модуль flup, для работы Django в FastCGI режиме:
easy_install flup
  • Устанавливаем модуль MySQL-python для работы с базой MySQL
easy_install MySQL-python

Настройка приложения, запуск

  • Создаем проект
cd ~/django; django-admin.py startproject demo
  • Переходим в каталог с проектом и делаем базовую настройку:
cd demo

в файле settings.py редактируем строки в соответствие с параметрами вашей базы:

DATABASES = {
    'default': {
        'ENGINE': 'mysql', # Тип базы данных
        'NAME': '',        # Название базы данных
        'USER': '',        # Имя пользователя
        'PASSWORD': '',    # Пароль
        'HOST': '',        # Сервер базы данных (например mysql51.1gb.ru)
        'PORT': '',        # Порт для подключения к базе (оставить пустым)
    }
}


TIME_ZONE = 'Europe/Moscow'
LANGUAGE_CODE = 'ru-RU'

импорт данных в базу:

python manage.py syncdb

В процессе создания структуры базы будет предложено ввести параметры администратора, нужно согласиться (набрать yes) и ввести данные пользователя, который будет считаться администратором.

  • Переходим в каталог ~/http и делаем настройку FastCGI wrapper'а и правил редирета mod_rewrite.

Содержимое файла .htaccess:

Options +FollowSymlinks

AddHandler fcgid-script .fcgi

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]

Не забудьте поменять demo на название своего проекта!

Файл index.fcgi:

#!/usr/bin/python -OO

import sys, os, site

# Add a custom Python path.
PYTHON_CUSTOM_PATH = os.path.abspath (os.path.join (os.path.dirname (os.path.abspath (__file__)), \
                     '../python/lib64/python2.6/site-packages'))
sys.path.insert (0, PYTHON_CUSTOM_PATH)
site.addsitedir (PYTHON_CUSTOM_PATH)

# Add a custom Python path.
PYTHON_CUSTOM_PATH = os.path.abspath (os.path.join (os.path.dirname (os.path.abspath (__file__)), \
                     '../django'))
sys.path.insert (0, PYTHON_CUSTOM_PATH)

# Add a custom Python path.
os.chdir(os.path.join (PYTHON_CUSTOM_PATH, 'demo'))

os.environ['DJANGO_PROJECT'] = 'demo'
os.environ['DJANGO_SETTINGS_MODULE'] = 'demo.settings'

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="prefork", maxchildren=3, daemonize="false")
  • Создаем симлинк для CSS, JavaScript:

cd ~/http; ln -s ../python/lib64/python`python -c 'import sys; print sys.version[:3]'`/site-packages/django/contrib/admin/media

  • Выставляем права на выполнение:

chmod 750 ~/http/index.fcgi

Все. Можно попробовать обратиться по HTTP к вашему сайту, вы должны увидеть примерно это: http://django-demo.1gb.ru/

Перезагрузка

Если вы сделали какие-то изменения в проекте, то для того чтобы они вступили в силу необходимо перезапустить FastCGI приложение. Делается это так:

killall python`python -c 'import sys; print sys.version[:3]'`

Если не сработало - посмотрите список процессов командой top и найдите аналогичное.

Решение проблем

  • Сайт не запускается, 500-оя ошибка на сайте, в логе ошибок примерно следующее:
[Sun Nov 21 15:11:11 2010] [warn] [client 111.122.111.122] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Sun Nov 21 15:11:11 2010] [error] [client 111.122.111.122] Premature end of script headers: index.fcgi

В этом случае попробуйте убрать символы перевода строки в формате Windows из файла index.fcgi такой командой:

sed -i 's/^M$//' ~/http/index.fcgi

где ^M - это CTRL-V CTRL-M.

  • Сайт работает, но открытие страниц с большим количеством элементов (стили, картинки) происходит медленно, какие-то элементы не подгружаются. В лог-файлах могут быть такие ошибки:
[Fri Mar 04 18:49:21 2011] [warn] [client 195.250.26.6] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://www.example.com/
[Fri Mar 04 18:49:21 2011] [error] [client 195.250.16.6] Premature end of script headers: index.fcgi, referer: http://www.example.com/

Причина этого заключается в том, что не указаны либо указаны неправильно пути к статическим файлам (картинки, стили, JS-скрипты) и вместо того, чтобы сервер Apache отдавал их напрямую, отдача их в обозреватель происходит через обработку запроса Django-приложением. Это порождает большое количество процессов и, как следствие, превышение системных лимитов.

Решение заключается в правильном определении переменных:

MEDIA_ROOT = 
MEDIA_URL = 
ADMIN_MEDIA_PREFIX = 

в файле settings.py вашего приложения.

См. также

Ссылки

Личные инструменты