понедельник, 11 мая 2009 г.

Настройка окружения и развертка. Часть третья — lighttpd + mod_fastcgi + Flup

В данный момент самыми распространенными способами запуска django приложений, являются Apache + mod_python, и связка lightppd + mod_fastcgi + flup. Второй способ ест меньше ресурсов и в целом рекомендуется для маленьких и средних сайтов (сравнение lighttpd, apache). О нем я и буду рассказывать.

Для начала нам необходимы следующие вещи:

Если у Вас Debian-based операционная система, то lighttpd должен быть в репозитариях, чтобы его установить достаточно ввести команду:
sudo aptitude install lightppd
Flup можно установить используя easy_install
sudo easy_install flup
Дальше — пишем конфиг для lighttpd (приведен пример для Debian, возможно в Вашей системе, будут некоторые отличия):
# Load needed modules
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_rewrite",
"mod_fastcgi",
)

server.document-root = "/var/www/" # Ваш DocumentRoot

## Директория для загружаемых файлов, очищается каждый день.
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )

## Где будем хранить лог ошибок
server.errorlog = "/var/log/lighttpd/error.log"

#### Куда будем писать access логи
accesslog.filename = "/var/log/lighttpd/access.log"

# Указываем, какие у нас могут быть не статические файлы
static-file.exclude-extensions = (".fcgi" )

## Биндимся на порт 8080
server.port = 8080

## Храним PID процесса в этом файле (используется для различных RC скриптов)
server.pid-file = "/var/run/lighttpd.pid"

#### Настройки compress модуля
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css")

# Подключаем определения для mime-типов.
include_shell "/usr/share/lighttpd/create-mime.assign.pl"

# Настройки FastCGI

fastcgi.server = (
"/myproject.fcgi" => (
"main" => (
"socket" => "/myproject.sock",
"check-local" => "disable",
)
),
)
alias.url = (
# подключаем admin-media по location -- /media/
"/media" => "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/",
)

# делаем реврайт урлов
url.rewrite-once = (
"^(/media.*)$" => "$1",
"^/favicon\.ico$" => "/media/favicon.ico",
"^(/.*)$" => "/myproject.fcgi$1",
)

Отлично, сохраняем это все в lighttpd.conf, и запускаем lighttpd
lighttpd -f lighttpd.conf
Заходим по адресу http://localhost:8080/ и видим 500-ую ошибку. Дальше нам необходимо запустить связку django + flup.

Перед тем, как продолжить хочу сказать, что иногда у меня получались кривые урлы в админке, привязанные к /myproject.fcgi. Чтобы их точно не было, откроем settings.py проекта, и впишем туда следующую опцию:
FORCE_SCRIPT_NAME = ''
Теперь все готово. Запускаем:
python manage.py runfcgi daemonize=false socket=/myproject.sock method=threaded
Заходим по адресу http://localhost:8080/ и любуемся. Если до сих пор видим ошибку с кодом 500, проверяем, имеет ли lighttpd право на запись в /myproject.sock.

Все возможные параметры к команде runfcgi мы можем узнать набрав:
./manage.py help runfcgi
Вот так все просто.

Комментариев нет:

Отправить комментарий