Linux is working. The future is open.
Если Вы собрались писать проект на Django (а может быть и уже написали), когда-нибудь встанет вопрос о том, где его хостить. Есть компании, которые предлагают готовый python-хостинг, но я считаю, что лучшим выбором будет свой VPS-сервер. Процесс его приобретения здесь описывать не вижу смысла, поэтому сразу предположим, что у Вас такой имеется, на нем стоит Debian и вы уже подключились к нему по SSH'у.
Сразу начну вот с чего. В репозиториях Debian всё давно устарело (они же за стабильный, а не свежий софт). Если у Вас не Ubuntu, то в source.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
Ну и после этого
# apt-get update
Итак, во-первых, нам нужно само окружение – Python с установленной Django. Для большей гибкости устанавливать мы это будем по хитрому, через virtualenv. Зачем это нужно? К примеру, Вашему проекту нужен отличный от установленного Python или какие-либо библиотеки отличных версий, можно создать общее окружение для нескольких проектов или по одному собственному для каждого. Тем самым сможете устанавливать, изменять и удалять пакеты, и это не повлияет на другие ваши проекты или системное окружение.
# apt-get install python-virtualenv
Далее создадим каталог
# mkdir -p /var/django/env # cd /var/django/env
(можете указать другой), перейдем в него и там выполним
# virtualenv my_project
Ждем пока соберется окружение. Там будут папочки bin, include и lib. Чтобы активироть виртуальное окружение зайдем в папку bin (/var/django/env/my_project/bin) и выполним
# source activate (my_project)root@server:/var/django/env/my_project/bin#
В начале приглашения у нас появилось название нашего вирт. окр., по которому мы можем ориентироваться, узначать, что мы в него вошли. Для того, чтобы убедиться в том, что все сработало, можно глянуть:
(my_project)root@server:/var/django/env/my_project/bin# which python /var/django/env/my_project/bin/python (my_project)root@server:/var/django/envmy_project /bin# which pip /var/django/env/my_project/bin/pip (my_project root@server:/var/django/env/my_project/bin#
Как видим, все приложения выполняются оттуда.
Теперь устанавливаем Django и все необходимые для Вашего проекта пакетики, настраиваем settings.py для правильной работы со static и media, делаем ./manage.py collectstatic из папки с проектом, чтобы собрать всю статику для nginx'а.
Далее устанавливаем:
# apt-get install nginx # apt-get install uwsgi # apt-get install uwsgi-plugin-python
Ждем, ждем....
После этого для Nginx'а создаем новый профиль в sites-available:
server { listen 80; server_name example.ru; client_max_body_size 5m; access_log /var/log/nginx/example.ru.access.log; error_log /var/log/nginx/example.ru.error.log; location /static/ { gzip_static on; alias /var/django/static/my_project/; # не забываем поменять на свое } location /media/ { gzip_static on; alias /var/django/media/my_project/; # не забываем поменять на свое } location / { gzip_static on; include uwsgi_params; uwsgi_pass unix:///var/run/uwsgi/app/my_project/socket; # не забываем поменять на свое } }
Делаем симлинк в sites-enabled (симлинк на default удалите).
Теперь uWSGI. Также создаем профайл в его app-available. Обязательно с расширением ini, например /etc/uwsgi/apps-available/my_project.ini:
[uwsgi] plugins = python26 # plugins = python virtualenv = /var/django/env/my_project chdir = /var/django/project/my_project pythonpath = .. env = DJANGO_SETTINGS_MODULE=my_project.settings module = django.core.handlers.wsgi:WSGIHandler() touch-reload = /var/django/project/my_project/uwsgi_reload LANG = ru_RU.UTF-8
Не забываем создать "тач-файл" (через который можно как-бы "релоадить" интерпретатор):
touch /var/django/project/my_project/uwsgi_reload
Активируем профиль, сделав симлинк в apps-enabled.
Перезапускаем uWSGI, перезапускаем Nginx. Заходим через браузер, порверяем.
Ву-а-ля!