Установка и настройка Apache, mod_wsgi, Django, MySQL в Debian / Ubuntu

Источник статьи: http://debianworld.ru/

Django (читается как Джанго) — это свободно распространяемый фреймворк с открытым исходным кодом для разработки веб приложений на языке PythonDjango обладает следующими архитектурными отличиями:

  • использование концепции Модель-Представление-Контроллер (Model-View-Controller, MVC). В терминологии Django это будет Модель-Шаблон-Вид (Model-Template-View, MTV)
  • использование концепции приложений. Весь код рекомендуется оформлять в виде приложений и делать его подключаемым и переносимым
  • диспетчер URL на основе регулярных выражений
  • ORM для работы с БД (с поддержкой транзакций)
  • встроенный веб-сервер для разработки
  • встроенная административная панель

Установка и настройка Django

Django можно установить двумя способами: из репозитариев или скачав исходники фреймворка с сайта. Как правило, в репозитариях находится не самая свежая версия. Поэтому, обычно используется второй способ, хотя это и не Debian-way.

Установка Django из репозитория

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

$ sudo aptitude install python-django 

Установка последней стабильной версии Django

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

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

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

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

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

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

$ sudo ln -s ~/django/Django-1.1/django /usr/lib/python2.5/site-packages/django 

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

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

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

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

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

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

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

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

Установка Apache и mod_wsgi тривиальна:

$ sudo aptitude install apache2 libapache2-mod-wsgi 

Установка MySQL

Кроме самого сервера MySQL необходимо также установить пакет, который позволяет работать с MySQL из Python:

$ sudo aptitude install mysql-server python-mysqldb 

При установке необходимо будет указать пароль для root-пользователя БД MySQL.

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

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

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

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

# директория для django проектов 
$ sudo mkdir -p /home/django-projects/debianworld_ru 
# новый django-проект 
$ cd /home/django-projects/debianworld_ru 
$ 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/debianworld_ru/deploy 
# директория для статики 
$ sudo mkdir -p /home/django-projects/debianworld_ru/media 
# директория для логов 
$ sudo mkdir -p /home/django-projects/debianworld_ru/logs 

Создание пользователя для проекта

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

# создается системная группа 
$ sudo addgroup --quiet --system dw 
# создается системный пользователь 
$ sudo adduser --quiet --system --ingroup dw --no-create-home --no-create-home dw 
# новый владелец для проекта 
$ sudo chown dw:www-data -R /home/django-projects/debianworld_ru 
# права доступа на проект. Право на чтение для www-data необходимо 
# для корректной отдачи статики 
$ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/debianworld_ru 

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

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

$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/debianworld.ru 

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

<VirtualHost 10.1.0.4> 
# Описание сервера 
ServerAdmin [email protected] 
ServerName wsgi.debianworld.ru 
# Логи 
ErrorLog /home/django-projects/debianworld_ru/logs/error_log 
CustomLog /home/django-projects/debianworld_ru/logs/access_log common 
# wsgi-обработчик (см. ниже) 
WSGIScriptAlias / /home/django-projects/debianworld_ru/deploy/django.wsgi 
# Параметры запуска wsgi 
WSGIDaemonProcess dw-site user=dw group=dw home=/home/django-projects/debianworld_ru/media/ processes=2 threads=4 maximum-requests=100 display-name=apache-dw-wsgi 
WSGIProcessGroup dw-site 
# Статические файлы django-админки 
Alias "/media_admin/" "/usr/lib/python2.5/site-packages/django/contrib/admin/media/" 
<Location "/media_admin/"> 
SetHandler None 
</Location> 
# Статические файлы проекта 
Alias "/media/" "/home/django-projects/debianworld_ru/media/" 
<Location "/media/"> 
SetHandler None 
</Location> 
</VirtualHost> 

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

Настройка wsgi

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

$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/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/debianworld_ru/deploy/debianworld.ru /etc/apache2/sites-available/debianworld.ru 
# включаем виртуальный хост 
$ sudo a2ensite debianworld.ru 
# рестарт Apache 
$ sudo /etc/init.d/apache2 restart 

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

Чтобы проверить, что Django корректно работает через mod_wsgi необходимо попытаться открыть URL «http://wsgi.debianworld.ru/» в браузере.

Результатом должно быть приглашение:

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]. 

Создание БД/пользователя в MySQL, настройка Django

После того, как есть уверенность, что Django установлен и работает, необходимо обеспечить возможность работы с БД. Для этого необходимо залогиниться в MySQL под root’ом:

$ mysql --user=root -p 

И создать новую базу данных и нового пользователя:

mysql> 
CREATE DATABASE debianworld_db CHARACTER SET utf8; 
Query OK, 1 row affected (0.01 sec) 
mysql> 
CREATE USER [email protected] IDENTIFIED BY 'mega-secure-password'; 
Query OK, 0 rows affected (0.00 sec) 
mysql> 
GRANT ALL ON debianworld_db.* TO [email protected]; Query OK, 0 rows affected (0.00 sec) 

После того, как новые БД и пользователь готовы, необходимо прописать их в конфиг Django. Для этого необходимо открыть файл настроек:

$ sudo -u dw vim /home/django-projects/debianworld_ru/apps/settings.py 

И прописать следующие значения:

# ... 
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
DATABASE_NAME = 'debianworld_db' # Or path to database file if using sqlite3. 
DATABASE_USER = 'debianworld_usr' # Not used with sqlite3. 
DATABASE_PASSWORD = 'mega-secure-password' # Not used with sqlite3. 
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. 
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3. 
# ... 

Кроме того, чтобы правильно «подхватились» статические файлы django-админки и основго проекта, необходимо так же прописать:

# ... 
MEDIA_URL = '/media/ ADMIN_MEDIA_PREFIX = '/media_admin/' 
# ... 

И в заключении, необходимо дать команду Django создать в БД основные таблицы:

$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py syncdb 
Creating table auth_permission 
Creating table auth_group 
Creating table auth_user 
Creating table auth_message 
Creating table django_content_type 
Creating table django_session 
Creating table django_site 
You just installed Django's auth system, which means you don't have any superusers defined. 
Would you like to create one now? (yes/no): yes 
Username (Leave blank to use 'dw'): admin 
E-mail address: [email protected] 
Password: 
Password (again): 
Superuser created successfully. 
Installing index for auth.
Permission model 
Installing index for auth.
Message model 

Вот и все. Теперь Django настроено полностью. Далее можно создавать приложения слдеующей командой:

$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py startapp firstapp 

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

$ sudo -u dw bash 
$ cd /home/django-projects/debianworld_ru/apps/ 
$ ./manage.py startapp firstapp 

 

Comments are closed.