Версия 15:00, 14 июня 2012 (править) 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>. | + | |
- | | + | |
- | '''1.''' На хостинговом сервере может быть установлено несколько версей Python, но поскольку 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 || sed -i "/happen/a alias python=${PYTHON_VERSION}\nalias easy_install=easy_install-$(echo ${PYTHON_VERSION} | tr -d python)" ~/.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 | + | |
- | [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 | + | |
- | | + | |
- | === Установка библиотек === | + | |
- | '''1.''' Скачиваем и устанавливаем Django последней версии (другие версии для загрузки можно посмотреть тут https://www.djangoproject.com/download/): | + | |
- | $ <nowiki>cd ~/src && lynx -source https://www.djangoproject.com/download/ | awk '/Latest release/ {url = gensub(/^.* <a href="(.*)">D.*tar\.gz.*/,"\\1",""); system ("wget -O Django.tar.gz "url)}'</nowiki> | + | |
- | $ tar xvfz Django.tar.gz && cd Django-* | + | |
- | $ python setup.py install | + | |
- | | + | |
- | '''2.''' Устанавливаем модуль flup, для работы Django в FastCGI режиме: | + | |
- | $ easy_install flup | + | |
- | | + | |
- | '''3.''' Устанавливаем модуль MySQL-python для работы с базой MySQL | + | |
- | $ easy_install MySQL-python | + | |
- | | + | |
- | === Настройка приложения, запуск === | + | |
- | '''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. | + | |
- | Содержимое файла .htaccess: | + | |
- | Options +FollowSymlinks | + | |
- | | + | |
- | AddHandler fcgid-script .fcgi | + | |
- | | + | |
- | RewriteEngine On | + | |
- | RewriteCond %{REQUEST_FILENAME} !-f | + | |
- | RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L] | + | |
- | | + | |
- | '''Не забудьте поменять <code>demo</code> на название своего проекта!''' | + | |
- | | + | |
- | Файл 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 из файла <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]] | + | |