Не так давно, перешел я на использование cherokee, т.к. он новый, стильный, молодежный :)
А вообще, пал выбор на него, т.к. из коробки хорошая работа с wsgi и другими штуками для python и ruby (да, пхп он тоже может). Также, не надо писать конфиг, есть клевая админка, в которой все функции делаются в пару кликов.
Также, за последнее время начал использовать virtualenv для питоно сайтов, чтобы держать разные версии библиотек и не мешать друг другу. В такое окружение я запихнул 1 старенький интернет-магазин на Django 1.1, хотя в системе работают сайты и с Django 1.2.4, собственно почитать, что такое virtualenx можно тут
Для начала определимся, что нам потребуется в системе:
- cherokee
- uwsgi
- 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 процесс запустится, значит здесь проблем нет.