Відмінності між версіями «Nginx Django»
| (Не показані 10 проміжних версій ще одного користувача) | |||
| Рядок 1: | Рядок 1: | ||
== Налаштування зв'язки Django та nginx == | == Налаштування зв'язки Django та nginx == | ||
| − | Операційна система Debian. | + | Операційна система [[Debian]] або [[CentOS]]. |
---- | ---- | ||
1. Встановлюємо все необхідне: | 1. Встановлюємо все необхідне: | ||
| − | apt-get install python nginx | + | 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; | ||
| Рядок 61: | Рядок 63: | ||
Обов'язково потрібно змінити користувача на відповідного (www-data або www в залежності від дистрибутиву) | Обов'язково потрібно змінити користувача на відповідного (www-data або www в залежності від дистрибутиву) | ||
#!/bin/sh | #!/bin/sh | ||
| − | su www-data -c "./manage.py runfcgi method=threaded socket=/var/www/'''energy-service'''/server.sock pidfile=/var/www/'''energy-service'''/server.pid" | + | 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