Установка Django в Ubuntu с использованием локального Python окружения

/
2013-10-22 18:02
Просмотры: 5181

django pythonЧто бы не засорять системный("глобальный") Python различными модулями, пакетами, библиотеками есть удобная и невероятно необходимая вещь - Virtualenv.

Virtualenv - инструмент, который создает отдельное, изолированое окружение для Python. Это очень удобно, например: создание локальной версии Python для отдельного проекта; разграничение версий библиотек или модулей для разных проектов; установка, удаление библиотек не затрагивая системной версии Python; использование разных версий Python для разных проектов, быстрое переключение между версиями.

Перед установкой Django создадим отдельное виртуальное окружение для нашего проекта, что бы не засорять глобальный Python и не ставить сам фреймворк Django глобально.

Для начала установим pip - установщик пакетов Python. Он может устанавливать, выводить список установленных пакетов, обновлять и удалять пакеты. pip это замена для easy_install. Он использует в основном те же методы для поиска пакетов, поэтому пакеты, которые были сделаны easy_installable являются совместимыми и с pip.

sudo apt-get install python-pip

Установка virtualenv:

sudo pip install virtualenv

Виртуальное окружение создадим в /var/www/python

mkdir /var/www/django && cd /var/www/django

Создаем виртуальное окружение с названием django(--prompt="(django)"), указываем версию Python(--python=/usr/bin/python3), сам Python кладем папку env, запрещаем использование системного site-packages (для полной изоляции вашего окружения от системы) --no-site-packages. В итоге выполняем:

virtualenv --no-site-packages --python=/usr/bin/python3 --prompt="(django)" env

Активируем окружение django, что бы далее работать и проводить дальнейшую установку в нем:

source /var/www/django/env/bin/activate

Примечание. Для окончания работы с окружением (например для переключение на системный python) следует выполнить в командной строке: deactivate

Установим Django

pip install django

Создаем проект, назовем его project. Проект в django может быть самостоятельным приложением, но в большой степени это просто структура директорий и настройки общие для всех приложений внутри. А приложение - это как раз код, который выполняется.

django-admin.py startproject <название проекта>, или django-admin startproject <название проекта>, в зависимости от системы. Выполняем:

cd /var/www/django
django-admin.py startproject project

или

django-admin startproject project

После этого создастся новый каталог project

Переходим в папку созданного проекта и создаем приложение python manage.py startapp <название приложения>, назовем его app. Выполняем:

cd project
python manage.py startapp app

Для теста делаем проверку на ошибки:

python manage.py validate

И запускаем http-сервер:

python manage.py runserver

По адресу http://127.0.0.1:8000/ - должна быть доступна страница приветсвия Django

uWSGI + Nginx + Django

Для запуска Django на продакшн серверах обычно используют связку с nginx. В нашем случае сделаем, что бы nginx - выступал в роли прокси сервера для динамики и отдавал статику напрямую.

Для виртуального окружения поставим uWSGI — быстрый, удобный и, при этом, надежный WSGI-сервер.

source /var/www/python/django/bin/activate
pip install uwsgi

Создадим конфиг для uwsgi

touch /var/www/project/uwsgi.ini

Содержимое:

[uwsgi]
home=/var/www/django/env
chdir=/var/www/django/project
master=True
vacuum=True
pidfile=/var/www/django/project/pids/project.pid
max-requests=5000
socket=127.0.0.1:49001
processes=1
log-date = True

pythonpath=/var/www/django/env/bin/python3
env=DJANGO_SETTINGS_MODULE=project.settings
module = django.core.handlers.wsgi:WSGIHandler()
touch-reload=/var/www/django/project-reload

Создадим виртуальны хост в nginx, динамику будем проксировать на 127.0.0.1:49001 отдавая на обработку WSGI-серверу

touch /etc/nginx/sites-available/django

Содержимое:

server {
	listen       80;
	server_name django.my;
	access_log  /var/www/django/project/logs/nginx_access.log;
	error_log   /var/www/django/project/logs/nginx_error.log;


	location / {
		uwsgi_pass 127.0.0.1:49001;
		include uwsgi_params;
	}

	location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
		root /var/www/django;
	}
}

Файлы для логов

touch /var/www/django/project/logs/nginx_access.log
touch /var/www/django/project/logs/nginx_error.log

Символическая ссылка

ln -s /etc/nginx/sites-available/django  /etc/nginx/sites-enabled/django

Перезапускаем nginx

/etc/init.d/nginx restart

Запускаем WSGI-сервер

uwsgi --ini /var/www/django/uwsgi.ini

Запуск нужно производить в виртуальном окружении, куда ставилась Django

По адресу django.my дожно отобразиться окно приветствия.

Добавить комментарий

comments powered by Disqus