FreeBSD 9 + Cherokee / uWSGI + PINAX

В данном топике рассмотрим такую интересную вещь, как Pinax — заготовку для создания сайтов на базе фреймворка Django (шаблонизатор, основные функции, web-сервер для тестировния), работающего в свою очередь на Python. Особенность Pinax в том, что нам предлагается не готовая CMS, а заготовки для разных типов проектов. Тут и регистрация пользователей с поддержкой openid и топики и комментарии и блоги, сообщества, твиты, галереи, теги и прочее. Для всего этого уже готова структура базы данных.

Начнем со сборки Cherokee из портов:

cd /usr/ports/www/cherokee
make install


Не забываем отметить галку uWSGI:



Будет собран Python:



Устанавливаем pip для удобной установки пакетов Python:

cd /usr/ports/devel/py-pip
make install


Также для начала нам не помешает поддержка sqlite и imaging:

cd /usr/ports/databases/py-sqlite3
make install
cd /usr/ports/graphics/py-imaging
make install


Устанавливаем virtualenv, с помощью которого мы создадим виртуальное окружение для нашего проекта, python с библиотеками будет располагаться в отдельной директории, эдакий jail:

/usr/local/bin/pip install virtualenv


Для работы с виртуальным окружением желателен bash, в дальнейшем будем использовать его:

cd /usr/ports/shells/bash
make install
/usr/local/bin/bash


Создадим виртуальное окружение и перейдем в него:

virtualenv mysite-env
source mysite-env/bin/activate


Устанавливаем Pinax внутри нашего виртуального окружения:

pip install Pinax


Просмотреть список заготовок проектов можно так:

pinax-admin setup_project -l


Создаем из шаблона social:

pinax-admin setup_project -b social mysite


При этом будет скачан Django и куча дополнений к нему согласно шаблону.

Открываем директорию с нашим новым проектом, создаем базу данных (будет использована sqlite) и запускаем web-сервер Django:

cd mysite
python manage.py syncdb
python manage.py runserver


Веб сервер будет работать на 127.0.0.1, порт 8000.

Можно запустить на всех интерфейсах, чтобы был доступ со внешки:

python manage.py runserver 0.0.0.0:8000


В шаблоне social мы видим готовую регистрацию, админку, твиты, топики, сообщества и многое другое:






Шаблон company — минималистичная CMS для создания сайта компании с редко обновляемым статическим контентом:



Шаблон code — для сайтов, посвященных программным продуктам. Тут есть wiki и топики:



Список заготовок этим не заканчивается.

Теперь настроим работу нашего проекта на Pinax через Cherokee.
Сначала мы должны будем перенести директории с нашим проектом mysite и виртуальное окружение mysite-env в директорию, доступную для Cherokee. Кроме того, uWSGI будет стартовать от пользователя и группы www, соответственно должны быть выставлены права в данных директориях.

Строка запуска uWSGI выглядит примерно так:

/usr/local/bin/uwsgi -s 127.0.0.1:62789 -M -p 2 -z 15 -L -l 128 --virtualenv /usr/local/www/mysite-env/ /usr/local/www/mysite/deploy/pinax.wsgi


Т.е. uWSGI, запускаемый от имени пользователя www запускает в виртуальном окружении /usr/local/www/mysite-env/ скрипт /usr/local/www/mysite/deploy/pinax.wsgi, с которого все и начинается.

Также нам возможно понадобится в settings.py прописать абсолютный путь к базе данный sqlite:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3", # Add "postgresql_psycopg2", "postgresql", "mysql", "sqlite3" or "oracle".
        "NAME": "/usr/local/www/mysite/dev.db", # Or path to database file if using sqlite3.
        "USER": "",                             # Not used with sqlite3.
        "PASSWORD": "",                         # Not used with sqlite3.
        "HOST": "",                             # Set to empty string for localhost. Not used with sqlite3.
        "PORT": "",                             # Set to empty string for default. Not used with sqlite3.
    }
}


Пример настроек Cherokee — правила виртуального хоста:



Настройка «Information Sources»



Фактически, все делается как и в случае с FastCGI — стартует несколько процессов, Cherokee передает им http запросы и возвращает ответы. Cherokee отвечает за балансировку нагрузки, при желании обслуживает статический контент, что очень предпочтительно.

Почитать:

www.slideshare.net/pydanny/pinax-long-tutorial-slides

Комментарии (1)

RSS свернуть / развернуть
+
+1
Почитал про FastCGI (с недавних пор интересуюсь CGI-технологиями). Оказывается, не все веб-серверы это дело поддерживают. Даже Apache не блещет. А вот легковесные Cherokee и Lighttpd — поддерживают полностью.

Интересно, пробовал ли кто-нибудь ли писать скрипты для FastCGI на bash? По-моему, это возможно.
avatar

yababay

  • 26 ноября 2011, 00:54

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.