Версия 13:25, 20 апреля 2013 (править) Renton (Обсуждение | вклад) ← К предыдущему изменению |
Текущая версия (18:12, 22 июля 2016) (править) (отменить) Renton (Обсуждение | вклад) |
Строка 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 | + | |
- | | + | |
- | '''Не забудьте поменять <code>demo</code> на название своего проекта!''' | + | |
- | | + | |
- | Файл index.fcgi: | + | |
- | $ 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", maxchildren=3, 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]] | + | |