В данный момент самыми распространенными способами запуска django приложений, являются Apache + mod_python, и связка lightppd + mod_fastcgi + flup. Второй способ ест меньше ресурсов и в целом рекомендуется для маленьких и средних сайтов (сравнение lighttpd, apache). О нем я и буду рассказывать.
Для начала нам необходимы следующие вещи:
- Проект на Django, который мы будем запускать
- lighttpd (http://www.lighttpd.net/)
- flup (http://trac.saddi.com/flup -- набор WSGI компонентов на Python)
sudo aptitude install lightppdFlup можно установить используя 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Вот так все просто.
Комментариев нет:
Отправить комментарий