Часть инфы слизана с http://habrahabr.ru/post/136295, сам ставил с этого мануала.
Поддержка uWSGI появилась в Nginx с версии 0.8.40, но ни первого, ни второго в стабильной ветке Debian нет. Поэтому Nginx будем брать из бэкпортов, а uWSGI – из нестабильной ветки. Для этого добавим следующие строчки в /etc/apt/sources.list
:
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
deb http://ftp.ru.debian.org/debian testing main non-free contrib
deb http://ftp.ru.debian.org/debian unstable main non-free contrib
И создадим примерно такой /etc/apt/preferences
:
Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=squeeze-backports
Pin-Priority: 675
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600
Синхронизируемся с помощью aptitude update и устанавливаем необходимые пакеты:
aptitude -t squeeze-backports install nginx
aptitude -t unstable install uwsgi
aptitude -t unstable install uwsgi-plugin-python
aptitude -t unstable install python-virtualenv
структуру каталогов рекомендую такую:
/home/web/*YOUR_PROJECT*/
├── env
├── files
│ ├── media
│ └── static
├── logs
├── manage.py
└── src
├── YOUR_APPS
├── local_settings.py
├── settings.py
├── static
├── templates
└── urls.py
Статика и медиа выносится из src при деплое через collectstatic
Переходим в каталог с проектом
cd /home/web/*YOUR_PROJECT*
Создаем там виртуальное окружение для нашего проекта:
virtualenv -p python2.7 env # указываете нужную версию питона
Активируем его:
source env/bin/activate
И ставим django:
pip install django==1.4 # указываете нужную версию django
Добавляем конфиги нашего проекта в uwsgi (я пользуюсь emacs-ом, можете создать файл, зайдя по sftp на сервер с помощью вашего файлового менеджера) emacs /etc/uwsgi/apps-available/*YOUR_PROJECT*.ini
:
[uwsgi]
plugins = python27 # принудительно указываем версию питона
virtualenv = /home/web/*YOUR_PROJECT*/env/ # путь к вашему виртуальному окружению
chdir = /home/web/*YOUR_PROJECT*/ # каталог, в котором лежит manage.py
pythonpath = .. # родительский каталог в пути поиска Python
env = DJANGO_SETTINGS_MODULE=src.settings # путь к settings.py относительно manage.py
module = django.core.handlers.wsgi:WSGIHandler()
создайте симлинк вашего конфига в /etc/uwsgi/apps-enabled/
Запускаем uwsgi для нашего проекта:
/etc/init.d/uwsgi start *YOUR_PROJECT*.ini
Настраиваем nginx
Удалите симлинк
rm /etc/nginx/sites-enabled/default
создайте файл конфигурации для своего проекта emacs /etc/nginx/sites-available/*YOUR_PROJECT*
server {
listen 80;
server_name www.*YOUR_PROJECT*.com *YOUR_PROJECT*.com;
access_log /home/web/*YOUR_PROJECT*/logs/nginx.access.log;
error_log /home/web/*YOUR_PROJECT*/logs/nginx.error.log;
location /static/ {
alias /home/web/*YOUR_PROJECT*/files/static/;
}
location /media/ {
alias /home/web/*YOUR_PROJECT*/files/media/;
}
location / {
include uwsgi_params;
uwsgi_pass unix:///var/run/uwsgi/app/*YOUR_PROJECT*/socket;
}
}
создайте симлинк конфига в /etc/nginx/sites-enabled/
рестартуйте nginx и все готово
Вариант 2
Есть вариант с установкой uwsgi в вирт окружение через pip, статья, описывающая процесс - http://vds-admin.ru/unix-linux/настройка-nginx-uwcgi-mediacore-продакшн В этом случае к дебиану не придется подключать нестабильные репозитории.
Если пропала статика - выполните в каталоге с проектом:
python manager.py collectstatic
статика всех приложений будет скопирована в STATIC_ROOT, после чего src/static на продакшине и статику из приложений можно смело удалять
Тонкая настройка
uwsgi основные конфиги держит в /usr/share/uwsgi/conf/default.ini
Вы можете их переопределить в своем /etc/uwsgi/apps-available/*YOUR_PROJECT*.ini
Я бы рекомендовал создавать для каждого проекта отдельного пользователя YOUR_USER
менять владельца и группу на каталог проекта
cd /home/web/
chown *YOUR_USER*:*YOUR_USERGROUP* /*YOUR_PROJECT* -R
и указывать его в конфигах uwsgi для проекта
uid = *YOUR_USER*
gid = *YOUR_USERGROUP*
Соответственно для nginx в конфиге добавьте
user *YOUR_USER* *YOUR_USERGROUP*;