Инструменты пользователя

Инструменты сайта


Action disabled: revisions
webserver-apache-wsgi-django

Установка Django, Apache, mod_wsgi на VPS с Ubuntu 11.04

# Обновляем список пакетов
$ 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

Для установки последней версии необходимо скачать исходники и распаковать их:

$ sudo mkdir ~/django
$ cd ~/django
$ wget http://www.djangoproject.com/download/1.3.1/tarball/
$ mv index.html Django-1.3.1.tar.gz
$ tar xzf Django-1.3.1.tar.gz

Далее, необходимо узнать, в какую директорию необходимо устанавливать пакеты, чтобы Python узнал об этом. Для этого необходимо выполнить:

$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" 
/usr/lib/python2.7/dist-packages

В данном случае видно, что основной версией является Python 2.7 и все дополнительные пакеты устанавливаются в директорию «/usr/lib/python2.7/dist-packages».

Следующим шагом необходимо скопировать пакет Django в папку с модулями и дать права на чтение:

$ sudo cp -R ~/django/Django-1.3.1/django /usr/lib/python2.7/dist-packages/django 
$ sudo chomd -R 644 /usr/lib/python2.7/dist-packages/django

И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, необходимо добавить символическую ссылку:

$ sudo ln -s ~/django/Django-1.3.1/django/bin/django-admin.py /usr/local/bin

Проверка корректности установки Django

Чтобы убедиться, что Django нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django:

$ python -c "import django; print django.VERSION;" 
(1, 3, 1, 'final', 0)

Все в порядке. Последняя версия Django корректно установлена.

Установка и настройка Apache, mod_wsgi

Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях.

Установка Apache и mod_wsgi

$ sudo apt-get install apache2 libapache2-mod-wsgi

Создание и настройка проекта в Django

При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя.

Создание проекта Django

Далее приведен код создания Django-проекта и некоторых дополнительных директорий в нем:

# директория для django проектов 
$ sudo mkdir -p /home/django-projects/project_name 
 
# новый django-проект 
$ cd /home/django-projects/project_name 
$ sudo django-admin.py startproject apps 
 
# корректируем название модуля для корректного импорта 
$ sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py 
 
# директория для настроек wsgi 
$ sudo mkdir -p /home/django-projects/project_name/deploy 
 
# директория для статики 
$ sudo mkdir -p /home/django-projects/project_name/media 
 
# директория для логов 
$ sudo mkdir -p /home/django-projects/project_name/logs
Создание пользователя для проекта

Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта:

# создается системная группа 
$ 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 -R /home/django-projects/project_name 
 
# права доступа на проект. Право на чтение для www-data необходимо 
# для корректной отдачи статики 
$ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/project_name

Настройка виртуального хоста в Apache

Далее, чтобы код проекта отзывался на какой-либо URL-адрес, необходимо настроить виртуальный хост Apache. Необходимо создать новый файл:

# cтавим консольный текстовый редактор "nano" (если он отсутствует): 
$ sudo apt-get install nano 
 
# с помощью консольного текстового редактора создаём новый файл
$ sudo nano /home/django-projects/project_name/deploy/project.com

И добавить в него следующий код:

<VirtualHost 10.1.0.4:80> 
    # Описание сервера 
    ServerAdmin admin@project.com 
    ServerName project.com 
 
    # Логи
    LogLevel warn
    ErrorLog /home/django-projects/project_name/logs/error_log 
    CustomLog /home/django-projects/project_name/logs/access_log common 
 
    # wsgi-обработчик (см. ниже) 
    WSGIPythonPath <здесь надо посмотреть это значение в /etc/apache2/mods-available/wsgi.conf >
    WSGIScriptAlias / /home/django-projects/project_name/deploy/django.wsgi 
 
    # Параметры запуска wsgi 
    WSGIDaemonProcess project_group_name-site user=project_group_name group=project_group_name home=/home/django-projects/project_name/media/ \ 
                      processes=2 threads=4 maximum-requests=100 display-name=apache-project_group_name-wsgi 
    WSGIProcessGroup project_group_name-site 
 
    # Статические файлы django-админки 
    Alias "/media_admin/" "/usr/lib/python2.7/dist-packages/django/contrib/admin/media/" 
    <Location "/media_admin/"> 
        SetHandler None 
    </Location> 
 
    # Статические файлы проекта 
    Alias "/media/" "/home/django-projects/project_name/media/" 
    <Location "/media/"> 
        SetHandler None 
    </Location> 
</VirtualHost>

Или можно создать файл «project.com» и закачать его по FTP в директорию «/home/django-projects/project_name/deploy/»

В данном случае 10.1.0.4 - это IP-адрес машины, на которой работает Apache.

Настройка wsgi

Теперь, когда виртуальный хост создан, необходимо создать wsgi-обработчик. Для этого создается файл c помощью консольного текстового редактора (например, nano или vim):

$ sudo -u project_group_name vim /home/django-projects/project_name/deploy/django.wsgi

или

$ sudo -u project_group_name nano /home/django-projects/project_name/deploy/django.wsgi

или в директорию «/home/django-projects/project_name/deploy/django.wsgi» через FTP залить файл «django.wsgi» со следующим содержимым:

#/usr/bin/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, 'apps') 
sys.path.append( DJANGO_PROJECT_ROOT ) 
 
# Установка файла настроек 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 
 
# Запуск wsgi-обработчика 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler()

Включение виртуального хоста Apache

На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache:

# Добавляет ссылку на виртуальный хост в список доступных хостов 
$ sudo ln -s /home/django-projects/project_name/deploy/project.com \ 
             /etc/apache2/sites-available/project.com 
 
# включаем виртуальный хост 
$ sudo a2ensite project.com 
 
# рестарт Apache 
$ sudo /etc/init.d/apache2 restart 
Проверка корректности установки

Чтобы проверить, что Django корректно работает через mod_wsgi необходимо попытаться открыть URL «http://project.com/» в браузере. Результатом должно быть приглашение:

It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Here's what to do next:
  * If you plan to use a database, edit the DATABASE_* settings in settings/settings.py.
  * Start your first app by running python settings/manage.py startapp [appname].

Дебаг

Если возникли проблемы, то:

  • в виртуальном хосте меняем «LogLevel warn» на «LogLevel info»
  • отключаем демонизацию, закоментировав строчку «WSGIProcessGroup project_group_name-site»

Это позволит иметь более подробные сообщения в error_log . По окончании отладки не забудьте вернуть всё обратно :)

webserver-apache-wsgi-django.txt · Последнее изменение: 02.11.2014 23:49 (внешнее изменение)

Инструменты страницы