Debian 6 установка и настройка django postgresql nginx uwsgi

Добавляем репозитории Wheezy для установки uWSGI
# vi /etc/apt/sources.list

deb http://ftp.debian.org/debian/ wheezy main contrib non-free
deb http://security.debian.org wheezy/updates main contrib non-free

Обновляем пакеты
# apt-get update
# apt-get upgrade

 

Установка PostgreSQL

Укажем адрес который будет слушать БД
# vi /etc/postgresql/9.0/main/postgresql.conf

listen_addresses = 'localhost, 192.168.200.7'

Перезапускаем сервис
# /etc/init.d/postgresql restart

Создаем нового пользователя
# su postgres
$ createuser usr1
could not change directory to "/root"
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

Изменим пароль для пользователя postgres
# passwd postgres pass!
# su postgres
# psql
psql (9.0.7)
Type "help" for help.
postgres=# ALTER ROLE postgres WITH ENCRYPTED PASSWORD 'pass!';

Создадим БД для созданного ранее пользователя usr1
$ createdb site1db --owner=usr1 -hlocalhost
Password: pass!

Установим пароль для пользователя usr1
# su postgres
# psql
psql (9.0.7)
Type "help" for help
postgres=# alter user usr1 password 'usr1pass';
ALTER ROLE

Проверим подключение пользователя к БД
$ psql -Uusr1 -dsite1db -W -hlocalhost
Password for user usr1:
psql (9.0.7)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

site1db=>

Устанавливаем nginx django и uWSGI
# apt-get install nginx python-pip build-essential python-dev libxml2-dev python-psycopg2 python-flup python-django
# aptitude -t unstable install uwsgi uwsgi-plugin-python python-virtualenv

Создаем директорию для сайта
# mkdir -p /var/www/site1.ru

Создадим директории для проекта
# mkdir /var/www/site1.ru/static ; mkdir /var/www/site1.ru/logs ; mkdir /var/www/site1.ru/conf

Настроим конфигурационный файл nginx
# vi /etc/nginx/sites-available/default

server {
    listen        80;
    listen        443;

    # domen
    server_name   site1.ru www.site1.ru;

    # path to logs     
    access_log    /var/www/site1.ru/logs/nginx_access.log;
    error_log     /var/www/site1.ru/logs/nginx_error.log;

    # path to django project
    root          /var/www/site1.ru;

    location /
    {
        # path to socket file      
        uwsgi_pass unix:///var/tmp/site1_uwsgi.sock;
        include uwsgi_params;

        # 8 — buffer count
        # 128k — buffer size
        uwsgi_buffers 8 128k;
    }

        # path to static files
        location /static/ {
        alias /var/www/site1.ru/static/;
        expires 30d;
    }
}

Настроим конфигурационный файл uWSGI
# vi /var/www/site1.ru/conf/uwsgi.yaml

uwsgi:
    # socket file
    socket: /var/tmp/site1_uwsgi.sock
    # path to django project
    pythonpath: /var/www/site1.ru
    # env var settings file
    env: DJANGO_SETTINGS_MODULE=settings
    # moudle name
    module: wsgi
    # path to log
    daemonize: /var/www/site1.ru/logs/uwsgi.log
    max-requests: 5000
    buffer-size: 32768
    harakiri: 30
    reload-mercy: 8
    master: 1
    no-orphans: 1
    # touch this file for restart uwsgi daemon
    touch-reload: /var/www/site1.ru/uwsgi

Создадим wsgi.py
# vi /var/www/site1.ru/wsgi.py

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Запустим uWSGI
# uwsgi -y /var/www/site1.ru/conf/uwsgi.yaml
[uWSGI] getting YAML configuration from /var/www/site1.ru/conf/uwsgi.yaml

Для повторного запуска можно прописать данную команду в init скрипт или cron

Перезапустим nginx
# /etc/init.d/nginx restart
Restarting nginx: nginx.

Дополнительная информация