Thursday, March 22, 2012

Archlinux+django+virtualenv+fastcgi+nginx+postgresql

    Недавно пришлось настраивать nginx для работы с django проектом у себя на рабочем компе. Обычно, я использую для разработки SQLite и джанговский веб-сервер, поэтому никаких дополнительных действий совершать не приходится.

    Но вот возникла необходимость запустить такую связку, и хабр пришел на помощь. Хотя, мне пришлось пойти несколько другим путем. Не буду описывать процесс установки nginx, fastcgi, postgre и, тем более django. Всё это легко делается с помощью yaourt.

    Остановлюсь только на некоторых ключевых моментах, касающихся настройки этого всего добра.
#nginx.conf
user http;
worker_processes 1;
error_log  /var/log/nginx/error.log;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;    
    sendfile on;
    tcp_nodelay on;
    keepalive_timeout 65;

    include proj_fcgi.conf;    
}

#proj_fcgi.conf
server {
    listen 80;
    server_name proj.local;
    charset utf-8;
    access_log logs/proj.access.log;
    client_max_body_size 300m;
    include fastcgi_params;   

    location / {
        fastcgi_pass unix:/home/django_projects/proj/fastcgi.socket;
    }

в fastcgi_params понадобилось заменить строку

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
на
fastcgi_param PATH_INFO $fastcgi_script_name;

Еще написал такой вот скриптик-пускалку и положил его в корень проекта.

#server.sh


#!/bin/bash

SITE_ROOT="/home/django_projects/proj"
PYTHON=$SITE_ROOT/.env/bin/python #путь к virtualenv
PID_FILE="/tmp/proj.pid"
SOCK_FILE="$SITE_ROOT/fastcgi.socket"

COMMAND="$PYTHON ./manage.py runfcgi method=prefork socket=$SOCK_FILE pidfile=$PID_FILE"


case "$1" in

 "start") 

 sudo rc.d start postgresql
 sudo rc.d start nginx
 $COMMAND
 
 ;;

 "stop")
 sudo rc.d stop postgresql
 sudo rc.d stop nginx
 kill -9 `cat $PID_FILE`

 ;;

 "restart")

 $0 stop

 sleep 1

 $0 start

 ;;

 *) echo "Usage: ./server.sh {start|stop|restart}";;

esac

Вот, в общем-то и всё. Это максимально упростило мне процедуру запуска сайта локально.
Нужно только ввести в консоли 
/proj]$ ./server.sh start
И всё должно работать :3

No comments:

Post a Comment