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

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

(Различия между версиями)
Перейти к: навигация, поиск
Версия 17:20, 31 мая 2010 (править)
NovaCxarmulo (Обсуждение | вклад)
(Настройка приложения, запуск)
← К предыдущему изменению
Текущая версия (20:31, 15 ноября 2016) (править) (отменить)
Renton (Обсуждение | вклад)

 
(54 промежуточные версии не показаны)
Строка 1: Строка 1:
 +<table cellspacing="0">
 +<tr style="background: #F7D9D9">
 +<td width="950px" style="vertical-align:top; border-top: 1px solid #D63838; border-left: 1px solid #D63838; border-bottom: 1px solid #D63838; border-right: 1px solid #D63838; padding: 1em;">
 +<span style="font-size: 28px; font-weight: bold;">Эта инструкция устарела и больше не будет обновляться.<br /><br />
 +Используйте [[Django - быстрый старт (поддерживаемая версия)]]</span>
 +</td>
 +</tr>
 +</table>
 +<br />
 +<br />
== Общие сведения == == Общие сведения ==
Эта статья поможет понять, как можно быстро и просто установить фреймворк [http://en.wikipedia.org/wiki/Django_(web_framework) Django] в режиме FastCGI на хостинге [http://www.1gb.ru 1Gb.ru], а также как устанавливать собственные модули [http://en.wikipedia.org/wiki/Python_(programming_language) Python] Эта статья поможет понять, как можно быстро и просто установить фреймворк [http://en.wikipedia.org/wiki/Django_(web_framework) Django] в режиме FastCGI на хостинге [http://www.1gb.ru 1Gb.ru], а также как устанавливать собственные модули [http://en.wikipedia.org/wiki/Python_(programming_language) Python]
-== Установка ==+==Быстрая установка==
 +'''Внимание!''' Убедитесь, что ваш сайт работает под управлением web-сервера <code>'''UNIX/Apache/FastCGI'''</code>, это можно сделать, а также при необходимости сменить тип сервера, в разделе личного кабинета <code>/Управление сайтами и серверами/</code>.
 + 
 +Подключитесь к серверу по ssh, параметры подключения те же что для FTP
 +выполните команды:
 + wget http://rekby.1gb.ru/distrib/django-install.sh
 + bash django-install.sh
 + 
 +Скрипт django-install попросит ввести имя проекта django, затем нужно будет выбрать тип базы данных. Если вы выбираете mysql дальше потребуется ввести сервер базы данных (например mysql65.1gb.ru, имя базы данных и пароль (имя пользователя вводить не надо - оно совпадает с именем базы и подставится автоматически).
 + 
 +Дальше скрипт будет устанавливать нужные модули и настраивать окружение сервера на работу django, после завершения настройки нужно будет ответить на обычные вопросы для нового django-проекта - создавать ли пользователя с правами администратора (введите yes), дальше введите имя пользователя (admin), ваш email, пароль (нужно придумать самостоятельно) и еще раз пароль.
 +<br />
 +<br />
 +<br />
 + 
 +== Пошаговая установка ==
 + 
 +<table cellspacing="0">
 +<tr style="background: #F7D9D9">
 +<td width="850px" style="vertical-align:top; border-top: 1px solid #D63838; border-left: 1px solid #D63838; border-bottom: 1px solid #D63838; border-right: 1px solid #D63838; padding: 1em;">
 +<span style="font-size: 16px; font-weight: bold;">Данная статья предназначена для технических специалистов.</span>
 +<p>Вы должны знать основы программирования, уметь пользоваться консольными программами и официальной документацией от разработчиков.</p>
 + 
 +В связи с тем, что на сервере могут обновиться версии программ, измениться конфигурация приложений, документация в статье может не соответствовать действительности, поэтому вы должны быть готовы разобраться с возможными проблемами <b>самостоятельно</b> или с помощью специалистов из платной поддержки http://1gbsup.ru/paidsu/, обычная поддержка хостинга <b>не оказывает</b> консультации по установке и отладке скриптов.
 +</td>
 +</tr>
 +</table>
 + 
=== Подготовка окружения === === Подготовка окружения ===
-'''Внимание!''' Убедитесь, что ваш сайт работает под управлением web-сервера UNIX/Apache/FastCGI, это можно сделать, а также при необходимости сменить тип сервера, в разделе личного кабинета /Управление сайтами и серверами/.+'''Внимание!''' Убедитесь, что ваш сайт работает под управлением web-сервера <code>'''UNIX/Apache/FastCGI'''</code>, это можно сделать, а также при необходимости сменить тип сервера, в разделе личного кабинета <code>/Управление сайтами и серверами/</code>.
 + 
 +'''1.''' На хостинговом сервере может быть установлено несколько версей Python, но поскольку stable версия Django работает с версией Python до 2.7 включительно и не работает с Python 3, то нам необходимо определить для себя версию Python по умолчанию.
 + 
 +Сделаем это через псевдонимы команд, описываемые в файле <code>~/.bashrc</code>, и симлинк. Выполнив команду:
 + $ export PYTHON_VERSION=`eselect python list --python2 | awk '/\*$/ {print $2}'`; echo ${PYTHON_VERSION}
 +мы увидим какая версия 2-ой ветки Python установлена на сервере. Ее мы и будем использовать.<br />
 + 
 +Определим эту версию в качестве версии по умолчанию:
 + $ grep -q "=${PYTHON_VERSION}" ~/.bashrc || ( [ -f "/usr/bin/easy_install-${PYTHON_VERSION}" ] \
 + && sed -i "/happen/a alias python=${PYTHON_VERSION}\nalias easy_install=easy_install-${PYTHON_VERSION}" ~/.bashrc \
 + || sed -i "/happen/a alias python=${PYTHON_VERSION}\nalias easy_install=easy_install-$(echo ${PYTHON_VERSION} | tr -d python)" ~/.bashrc )
 + 
 + $ source ~/.bashrc
 + 
 +'''2.''' Создаем необходимые каталоги:
 + $ mkdir -p ~/src ~/python/bin ~/python/lib64/${PYTHON_VERSION}/site-packages ~/django
 + 
 +'''3.''' Симлинк на lib64:
 + $ cd ~/python; ln -s lib64 lib; cd
 + 
 +'''4.''' Симлинк на нужную нам версию python:
 + $ cd ~/python/bin && cp -a /usr/bin/${PYTHON_VERSION} . && ln -sf ${PYTHON_VERSION} python
 + 
 +'''5.''' Для настройки переменных <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
 + 
 +'''6.''' Проверим что получилось:
 + $ python -V
 + Python 2.7.2
-Везде, где написано python2.6 нужно подставлять версию python, работающую на вашем сервере (первые два числа)+ $ env python -V
 + Python 2.7.2
- python --version+Если обе команды показали версию '''2.x''', то можно переходить к следующему шагу.
-* Создаем в корне домашнего каталога файл <code>.pydistutils.cfg</code> для настройки путей инсталляции модулей:+'''7.''' Создаем в корне домашнего каталога файл <code>.pydistutils.cfg</code> для настройки путей инсталляции модулей, следующей командой:
 + $ cat > ~/.pydistutils.cfg <<END
[install] [install]
- prefix = $HOME/python+ prefix = \$HOME/python
[easy_install] [easy_install]
- install_dir = $HOME/python/lib64/python2.6/site-packages+ install_dir = \$HOME/python/lib64/${PYTHON_VERSION}/site-packages
-* Для настройки переменных <code>PATH</code>, <code>PYTHONPATH</code> добавьте строки:+ END
- export PATH=$PATH:$HOME/python/bin:$HOME/python/lib64/python2.6/site-packages+
- export PYTHONPATH=$PYTHONPATH:$HOME/python/lib64/python2.6/site-packages+
-в ваш <code>~/.bashrc</code>+
-* Выполняем команду:+=== Установка библиотек ===
- source ~/.bashrc+'''1.''' Скачиваем и устанавливаем Django последней версии (другие версии для загрузки можно посмотреть тут https://www.djangoproject.com/download/):
-для того, чтобы сделанные изменения вступили в силу.+ $ <nowiki>cd ~/src && lynx -source https://www.djangoproject.com/download/ \
 + | awk '/Latest release/ {url = gensub(/.*>Django-(.*)\.tar\.gz.*/,"\\1",""); system ("wget -O Django.tar.gz https://www.djangoproject.com/download/"url"/tarball/")}'</nowiki>
 + $ tar xvfz Django.tar.gz && cd Django-*
 + $ python setup.py install
-* Создаем различные каталоги:+'''2.''' Устанавливаем модуль flup, для работы Django в FastCGI режиме:
- mkdir -p ~/src ~/python/lib64/python2.6/site-packages ~/django+ $ easy_install flup
-* Симлинк:+если установка заканчивается так:
- cd ~/python; ln -s lib64 lib; cd+ error: None
 +то устанавливаем flup по прямой ссылке:
 + $ easy_install <nowiki>"http://pypi.python.org/packages/source/f/flup/flup-1.0.2.tar.gz#md5=24dad7edc5ada31dddd49456ee8d5254"</nowiki>
-=== Установка библиотек ===+Если выбран '''python 3''' и при установке flup появляется ошибка:
-* Скачиваем и устанавливаем Django:+ File "setup.py", line 2, in <module>
- cd ~/src+ File "/tmp/easy_install-cnsm9_/flup-1.0.2/ez_setup.py", line 98
- wget http://www.djangoproject.com/download/1.2.1/tarball/+ except pkg_resources.VersionConflict, e:
- tar xzvf Django-1.2.1.tar.gz+ ^
- cd Django-1.2.1+ SyntaxError: invalid syntax
- python setup.py install+ 
 +то необходимо скачать flup поддерживащий 3-ю версию python. Качаем с репозитория:
 + $ cd ~/src && hg clone <nowiki>http://hg.saddi.com/flup-py3.0</nowiki>
 +и устанавливаем:
 + $ cd flup-py3.0 && python setup.py install
-* Устанавливаем модуль flup, для работы Django в FastCGI режиме:+'''3.''' Устанавливаем модуль MySQL-python для работы с базой MySQL
- easy_install flup+ $ easy_install MySQL-python
-* Устанавливаем модуль MySQL-python для работы с базой MySQL+'''Важное замечание.''' В случае использования '''Python 3''', модули для работы с MySQL, SQLite3 работать не будут. Поэтому единственным вариантом является использование базы данных PostgreSQL. Соответственно, для работы с этой базой ставим модуль:
- easy_install MySQL-python+ $ easy_install psycopg2
=== Настройка приложения, запуск === === Настройка приложения, запуск ===
-* Создаем проект+'''1.''' Создаем проект
- cd ~/django; django-admin.py startproject demo+ $ cd ~/django; django-admin.py startproject demo
-* Переходим в каталог с проектом и делаем базовую настройку:+'''2.''' Переходим в каталог с проектом и делаем базовую настройку:
- cd demo+ $ cd ~/django/demo/demo
в файле <code>settings.py</code> редактируем строки в соответствие с параметрами вашей базы: в файле <code>settings.py</code> редактируем строки в соответствие с параметрами вашей базы:
DATABASES = { DATABASES = {
'default': { 'default': {
- 'ENGINE': 'mysql', # Тип базы данных+ 'ENGINE': 'django.db.backends.'''mysql'''', # Тип базы данных
'NAME': <nowiki>''</nowiki>, # Название базы данных 'NAME': <nowiki>''</nowiki>, # Название базы данных
'USER': <nowiki>''</nowiki>, # Имя пользователя 'USER': <nowiki>''</nowiki>, # Имя пользователя
Строка 60: Строка 138:
} }
} }
- 
TIME_ZONE = 'Europe/Moscow' TIME_ZONE = 'Europe/Moscow'
LANGUAGE_CODE = 'ru-RU' LANGUAGE_CODE = 'ru-RU'
импорт данных в базу: импорт данных в базу:
- python manage.py syncdb+ $ cd ~/django/demo && LANG=ru_RU.utf8 python manage.py syncdb
В процессе создания структуры базы будет предложено ввести параметры администратора, нужно согласиться (набрать yes) и ввести данные пользователя, который будет считаться администратором. В процессе создания структуры базы будет предложено ввести параметры администратора, нужно согласиться (набрать yes) и ввести данные пользователя, который будет считаться администратором.
-* Переходим в каталог ~/http и делаем настройку FastCGI wrapper'а и правил редирета mod_rewrite.+'''3.''' Переходим в каталог ~/http и делаем настройку FastCGI wrapper'а и правил редирета mod_rewrite:
-Содержимое файла .htaccess:+ 
 + $ cat > ~/http/.htaccess <<END
Options +FollowSymlinks Options +FollowSymlinks
Строка 76: Строка 154:
RewriteEngine On RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]+ RewriteRule ^(.*)$ index.fcgi/\$1 [QSA,L]
 + END
-'''Не забудьте поменять <code>demo</code> на название своего проекта!'''+Файл index.fcgi ('''Не забудьте поменять <code>demo</code> на название своего проекта!''') :
- + $ cat > ~/http/index.fcgi <<END
-Файл index.fcgi:+ #!/usr/bin/${PYTHON_VERSION} -OO
- #!/usr/bin/python -OO+
import sys, os, site import sys, os, site
# Add a custom Python path. # Add a custom Python path.
- PYTHON_CUSTOM_PATH = os.path.abspath (os.path.join (os.path.dirname (os.path.abspath (__file__)), \+ PYTHON_CUSTOM_PATH = os.path.abspath (os.path.join (os.path.dirname (os.path.abspath (__file__)), \\
- '../python/lib64/python2.6/site-packages'))+ '../python/lib64/${PYTHON_VERSION}/site-packages'))
sys.path.insert (0, PYTHON_CUSTOM_PATH) sys.path.insert (0, PYTHON_CUSTOM_PATH)
site.addsitedir (PYTHON_CUSTOM_PATH) site.addsitedir (PYTHON_CUSTOM_PATH)
# Add a custom Python path. # Add a custom Python path.
- PYTHON_CUSTOM_PATH = os.path.abspath (os.path.join (os.path.dirname (os.path.abspath (__file__)), \+ PYTHON_CUSTOM_PATH = os.path.abspath (os.path.join (os.path.dirname (os.path.abspath (__file__)), \\
- '../django'))+ '../django/'''demo''''))
sys.path.insert (0, PYTHON_CUSTOM_PATH) sys.path.insert (0, PYTHON_CUSTOM_PATH)
# Add a custom Python path. # Add a custom Python path.
- os.chdir(os.path.join (PYTHON_CUSTOM_PATH, 'demo'))+ os.chdir(os.path.join (PYTHON_CUSTOM_PATH, ''''demo''''))
- os.environ['DJANGO_PROJECT'] = 'demo'+ os.environ['DJANGO_PROJECT'] = ''''demo''''
- os.environ['DJANGO_SETTINGS_MODULE'] = 'demo.settings'+ os.environ['DJANGO_SETTINGS_MODULE'] = ''''demo'''.settings'
from django.core.servers.fastcgi import runfastcgi from django.core.servers.fastcgi import runfastcgi
- runfastcgi(method="prefork", maxchildren=3, daemonize="false")+ runfastcgi(method="prefork", minspare=1, maxspare=2, daemonize="false")
 + END
-* Создаем симлинк для CSS, JavaScript:+'''4.''' Создаем симлинк для CSS, JavaScript:
-cd ~/http; ln -s ../python/lib64/python2.6/site-packages/django/contrib/admin/media+ $ cd ~/http; ln -sf ../python/lib64/${PYTHON_VERSION}/site-packages/django/contrib/admin/static
 +'''5.''' Выставляем права на выполнение:
 + $ chmod 755 ~/http/index.fcgi; rm -v ~/http/index.html
-Все. Можно попробовать обратиться по HTTP к вашему сайту, вы должны увидеть примерно это: http://django-demo.1gb.ru/+Все. Можно попробовать открыть сайт в обозревателе.
 +Демо версию Django, установленного на хостинге 1Gb.ru, можно посмотреть по этому адресу: http://test-l24-django.1gb.ru/
=== Перезагрузка === === Перезагрузка ===
-Если вы сделали какие-то изменения в проекте, то для того чтобы они вступили в силу необходимо перезапустить FastCGI приложение. Делается это так:+Если вы сделали какие-то изменения в проекте, то для того чтобы они вступили в силу, необходимо перезапустить FastCGI приложение. Делается это так:
- killall python2.6+ killall index.fcgi
 + 
 +Если не сработало - посмотрите список процессов командой top и найдите что-то аналогичное про .fcgi или python.
 + 
 +=== Решение проблем ===
 +* '''Сайт не запускается, 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 из файла <code>index.fcgi</code> такой командой:
 + 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: <nowiki>http://www.example.com/</nowiki>
 + [Fri Mar 04 18:49:21 2011] [error] [client 195.250.16.6] Premature end of script headers: index.fcgi, referer: <nowiki>http://www.example.com/</nowiki>
 + 
 +Причина этого заключается в том, что не указаны либо указаны неправильно пути к статическим файлам (картинки, стили, JS-скрипты) и вместо того, чтобы сервер Apache отдавал их напрямую, отдача их в обозреватель происходит через обработку запроса Django-приложением. Это порождает большое количество процессов и, как следствие, превышение системных лимитов.
-Если не сработало - посмотрите список процессов командой top и найдите аналогичное+Решение заключается в правильном определении переменных:
 + MEDIA_ROOT = ''
 + MEDIA_URL = ''
 + ADMIN_MEDIA_PREFIX = ''
 +в файле <code>settings.py</code> вашего приложения.
== См. также == == См. также ==
Строка 127: Строка 228:
[[Категория:Программирование]] [[Категория:Программирование]]
[[Категория:Python]] [[Категория:Python]]
 +[[Категория:Django]]

Текущая версия

Эта инструкция устарела и больше не будет обновляться.

Используйте Django - быстрый старт (поддерживаемая версия)



Содержание

[править] Общие сведения

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

[править] Быстрая установка

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

Подключитесь к серверу по ssh, параметры подключения те же что для FTP выполните команды:

wget http://rekby.1gb.ru/distrib/django-install.sh
bash django-install.sh

Скрипт django-install попросит ввести имя проекта django, затем нужно будет выбрать тип базы данных. Если вы выбираете mysql дальше потребуется ввести сервер базы данных (например mysql65.1gb.ru, имя базы данных и пароль (имя пользователя вводить не надо - оно совпадает с именем базы и подставится автоматически).

Дальше скрипт будет устанавливать нужные модули и настраивать окружение сервера на работу django, после завершения настройки нужно будет ответить на обычные вопросы для нового django-проекта - создавать ли пользователя с правами администратора (введите yes), дальше введите имя пользователя (admin), ваш email, пароль (нужно придумать самостоятельно) и еще раз пароль.


[править] Пошаговая установка

Данная статья предназначена для технических специалистов.

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

В связи с тем, что на сервере могут обновиться версии программ, измениться конфигурация приложений, документация в статье может не соответствовать действительности, поэтому вы должны быть готовы разобраться с возможными проблемами самостоятельно или с помощью специалистов из платной поддержки http://1gbsup.ru/paidsu/, обычная поддержка хостинга не оказывает консультации по установке и отладке скриптов.

[править] Подготовка окружения

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

1. На хостинговом сервере может быть установлено несколько версей Python, но поскольку stable версия 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 || ( [ -f "/usr/bin/easy_install-${PYTHON_VERSION}" ] \
&& sed -i "/happen/a alias python=${PYTHON_VERSION}\nalias easy_install=easy_install-${PYTHON_VERSION}" ~/.bashrc \
|| sed -i "/happen/a alias python=${PYTHON_VERSION}\nalias easy_install=easy_install-$(echo ${PYTHON_VERSION} | tr -d python)" ~/.bashrc )
$ source ~/.bashrc

2. Создаем необходимые каталоги:

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

3. Симлинк на lib64:

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

4. Симлинк на нужную нам версию python:

$ cd ~/python/bin && cp -a /usr/bin/${PYTHON_VERSION} . && ln -sf ${PYTHON_VERSION} python

5. Для настройки переменных 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

6. Проверим что получилось:

$ python -V
Python 2.7.2
$ env python -V
Python 2.7.2

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

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

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

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

[править] Установка библиотек

1. Скачиваем и устанавливаем Django последней версии (другие версии для загрузки можно посмотреть тут https://www.djangoproject.com/download/):

$ cd ~/src && lynx -source https://www.djangoproject.com/download/ \
  | awk '/Latest release/ {url = gensub(/.*>Django-(.*)\.tar\.gz.*/,"\\1",""); system ("wget -O Django.tar.gz https://www.djangoproject.com/download/"url"/tarball/")}'
$ tar xvfz Django.tar.gz && cd Django-*
$ python setup.py install

2. Устанавливаем модуль flup, для работы Django в FastCGI режиме:

$ easy_install flup

если установка заканчивается так:

error: None

то устанавливаем flup по прямой ссылке:

$ easy_install "http://pypi.python.org/packages/source/f/flup/flup-1.0.2.tar.gz#md5=24dad7edc5ada31dddd49456ee8d5254"

Если выбран python 3 и при установке flup появляется ошибка:

File "setup.py", line 2, in <module>
  File "/tmp/easy_install-cnsm9_/flup-1.0.2/ez_setup.py", line 98
    except pkg_resources.VersionConflict, e:
                                        ^
SyntaxError: invalid syntax

то необходимо скачать flup поддерживащий 3-ю версию python. Качаем с репозитория:

$ cd ~/src && hg clone http://hg.saddi.com/flup-py3.0

и устанавливаем:

$ cd flup-py3.0 && python setup.py install

3. Устанавливаем модуль MySQL-python для работы с базой MySQL

$ easy_install MySQL-python

Важное замечание. В случае использования Python 3, модули для работы с MySQL, SQLite3 работать не будут. Поэтому единственным вариантом является использование базы данных PostgreSQL. Соответственно, для работы с этой базой ставим модуль:

$ easy_install psycopg2

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

1. Создаем проект

$ cd ~/django; django-admin.py startproject demo

2. Переходим в каталог с проектом и делаем базовую настройку:

$ cd ~/django/demo/demo

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

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

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

$ cd ~/django/demo && LANG=ru_RU.utf8 python manage.py syncdb

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

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

$ cat > ~/http/.htaccess <<END
Options +FollowSymlinks

AddHandler fcgid-script .fcgi

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

Файл index.fcgi (Не забудьте поменять demo на название своего проекта!) :

$ cat > ~/http/index.fcgi <<END
#!/usr/bin/${PYTHON_VERSION} -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/${PYTHON_VERSION}/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/demo'))
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", minspare=1, maxspare=2, daemonize="false")
END

4. Создаем симлинк для CSS, JavaScript:

$ cd ~/http; ln -sf ../python/lib64/${PYTHON_VERSION}/site-packages/django/contrib/admin/static

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

$ chmod 755 ~/http/index.fcgi; rm -v ~/http/index.html

Все. Можно попробовать открыть сайт в обозревателе. Демо версию Django, установленного на хостинге 1Gb.ru, можно посмотреть по этому адресу: http://test-l24-django.1gb.ru/

[править] Перезагрузка

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

killall index.fcgi

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

[править] Решение проблем

  • Сайт не запускается, 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 вашего приложения.

[править] См. также

[править] Ссылки

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