Відмінності між версіями «Nginx Django»
(Немає відмінностей)
|
Поточна версія на 12:42, 12 жовтня 2009
Налаштування зв'язки Django та nginx
Операційна система Debian або CentOS.
1. Встановлюємо все необхідне:
apt-get install python nginx django flux python-mysqldb python-imaging
для CentOS потрібно встановити MySQL-python без egg!!!
2. Настроюємо nginx (/etc/nginx). Ставорюємо файл /etc/nginx/django_fcgi_params для передачі параметрів у Django
fastcgi_pass_header Authorization; fastcgi_intercept_errors off; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; 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";
3. У файл /etc/nginx/nginx.conf добавляємо у секцію http {}
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent $body_bytes_sent '
'"$http_referer" "$http_user_agent"'
'"$gzip_ratio" "$uid_set" "$uid_got"';
4. Добавляємо в каталог /etc/nginx/sites-available свої налаштування (файл django-site):
# Django project
server {
listen 80;
server_name energy-service.com;
error_log /var/www/energy-service/error_log info;
location / {
fastcgi_pass unix:/var/www/energy-service/server.sock; # зв'язок з демоном django через сокет
# fastcgi_pass 127.0.0.1:8000; # можна і через порт
include django_fcgi_params;
access_log /var/www/energy-service/logs/django.log main;
}
# location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|js)$ {
# root /var/www/energy-service/site;
# access_log off;
# expires 30d;
# }
location /sm {
root /var/www/energy-service/site;
access_log off;
}
location /media {
root /var/lib/python-support/python2.5/django/contrib/admin;
access_log off;
}
}
5. Робимо символічну посилку файла django-site в папку /etc/nginx/sites-available/sites-enabled
6. Потрібно створити запускний файл для створення демона django
Обов'язково потрібно змінити користувача на відповідного (www-data або www в залежності від дистрибутиву)
#!/bin/sh kill `cat /var/www/energy-service/server.pid` su www-data -c "./manage.py runfcgi method=threaded socket=/var/www/energy-service/server.sock pidfile=/var/www/energy-service/server.pid"
7. Рестартуємо nginx:
invoke-rc.d nginx restart
Можна вдосконалити запускний файл демона:
#!/bin/sh
DIR="/var/www/energy-service"
APPLICATION='es'
PID="$DIR/server.pid"
SOCKET="$DIR/server.sock"
ACTION=$1
NEED_START="yes"
PROCESS=""
if [ -f $PID ]; then
pid=$(cat $PID)
if [ -n "$pid" ]; then
PROCESS=$(ps -p $pid --no-headers)
if [ -n "$PROCESS" ]; then
echo "Found active daemon with pid $pid"
if [ "$ACTION" == "restart" -o "$ACTION" == "stop" ]; then
echo "Killing $pid"
kill $pid
else
NEED_START="no"
fi
fi
fi
fi
if [ -z "$PROCESS" ]; then
echo "No active daemon"
fi
if [ "$ACTION" == "stop" ]; then
NEED_START="no"
fi
if [ "$NEED_START" == "yes" ]; then
echo "Starting django daemon..."
su www-data -c "/usr/bin/env python $DIR/$APPLICATION/manage.py runfcgi method=threaded socket=$SOCKET pidfile=$PID umask=000"
fi
Для перестраховки можна викликати скрітп кожні 5 хв за допомогою крона:
*/5 * * * * /var/www/fcgi_do.sh start