Обслуживание приложений Django с помощью Apache и mod_wsgi в CentOS 7

Django – это производительный веб-фреймворк для разработки приложений и сайтов Python. Для локального тестирования кода Django предоставляет простой сервер разработки. К сожалению, для производства  нужно подобрать более надёжный и мощный веб-сервер, так как этот сервер совершенно не подходит.

Данное руководство поможет установить и настроить Django в виртуальном окружении Python, а также настроить Apache для поддержки приложения и обработки клиентских запросов (для этого используется модуль Apache под названием mod_wsgi, который взаимодействует с Django через интерфейс WSGI).

Требования

Для выполнения данного руководства нужно настроить сервер CentOS 7и создать не-root пользователя с доступом к sudo. Подробные инструкции по начальной настройке сервера CentOS и созданию пользователей можно найти в этом руководстве.

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

После запуска приложения нужно настроить взаимодействие веб-сервера Apache с Django; для этого предназначен модуль mod_wsgi, который преобразует HTTP-запросы в понятный формат согласно спецификации WSGI.

Установка пакетов из репозиториев CentOS и EPEL

Для начала нужно установить все пакеты из репозиториев: веб-сервер Apache, модуль mod_wsgi и pip (пакетный менеджер Python).

Чтобы установить pip, нужно добавить репозиторий EPEL, в котором хранятся дополнительные пакеты для CentOS. Для этого наберите:

sudo yum install epel-release

Включив репозиторий EPEL, можно установить pip и другие необходимые компоненты:

sudo yum install python-pip httpd mod_wsgi

Настройка virtualenv

Подготовив сервер, создайте виртуальное окружение Python для хранения инструментов проекта Django. Для этого используется команда virtualenv.

Чтобы установить эту утилиту, введите:

sudo pip install virtualenv

Теперь используйте утилиту virtualenv для создания окружения. Создайте каталог, в котором будет находиться виртуальное окружение, и перейдите в него:

mkdir ~/myproject
cd ~/myproject

В этом каталоге создайте виртуальную среду Python:

virtualenv myprojectenv

Эта команда создаст виртуальное окружение по имени myprojectenv в каталоге myproject, а также установит локальную версию Python и pip, которые можно использовать для создания изолированного окружения разработки проекта.

Прежде чем приступить к установке зависимостей приложения, нужно включить виртуальное окружение.

source myprojectenv/bin/activate

Командная строка должна измениться, указывая, что текущей средой является виртуальная среда Python:

(myprojectenv)user@host:~/myproject$.

Включив виртуальную среду, установите Django:

pip install django

Создание и настройка Django-приложения

Теперь всё готово к созданию файлов Django-проекта.

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

Установите файлы Django в ранее созданный каталог. Это создаст каталоги второго уровня, хранящие код и скрипты приложения. Обратите внимание: команда должна заканчиваться символом точки.

django-admin.py startproject myproject .

Настройка Django-проекта

После создания приложения необходимо изменить его настройки. Откройте файл settings в текстовом редакторе:

nano myproject/settings.py

В руководстве используется стандартная БД SQLite, потому настройка не займёт много времени.

Примечание: Для обслуживания объёмных приложений рекомендуется использовать более надёжную СУБД.

Сейчас очень важную роль играет настройка каталога статических файлов Django.

В конец файла добавьте директиву STATIC_ROOT, которая сообщает фреймворку Django местонахождение статических файлов.

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Сохраните и закройте файл.

Затем можно открыть исходную структуру БД SQLite при помощи скрипта:

cd ~/myproject
./manage.py makemigrations
./manage.py migrate

Создайте учетную запись администратора:

./manage.py createsuperuser

Выберите имя пользователя, адрес электронной почты и пароль.

После этого нужно поместить статический контент в один каталог:

./manage.py collectstatic

После подтверждения все статические файлы будут помещены в каталог static в каталоге проекта.

Протестируйте работу проекта, запустив сервер разработки Django:

./manage.py runserver 0.0.0.0:8000

В браузере откройте доменное имя или IP сервера на порте 8000:

http://server_domain_or_IP:8000

На экране появится приветственная страница Django:

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

Чтобы получить доступ к учётной записи администратора, добавьте в ссылку секцию /admin, а затем введите имя и пароль.

Пройдя аутентификацию, вы получите доступ к интерфейсу администратора.

Остановите сервер разработки, нажав CTRL-C.

Вернитесь в виртуальную среду:

deactivate

Настройка Apache

Итак, проект Django создан и настроен, теперь можно приступать к настройке Apache на фронт-энде. Все клиентские подключения, полученные Apache, будут преобразованы в необходимый Django формат WSGI при помощи модуля mod_wsgi (который должен автоматически включиться после завершения установки).

Чтобы настроить WSGI, нужно создать новый конфигурационный файл. Создайте файл django.conf в каталоге /etc/httpd/conf.d и откройте его:

sudo nano /etc/httpd/conf.d/django.conf

Для начала нужно настроить статические файлы. После этого Apache будет направлять все запросы, начинающиеся с /static, в каталог static в каталоге проекта. Для этого нужно определить Alias и открыть доступ к требуемому каталогу.

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>

Затем нужно настроить права доступа к файлу wsgi.py (второй уровень каталогов), в котором хранится код проекта. Для этого используйте раздел Directory.

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
<Directory /home/user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Теперь можно перейти к настройкам обработки WSGI. Для запуска процессов WSGI используется режим демона; для этого предназначена директива WSGIDaemonProcess, которая принимает для процесса произвольное имя. В руководстве используется имя myproject.

Затем нужно указать путь к Python, где сервер Apache найдёт все необходимые компоненты.

Поскольку в настройке используется виртуальное окружение, нужно указать два пути: первый – родительский каталог проекта, второй – lib/pythonx.x/site-packages в виртуальной среде (где x нужно заменить номером версии Python). Теперь Apache сможет найти весь нужный для запуска код.

После этого нужно указать группу процессов; это значение должно совпадать со значением директивы WSGIDaemonProcess (в данном случае это myproject). В завершение нужно указать псевдоним скрипта, чтобы сервер Apache передавал запросы для домена в файл wsgi.py:

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
<Directory /home/user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproject python-path=/home/user/myproject:/home/user/myproject/myprojectenv/lib/python2.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py

Сохраните и закройте файл.

Права доступа

Далее нужно исправить права доступа, чтобы служба Apache может получить доступ к нашим файлам. По умолчанию, CentOS довольно строго блокирует домашний каталог каждого пользователя. Чтобы обойти это, добавьте пользователя apache в группу текущего пользователя. Это предоставит серверу достаточно прав для доступа к необходимым файлам.

Добавьте пользователя apache в свою группу при помощи следующей команды (замените условное имя пользователя user именем своего пользователя).

sudo usermod -a -G user apache

Дайте группе право на исполнение в домашнем каталоге пользователя; это позволит Apache вносить и данные и взаимодействовать с контентом.

chmod 710 /home/user

Теперь Apache имеет доступ к домашнему каталогу.

Теперь нужно предоставить веб-серверу Apache доступ базе данных SQLite (которая является стандартной).

Для этого нужно предоставить группе-владельцу права на запись и чтение. По умолчанию файл БД называется db.sqlite3 и должен находиться в каталоге проекта:

chmod 664 ~/myproject/db.sqlite3

Передайте права на файл группе, в которую входит Apache; это группа apache.

sudo chown :apache ~/myproject/db.sqlite3

Чтобы иметь право на запись в файле, Apache должен быть владельцем родительского каталога файла.

sudo chown :apache ~/myproject

Затем перезапустите сервис Apache, чтобы обновить настройки.

sudo systemctl start httpd

Теперь можно получить доступ к сайту Django, открыв в браузере доменное имя или IP-адрес.

Примечание: Номер порта указывать не нужно.

Если всё работает должным образом, включите сервис Apache, чтобы он запускался при загрузке сервера.

sudo systemctl enable httpd

Заключение

Теперь Django-приложение запущено в отдельной виртуальной среде, а модуль mod_wsgi позволяет преобразовывать запросы Apache в понятный Django формат.

Django значительно упрощает процесс создания приложения и позволяет сосредоточиться на его уникальных компонентах. Используя общий набор инструментов, описанный в этой статье, можно обслуживать приложения Django при помощи надёжного сервера.

Tags: , , , ,

1 комментарий

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