|
Информация относится к устаревшим услугам, продуктам, технологиям, или просто устарела. Современные аналоги могут быть лучше или работать немного иначе.
[править] Общие сведенияЭта статья поможет понять, как можно быстро и просто установить фреймворк Django в режиме FastCGI на хостинге 1Gb.ru, а также как устанавливать собственные модули Python [править] Быстрая установкаВнимание! Убедитесь, что ваш сайт работает под управлением web-сервера Подключитесь к серверу по 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, пароль (нужно придумать самостоятельно) и еще раз пароль. [править] Пошаговая установка
[править] Подготовка окруженияВнимание! Убедитесь, что ваш сайт работает под управлением web-сервера 1. На хостинговом сервере может быть установлено несколько версей Python, но поскольку stable версия Django работает с версией Python до 2.7 включительно и не работает с Python 3, то нам необходимо определить для себя версию Python по умолчанию. Сделаем это через псевдонимы команд, описываемые в файле $ 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. Для настройки переменных $ 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. Создаем в корне домашнего каталога файл $ 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 в файле 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 (Не забудьте поменять $ 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. [править] Решение проблем
[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 из файла 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 = в файле [править] См. также[править] Ссылки
|
|





