Настройка веб-сервера может оказаться сложной задачей для тех, кто только начинает заниматься веб-разработкой. К счастью, есть инструменты, с помощью которых легко настроить сервер для вашего проекта Django. В этой статье мы рассмотрим основы настройки Nginx и Gunicorn, чтобы вы могли быстро приступить к работе.
Django — это бесплатный веб-фреймворк, который помогает создавать сложные сайты и приложения с нуля, обеспечивая большую гибкость.
Он использует архитектурный паттерн «модель-вид-шаблон» (MVT), который позволяет отделить логику внутреннего интерфейса от аспектов дизайна внешнего. Такое разделение упрощает управление кодированием, поскольку задачи проектирования отделены от задач логики.
В Django заложены базовые функции, которые полезны при создании крупных проектов, поскольку они обеспечивают надежные механизмы работы с моделями, представлениями, контроллерами и шаблонами. Кроме того, этот веб-фреймворк имеет удобные устроенные шаблонные теги, которые позволяют быстро разрабатывать даже плохо структурированные HTML-документы. Это значительно сокращает время разработки, а также обеспечивает лучшую читаемость и стабильность продукта в различных браузерах или платформах.
Прежде чем приступить к разработке Django-приложения на PostgreSQL, необходимо определить ряд предварительных требований и целей.
Настройка Django с Postgres в Ubuntu предполагает несколько этапов. Мы подготовили пошаговую инструкцию, объясняющую, как установить Django на Ubuntu.
Здесь представлено руководство по установке Ubuntu Server https://www.nic.ru/help/ustanovka-ubuntu-server_11328.html
Для корректной работы требуются актуальные релизы пакетов apt. Загрузите обновления, а затем Python 3.
sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
В результате будет установлен диспетчер пакетов Python или pip. Он нужен для настройки СУБД Postgres, библиотеки для неё и веб-сервера.
В Postgres используется аутентификация peer authentication. Это значит, что не нужно каждый раз вводить логин и пароль, если имя пользователя ОС идентично имени пользователя Postgres.
В нашем примере оно звучит как postgres. Чтобы указать его системе Postgres, введите команду через sudo.
sudo -u postgres psql
В диалоговом окне PostgreSQL создайте новую базу данных.
CREATE DATABASE myproject;
Создайте пользователя и задайте для него пароль вместо password.
CREATE USER myprojectuser WITH PASSWORD 'password';
Поставьте кодировку UTF-8.
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
Задайте схему изоляции транзакций.
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
Выберете часовой пояс.
ALTER ROLE myprojectuser SET timezone TO 'UTC';
Откройте доступ, чтобы пользователь имел возможность управлять базой данных.
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
Закройте окно, завершив настройку.
\q
Чтобы пользоваться виртуальной средой, откройте доступ к команде virtualenv через pip. Обновите его и поставьте свежие пакеты. В нашем примере мы рассмотрим команды для Python 3.
sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv
Создайте новый каталог и зайдите в него.
mkdir ~/myprojectdir
cd ~/myprojectdir
Создайте виртуальную среду.
virtualenv myprojectenv
Появится папка, где будут лежать Python и pip. Выполните активацию.
source myprojectenv/bin/activate
По изменению командной строки вы поймете, что начали работу в виртуальной среде, в скобках будет указано её название. Установите необходимые компоненты.
pip install django gunicorn psycopg2-binary
Каталог в нашем примере уже создан, нужно указать его, чтобы именно в нём хранились файлы нового проекта.
django-admin.py startproject myproject ~/myprojectdir
Откройте конфигурационный файл, чтобы внести в него изменения.
nano ~/myprojectdir/myproject/settings.py
Найдите директиву ALLOWED_HOSTS. Здесь перечислены адреса, с которыми экземпляр Django может соединяться. В квадратных скобках укажите IP или домены, чтобы система их не отклоняла. Выглядит команда так.
ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . ., 'localhost']
Найдите раздел DATABASES. Здесь нужно изменить значение базы данных на PostgreSQL. Дополнительно задайте условие использовать адаптер psycopr2, укажите название БД и пользователя с паролем.
В самом конце укажите место для хранения статичных файлов.
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Сохраните изменения и закройте редактор.
Скопируйте начальную схему базы данных.
~/myprojectdir/manage.py makemigrations
~/myprojectdir/manage.py migrate
Создайте ещё один аккаунт для управления проектом.
~/myprojectdir/manage.py createsuperuser
Для этого аккаунта задайте имя, пароль и почтовый ящик. Для удобства можно создать отдельную папку, где будет храниться весь статичный контент.
~/myprojectdir/manage.py collectstatic
Подтвердите действие. Разрешите подключение в брандмауэре UFW.
sudo ufw allow 8000
Пока еще все незадействованные порты заблокированы. Запустите сервер разработки Django.
~/myprojectdir/manage.py runserver 0.0.0.0:8000
Выполните проверку, написав любой IP из перечисленных ранее в настройках.
http://server_domain_or_IP:8000
Вы увидите страницу индекса Django.
Добавьте после URL /admin, чтобы авторизоваться под администратором.
Gunicorn нужен для взаимодействия с другими программами и сервисами в вашей системе или сети, интегрируя различные части приложения. Чтобы начать с ним работать, создайте файл с привилегиями sudo.
sudo nano /etc/systemd/system/gunicorn.socket
В этом файле создайте 3 раздела.
Выглядит это так.
Сохраните изменения и закройте файл. Затем создайте и откройте файл systemd.
sudo nano /etc/systemd/system/gunicorn.service
Здесь представлены аналогичные разделы, которые нужно отредактировать.
В Unit укажите метаданные и зависимости, разрешив инициализацию после связи с хостом.
В разделе Service сформируйте учётную запись пользователя и группу www-data, от которой будет запущен процесс. Владельцем является сам пользователь. Дополнительно задайте карту рабочей папки и напишите команду, которая запустит службы.
В Install впишите информацию, куда будут привязаны службы, активированные при загрузке.
Сокет Gunicorn создан. Сохраните изменения и запустите его.
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
Откройте модуль в папке Nginx sites-available.
sudo nano /etc/nginx/sites-available/myproject
Добавьте инструкцию прослушивать порт 80, отвечать на домен или IP-адрес хоста.
server {
listen 80;
server_name server_domain_or_IP;
}
Если будут возникать проблемы при поиске favicon, их можно игнорировать. Такую инструкцию тоже пропишите в файле. Здесь же укажите расположение статичных ресурсов, их вы уже перенесли ранее.
Создайте блок location / {}. Он нужен, чтобы задавать соответствия запросам. Внесите в него файл proxy_params, чтобы данные поступали непосредственно в сокет.
Сохранение изменения и закройте файл. Затем запустите его, привязав к папке sites-enabled.
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
Проверьте, нет ли ошибок.
sudo nginx –t
Перезагрузите веб-сервер.
sudo systemctl restart nginx
Теперь трафик идёт через порт 80, поэтому удалите правило доступа к серверу разработки через порт 8000.
sudo ufw delete allow 8000
sudo ufw allow 'Nginx Full'
Готово. Можете подключаться к хосту.
Правильная настройка Nginx включает в себя установку правильного имени сервера, номера порта и корневого каталога в конфигурационном файле. Также следует добавить все необходимые дополнительные модули, такие как сжатие gzip или кэширование заголовков.
При настройке Gunicorn важно указать значения таймаута и других параметров, которые помогут оптимизировать производительность приложения. Обеспечьте доступ ко всем зависимостям вашего приложения.
Протестируйте совместную работу компонентов, выполнив несколько простых запросов к серверу приложений.
Эксперименты безопаснее и удобнее проводить на виртуальном сервере. А высокоуровневый веб-фреймворк Django на языке Python упростит создание проектов и приложений. Это решение подходит для новичков, так как имеет множество стандартных элементов, а также для экспертов, предоставляя уникальные возможности.