Показаны различия между двумя версиями страницы.
webserver-apache-wsgi-django [09.01.2012 15:10] kpetrov [Установка Apache и mod_wsgi] |
webserver-apache-wsgi-django [02.11.2014 23:49] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Установка Django, Apache, mod_wsgi на VPS с Ubuntu 11.04 ====== | ||
- | <code bash> | ||
- | # Обновляем список пакетов | ||
- | $ sudo apt-get update | ||
- | |||
- | # Обновляем пакеты | ||
- | $ sudo apt-get upgrade | ||
- | </ | ||
- | |||
- | Переменные: | ||
- | **project_name** — имя проекта\\ | ||
- | **project.com** — домен проекта\\ | ||
- | **project_group_name** - группа доступа к проекту\\ | ||
- | Заменить на соответствующие значения для Вашего проекта. | ||
- | |||
- | В данной инструкции приводится пример установки Django 1.3.1 и Python 2.7 на Ubuntu 11.04. | ||
- | Возможно, | ||
- | |||
- | ===== Установка последней стабильной версии Django ===== | ||
- | |||
- | Для установки последней версии необходимо скачать исходники и распаковать их: | ||
- | |||
- | <code bash> | ||
- | $ sudo mkdir ~/django | ||
- | $ cd ~/django | ||
- | $ wget http:// | ||
- | $ mv index.html Django-1.3.1.tar.gz | ||
- | $ tar xzf Django-1.3.1.tar.gz | ||
- | </ | ||
- | |||
- | Далее, необходимо узнать, | ||
- | |||
- | <code bash> | ||
- | $ python -c "from distutils.sysconfig import get_python_lib; | ||
- | / | ||
- | </ | ||
- | |||
- | В данном случае видно, что основной версией является Python 2.7 и все дополнительные пакеты устанавливаются в директорию "/ | ||
- | |||
- | Следующим шагом необходимо скопировать пакет | ||
- | |||
- | <code bash> | ||
- | $ sudo cp -R ~/ | ||
- | $ sudo chomd -R 644 / | ||
- | </ | ||
- | |||
- | И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, | ||
- | |||
- | <code bash> | ||
- | $ sudo ln -s ~/ | ||
- | </ | ||
- | | ||
- | ==== Проверка корректности установки Django ==== | ||
- | Чтобы убедиться, | ||
- | <code bash> | ||
- | $ python -c " | ||
- | (1, 3, 1, ' | ||
- | </ | ||
- | |||
- | Все в порядке. Последняя версия Django корректно установлена. | ||
- | |||
- | ===== Установка и настройка Apache, mod_wsgi ===== | ||
- | Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях. | ||
- | |||
- | ==== Установка Apache и mod_wsgi ==== | ||
- | |||
- | <code bash> | ||
- | $ sudo apt-get install apache2 libapache2-mod-wsgi | ||
- | </ | ||
- | |||
- | === Создание и настройка проекта в Django === | ||
- | При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя. | ||
- | |||
- | == Создание проекта Django == | ||
- | Далее приведен код создания Django-проекта и некоторых дополнительных директорий в нем: | ||
- | <code bash> | ||
- | # директория для django проектов | ||
- | $ sudo mkdir -p / | ||
- | |||
- | # новый django-проект | ||
- | $ cd / | ||
- | $ sudo django-admin.py startproject apps | ||
- | |||
- | # корректируем название модуля для корректного импорта | ||
- | $ sudo perl -pi -e ' | ||
- | |||
- | # директория для настроек wsgi | ||
- | $ sudo mkdir -p / | ||
- | |||
- | # директория для статики | ||
- | $ sudo mkdir -p / | ||
- | |||
- | # директория для логов | ||
- | $ sudo mkdir -p / | ||
- | </ | ||
- | |||
- | == Создание пользователя для проекта == | ||
- | Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), | ||
- | |||
- | <code bash> | ||
- | # создается системная группа | ||
- | $ sudo addgroup --quiet --system project_group_name | ||
- | |||
- | # создается системный пользователь | ||
- | $ sudo adduser --quiet --system --ingroup project_group_name --no-create-home --no-create-home project_group_name | ||
- | # новый владелец для проекта | ||
- | $ sudo chown project_group_name: | ||
- | |||
- | # права доступа на проект. Право на чтение для www-data необходимо | ||
- | # для корректной отдачи статики | ||
- | $ sudo chmod u=rwx, | ||
- | </ | ||
- | |||
- | === Настройка виртуального хоста в Apache === | ||
- | Далее, чтобы код проекта отзывался на какой-либо URL-адрес, | ||
- | <code bash> | ||
- | # cтавим консольный текстовый редактор " | ||
- | $ sudo apt-get install nano | ||
- | |||
- | # с помощью консольного текстового редактора создаём новый файл | ||
- | $ sudo nano / | ||
- | </ | ||
- | |||
- | И добавить в него следующий код: | ||
- | <code apache> | ||
- | < | ||
- | # Описание сервера | ||
- | ServerAdmin admin@project.com | ||
- | ServerName project.com | ||
- | |||
- | # Логи | ||
- | LogLevel warn | ||
- | ErrorLog / | ||
- | CustomLog / | ||
- | |||
- | # wsgi-обработчик (см. ниже) | ||
- | WSGIPythonPath < | ||
- | WSGIScriptAlias / / | ||
- | |||
- | # Параметры запуска wsgi | ||
- | WSGIDaemonProcess django-site user=django group=django home=/ | ||
- | processes=2 threads=4 maximum-requests=100 display-name=apache-django-wsgi | ||
- | WSGIProcessGroup project_group_name-site | ||
- | |||
- | # Статические файлы django-админки | ||
- | Alias "/ | ||
- | < | ||
- | SetHandler None | ||
- | </ | ||
- | |||
- | # Статические файлы проекта | ||
- | Alias "/ | ||
- | < | ||
- | SetHandler None | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | Или можно создать файл " | ||
- | |||
- | В данном случае 10.1.0.4 - это IP-адрес машины, | ||
- | |||
- | === Настройка wsgi === | ||
- | Теперь, | ||
- | <code bash> | ||
- | $ sudo -u project_group_name vim / | ||
- | </ | ||
- | |||
- | или | ||
- | |||
- | <code bash> | ||
- | $ sudo -u project_group_name nano / | ||
- | </ | ||
- | |||
- | или в директорию "/ | ||
- | |||
- | <code python> | ||
- | #/ | ||
- | # -*- coding: utf-8 -*- | ||
- | import os, sys | ||
- | |||
- | # В python path добавляется директория проекта | ||
- | dn = os.path.dirname PROJECT_ROOT = os.path.abspath( dn(dn(__file__)) ) | ||
- | DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, | ||
- | sys.path.append( DJANGO_PROJECT_ROOT ) | ||
- | |||
- | # Установка файла настроек | ||
- | os.environ[' | ||
- | |||
- | # Запуск wsgi-обработчика | ||
- | import django.core.handlers.wsgi | ||
- | application = django.core.handlers.wsgi.WSGIHandler() | ||
- | </ | ||
- | |||
- | === Включение виртуального хоста Apache === | ||
- | На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache: | ||
- | <code bash> | ||
- | # Добавляет ссылку на виртуальный хост в список доступных хостов | ||
- | $ sudo ln -s / | ||
- | / | ||
- | |||
- | # включаем виртуальный хост | ||
- | $ sudo a2ensite project.com | ||
- | |||
- | # рестарт Apache | ||
- | $ sudo / | ||
- | </ | ||
- | |||
- | == Проверка корректности установки == | ||
- | Чтобы проверить, | ||
- | Результатом должно быть приглашение: | ||
- | < | ||
- | It worked! | ||
- | Congratulations on your first Django-powered page. | ||
- | |||
- | Of course, you haven' | ||
- | * If you plan to use a database, edit the DATABASE_* settings in settings/ | ||
- | * Start your first app by running python settings/ | ||
- | </ | ||
- | |||
- | ==== Дебаг ==== | ||
- | Если возникли проблемы, | ||
- | * в виртуальном хосте меняем " | ||
- | * отключаем демонизацию, | ||
- | Это позволит иметь более подробные сообщения в error_log . | ||
- | По окончании отладки не забудьте вернуть всё обратно :) |