Блог gigimon'а

Запуск Django в virtualenv из под cherokee

Не так давно, перешел я на использование cherokee, т.к. он новый, стильный, молодежный :)

А вообще, пал выбор на него, т.к. из коробки хорошая работа с wsgi и другими штуками для python и ruby (да, пхп он тоже может).  Также, не надо писать конфиг, есть клевая админка, в которой все функции делаются в пару кликов.

Также, за последнее время начал использовать virtualenv для питоно сайтов, чтобы держать разные версии библиотек и не мешать друг другу. В такое окружение я запихнул 1 старенький интернет-магазин на Django 1.1, хотя в системе работают сайты и с Django 1.2.4, собственно почитать, что такое virtualenx можно тут

Для начала определимся, что нам потребуется в системе:

  1. cherokee
  2. uwsgi
  3. python

Итак, начнем с создания места расположения нашего django сайта.

У меня все сайты хранятся в /var/www/domain, либо для virtualenv /var/www/virtualenv/domain, что позволяет различать, где что.

Первым делом, требуется установить virtualenv и создать окружение.

pip install virtualenv

cd /var/www/virtualenv

virtualenv --no-site-packages newsite

Первая строка устанавливает virtualev (можно также через easy_install), а вторая собственно, создает изолированное пространство, со своим интерпретатором и библиотеками.

После этого, надо установить нужные пакеты в изолированное пространство:

source newsite/bin/activate

easy_install pip

pip install packages

При работе в таком окружении, предполагается использование его интепретатора питона (версию можно другую поставить) и если оно активно у вас, то  скрипты будут запускаться изолированно.

Теперь, скопируем в наше окружение проект:

cp from/path to/path/var/www/virtualenv/newsite/www

Раз весь пример на основе Django, то следует рассказать про запускной скрипт.

Наш django-сайт будет работать через wsgi в связке с uwsgi, поэтому создадим в папке сайта файл: run.py  с содержимым:

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi

application = django.core.handler

s.wsgi.WSGIHandler()

И создадим файл uwsgi.xml с конфигурацией для uwsgi

/var/www/virtualsites/aw-d.ru/www/src
RUN

Все, с настройкой сайта покончено, перейдем к cherokee.

Для начала, запустим админку:

cherokee-admin -bваш_IP

После этого, заходим на этот IP порт 9090, вводим логин и пароль и видим панель управления cherokee. Именно в этой админке, можно делать все настройки сайтов и самого веб-сервера.

Для запуска сайта на Django в cherokee имеется мастер. Его мы и будем использовать:

Идем на вкладку vServers (вверху) затем слева на +, в окне выбираем Platforms - Django - Add

В появившемся мастере для Django жмем сразу Next, в путь Django Local Directory вписываем полный путь к джанго проекту, в моем случае /var/www/virtualsites/test/www

На следующем экране:

New Host Name - название домена

Document Root - где располагается проект

После нажатия на Create, в списке виртуальных серверов появится новый.

По-умолчанию, cherokee для django использует flup, поэтому надо будет изменить способ запуска. Для этого идем во вкладку Sources - Слева выбираем последний созданый источник (обычно DjangoNN)

В его настройках нам надо поле Interpreter, на такое:

/путь/до/uwsgi -s 127.0.0.1:60407 -x /полный/путь/до/файла/wsgi.xml -H /путь/до/виртуального/окружения/сайта -t 10 -M -p 1 -R 2000 -C

путь до виртуального окружения сайта вида: /var/www/virtualsites/site

Все, сохраняем эту конфигурацию и проверяем, как работает наш сайт.

Сайт должен будет работать, но без статики :)

Для настройки статики требуется прописать 1 правило в свойствах виртуального сервера. Идем в vServers - выбираем ваш сайт - вкладка Behavior - Rule management. Создаем новое нажатием на + и в появившемся окне выбираем Manual - Rule type - Directory, в Web Directory вписываем ваш урл для статики (я обычно использую /static) и жмем Add, пото заходим Handler и в Document Root вписываем полный путь до папки со статикой.

Все, после сохранения конфигурации и перезагрузки cherokee, ваш сайт должен работать.

Если сайт не работает, то следует проверить строку для запуска uwsgi, просто скопируйте всю строку из Interpreter в консоль и запустите, если wsgi процесс запустится, значит здесь проблем нет.

2008 — 2014