Как стать автором
Обновить

Мониторим Django проекты в top'e

Время на прочтение3 мин
Количество просмотров2K
В этой статье я опишу как настроить Django так, что б на сервере в top'е можно было видеть нагрузку на сервер от каждого из Django-проектов.

1 — Установка Django на FreeBSD из портов


У меня на сервере стоит FreeBSD 8.0, всяческие полезности типа MySQL, Python2.6, nginx и пр уже установлены. Наиболее простым способом установки Django я избрал простую и банальную установку из портов:
cd /usr/ports/www/py-django
make install clean

при установке выбираем
[X] POSTGRESQL PostgreSQL support
[X] MYSQL MySQL support
[X] FASTCGI FastCGI support

Django 1.3.1 установлен в /usr/local/lib/python2.6/site-packages/django и готов к работе.

2 — Подготавливаем почву к работе Django


Профи рекомендуют хранить проекты в отдельной дире (например, у какого-то пользователя в /data рядом с /www). Прислушаемся к профи и заселим проекты к деф-пользователю хостинга — hostalot его завут.
Django проекты будут жить по следующему пути — /home/hostalot/data/django
Создаём симлинк на Django в этой дире и проверяем:
cd /home/hostalot/data/django
ln -s /usr/local/lib/python2.6/site-packages/django django
python
>>> import django
>>> exit()

3 — Создаём новый проект


Создадим Django-проект для сайта hostalot.ru, тк точки использовать нельзя, заменяем на подчёркивание — hostalot_ru
Заодно неупустим момент и создадим диру с статикой, которую в последствии будет отруливать непосредственно nginx (об этом ниже).
python django/bin/django-admin.py startproject hostalot_ru
mkdir /home/hostalot/data/django/hostalot_ru/media

В конфиг-файле нашего нового проекта (/home/hostalot/data/django/hostalot_ru/settings.py) отредактируем настроечки в обязательном порядке.

4 — Запуск Django проектов


Создаём исполняемый файл /usr/local/bin/hostalot_ru
#!/usr/local/bin/bash
exec -a hostalot_ru /usr/local/bin/python $1 $2 $3 $4 $5 $6 $7

Далее создаём /usr/local/etc/rc.d/hostalot_ru
#!/usr/local/bin/bash
# Replace these three settings.
. /etc/rc.subr
name=hostalot_ru # your project name
rcvar=`set_rcvar`
load_rc_config $name
PROJDIR="/home/hostalot/data/django/$name"
PIDFILE="$PROJDIR/$name.pid"
HOST="127.0.0.1" # local
PORT="9010" # may be any foreach 9010-9900
METHOD="threaded" # may be "pre fork"
command=/usr/local/bin/$name
command_args=" $PROJDIR/manage.py runfcgi method=$METHOD host=$HOST port=$PORT pidfile=$PIDFILE"
run_rc_command "$1"

Не забываем дать этим файлам права на выполнение:
chmod 555 /usr/local/bin/hostalot_ru
chmod 555 /usr/local/etc/rc.d/hostalot_ru

Добавляем в /etc/rc.conf автозапуск нашего проекта:
hostalot_ru_enable="YES"

Синхронизируем бд для Django и стартуем выделенного демона выполняющего наш проект:
cd /home/hostalot/data/django/hostalot_ru
python ./manage.py syncdb
/usr/local/etc/rc.d/hostalot_ru restart

Конфигурация nginx


Создаём файл с nginx'овым конфигом fastcgi для Django /usr/local/etc/nginx/django_fastcgi:
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_ruTHOD $request_ruthod;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_SOFTWARE "nginx";
fastcgi_param GATEWAY_INTERFACE "CGI/1.1";

Создаём файл конфигурации домена /usr/local/etc/nginx/confs/hostalot_ru.conf:
server {
listen 193.106.172.16:80;
server_name hostalot.ru;
set $proot "/home/hostalot/data/django/hostalot_ru/media";
location / {
fastcgi_pass 127.0.0.1:9010;
include django_fastcgi;
client_max_body_size 120m;
access_log main;
error_log main;
root $proot;
}
location ~* ^/.+\.(htm|swf|flv|xml|ico|jpg|jpeg|js|css|png|gif|mpg|avi|mp3|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ {
root $proot;
limit_rate 2000K;
access_log off;
}
}

Рестартуем nginx:
/usr/local/etc/rc.d/nginx restart


Итого: каждый Django-проект имеет свой демон, который в топе отмечен его суффиксом, вся статика кешируется нгинксом.
Теги:
Хабы:
-10
Комментарии5

Публикации

Истории

Работа

Python разработчик
142 вакансии

Ближайшие события