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

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

(Различия между версиями)
Перейти к: навигация, поиск
Версия 12:59, 27 апреля 2013 (править)
Renton (Обсуждение | вклад)
(Настройка приложения, запуск)
← К предыдущему изменению
Текущая версия (18:12, 22 июля 2016) (править) (отменить)
Renton (Обсуждение | вклад)
Django - быстрый старт» переименована в «Django - быстрый старт (устарело)»)
 
Строка 1: Строка 1:
-== Общие сведения ==+#REDIRECT [[Django - быстрый старт (устарело)]]
-Эта статья поможет понять, как можно быстро и просто установить фреймворк [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-сервера <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 && ln -s /usr/bin/${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+
- +
- $ env python -V+
- Python 2.7.2+
- +
-Если обе команды показали версию '''2.x''', то можно переходить к следующему шагу.+
- +
-'''7.''' Создаем в корне домашнего каталога файл <code>.pydistutils.cfg</code> для настройки путей инсталляции модулей, следующей командой:+
- $ 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/):+
- $ <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 режиме:+
- $ easy_install flup+
-если установка заканчивается так:+
- 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 появляется ошибка:+
- 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 <nowiki>http://hg.saddi.com/flup-py3.0</nowiki>+
-и устанавливаем:+
- $ 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+
-в файле <code>settings.py</code> редактируем строки в соответствие с параметрами вашей базы:+
- DATABASES = {+
- 'default': {+
- 'ENGINE': 'django.db.backends.'''mysql'''', # Тип базы данных+
- 'NAME': <nowiki>''</nowiki>, # Название базы данных+
- 'USER': <nowiki>''</nowiki>, # Имя пользователя+
- 'PASSWORD': <nowiki>''</nowiki>, # Пароль+
- 'HOST': <nowiki>''</nowiki>, # Сервер базы данных (например mysql51.1gb.ru)+
- 'PORT': <nowiki>''</nowiki>, # Порт для подключения к базе (оставить пустым)+
- }+
- }+
- +
- 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 ('''Не забудьте поменять <code>demo</code> на название своего проекта!''') :+
- $ 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 из файла <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-приложением. Это порождает большое количество процессов и, как следствие, превышение системных лимитов.+
- +
-Решение заключается в правильном определении переменных:+
- MEDIA_ROOT = ''+
- MEDIA_URL = ''+
- ADMIN_MEDIA_PREFIX = ''+
-в файле <code>settings.py</code> вашего приложения.+
- +
-== См. также ==+
-* [[Юникс шелл]]+
-== Ссылки ==+
-* [http://www.djangoproject.com/ Официальный сайт Django]+
-* [http://djbook.ru/ Русский перевод DjangoBook]+
-* [http://ru.wikipedia.org/wiki/Python Python на wikipedia.org]+
-* [http://www.python.org/ Официальный сайт языка Python]+
-* [http://peak.telecommunity.com/DevCenter/EasyInstall Документация по EasyInstall]+
- +
-[[Категория:Программирование]]+
-[[Категория:Python]]+

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

  1. REDIRECT Django - быстрый старт (устарело)
Личные инструменты