# Обновляем список пакетов $ 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. Возможно, в скором времени Вы будете устанавливать более современные версии. В этом случае Вам необходимо будет изменить инструкцию в соответствующих местах.
Для установки последней версии необходимо скачать исходники и распаковать их:
$ 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 нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django:
$ python -c "import django; print django.VERSION;" (1, 3, 1, 'final', 0)
Все в порядке. Последняя версия Django корректно установлена.
Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях.
$ sudo apt-get install apache2 libapache2-mod-wsgi
При создании проекта будем исходить из того, что код 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
Далее, чтобы код проекта отзывался на какой-либо 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-обработчик. Для этого создается файл 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:
# Добавляет ссылку на виртуальный хост в список доступных хостов $ 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].
Если возникли проблемы, то:
Это позволит иметь более подробные сообщения в error_log . По окончании отладки не забудьте вернуть всё обратно :)