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>. |
- | + | '''1.''' На хостинговом сервере может быть установлено несколько версей Python, но поскольку Django работает с версией Python до 2.7 включительно и не работает с Python 3, то нам необходимо определить для себя версию Python по умолчанию. | |
- | 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 || 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/ | + | 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.''' Создаем различные каталоги: | |
- | | + | mkdir -p ~/src ~/python/lib64/${PYTHON_VERSION}/site-packages ~/django |
- | + | ||
- | + | '''5.''' Симлинк: | |
- | + | ||
- | + | ||
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
вашего приложения.