Відмінності між версіями «Nginx Django»

Матеріал з Wiki Welard
Перейти до навігації Перейти до пошуку
(Created page with '== Налаштування зв'язки Django та nginx == Операційна система Debian. ---- 1. Встановлюємо все необхідне: apt-get in...')
 
 
(Не показані 14 проміжних версій 2 користувачів)
Рядок 1: Рядок 1:
 
== Налаштування зв'язки Django та nginx ==
 
== Налаштування зв'язки Django та nginx ==
−
Операційна система Debian.
+
Операційна система [[Debian]] або [[CentOS]].
 
----
 
----
 
1. Встановлюємо все необхідне:
 
1. Встановлюємо все необхідне:
−
  apt-get install python nginx dajngo flux python-mysqldb python-imaging
+
  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
 
2. Настроюємо nginx (/etc/nginx). Ставорюємо файл /etc/nginx/django_fcgi_params для передачі параметрів у Django
 
  fastcgi_pass_header Authorization;                   
 
  fastcgi_pass_header Authorization;                   
Рядок 29: Рядок 31:
 
                       '"$http_referer" "$http_user_agent"'
 
                       '"$http_referer" "$http_user_agent"'
 
                       '"$gzip_ratio" "$uid_set" "$uid_got"';
 
                       '"$gzip_ratio" "$uid_set" "$uid_got"';
−
4. Добавляємо в каталог /etc/nginx/sites-available свої налаштування (файл Django):
+
4. Добавляємо в каталог /etc/nginx/sites-available свої налаштування (файл django-site):
 
  # Django project
 
  # Django project
 
  server {
 
  server {
Рядок 36: Рядок 38:
 
   error_log  /var/www/energy-service/error_log  info;
 
   error_log  /var/www/energy-service/error_log  info;
 
   location / {
 
   location / {
−
       fastcgi_pass unix:/var/www/'''energy-service'''/server.sock;
+
       '''fastcgi_pass unix:/var/www/energy-service/server.sock'''; # зв'язок з демоном django через сокет
−
       # fastcgi_pass 127.0.0.1:8000;
+
       # fastcgi_pass 127.0.0.1:8000; # можна і через порт
 
       include  django_fcgi_params;  
 
       include  django_fcgi_params;  
 
       access_log  /var/www/'''energy-service'''/logs/django.log  main;
 
       access_log  /var/www/'''energy-service'''/logs/django.log  main;
Рядок 55: Рядок 57:
 
   }
 
   }
 
  }
 
  }
 +
5. Робимо символічну посилку файла django-site в папку /etc/nginx/sites-available/sites-enabled
 +
 +
6. Потрібно створити запускний файл для створення [[Daemon|демона]] 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

Поточна версія на 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