Django-приложение на PostgreSQL в Ubuntu 16.04

Django – это гибкий фреймворк для быстрой разработки приложений Python. По умолчанию Django использует для хранения данных легковесную СУБД SQLite, которая не всегда справляется с нагрузками масштабных приложений. Поэтому её рекомендуется заменить более прочной системой управления базами данных.

Данное руководство продемонстрирует установку PostgreSQL и настройку Django для использования этой СУБД, включая такие этапы:

  • Установку всего необходимого программного обеспечения;
  • Создание учётных данных БД;
  • Запуск и настройку Django-проекта дл использования PostgreSQL на бэкэнде.

Требования

  • Свежий сервер Ubuntu 16.04 (чтобы выполнить начальную настройку нового сервера, читайте это руководство).
  • Не-root пользователь с доступом к sudo.

Установка зависимостей

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

Список зависимостей Python 2 и Python 3 немного отличается.

Чтобы установить зависимости Python 2, введите:

sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib

Установить пакеты для Python 3 можно с помощью команды:

sudo apt-get update
sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

Создание базы данных и пользователя

Для локальных соединений PostgreSQL по умолчанию использует схему так называемой «одноранговой аутентификации» (англ. peer authentication). В целом, это означает, что если имя пользователя операционной системы совпадает с именем валидного пользователя Postgres, данный системный пользователь может войти в СУБД без дальнейшей аутентификации.

При установке PostgreSQL был создан пользователь операционной системы по имени postgres, что совпадает с пользователем postgres – администратором системы PostgreSQL. Измените пользователя и войдите как postgres. Для этого можно использовать sudo и опцию –u:

sudo -u postgres psql

Итак,  сначала нужно создать БД для проекта Django. Каждый проект должен иметь индивидуальную базу данных. В данном руководстве БД условно называется myproject, но лучше использовать более описательное имя.

CREATE DATABASE myproject;

Примечание: Все команды SQL оканчиваются символом точки с запятой.

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

CREATE USER myprojectuser WITH PASSWORD 'password';

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

Установите UTF-8 как кодировку по умолчанию, чего требует Django. Также установите схему по умолчанию изоляции транзакций «read committed», которая блокирует считывание с незавершенных транзакций. В завершение нужно установить часовой пояс. По умолчанию проекты Django будут использовать UTC.

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;

Закройте командную строку SQL и вернитесь в сессию оболочки пользователя postgres:

\q

Установка Django в виртуальную среду

Теперь БД полностью готова к работе, можно переходить к установке Django. Виртуальное окружение (или виртуальная среда) позволяет сделать установку Django и зависимостей более гибкой.

Чтобы установить пакет virtualenv, введите:

Python 2:
sudo pip install virtualenv
Python 3:
sudo pip3 install virtualenv

Создайте каталог для хранения проекта Django и откройте его:

mkdir ~/myproject
cd ~/myproject

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

virtualenv myprojectenv

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

Прежде чем устанавливать приложение в виртуальную среду, нужно включить её:

source myprojectenv/bin/activate

Командная строка изменит внешний вид; это значит, что виртуальное окружение успешно включено:

myprojectenv)user@host:~/myproject$

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

pip install django psycopg2

Примечание: Вне зависимости от версии Python в виртуальной среде нужно использовать команду pip (не pip3).

Запустите проект Django в каталоге myproject. Это создаст одноимённый дочерний каталог для хранения кода и скрипт внутри этого каталога. Обратите внимание: команда заканчивается символом точки:

django-admin.py startproject myproject .

Настройка базы данных Django

Теперь, когда проект готов, нужно настроить созданную для него базу данных.

Откройте главный конфигурационный файл проекта Django:

nano ~/myproject/myproject/settings.py

В конце файла найдите раздел DATABASES:

. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
. . .

На данный момент он настроен для использования базы данных SQLite. Это нужно изменить, указав вместо SQLite систему управления базами данных PostgreSQL.

Для начала измените значение engine, указав в качестве бэкэнда postgresql_psycopg2 вместо sqlite3. В строке NAME укажите имя базы данных (в данном случае – myproject). Также нужно указать учётные данные и добавить опцию port без значения (чтобы выбрать настройку по умолчанию).

. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
. . .

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

Перемещение базы данных и тестирование проекта

Теперь фреймворк Django полностью настроен для взаимодействия с БД. Переместите данные в БД и протестируйте сервер.

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

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

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

python manage.py createsuperuser

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

Если сервер настроен согласно этому руководству, на данный момент порт сервера разработки Django заблокирован брандмауэром UFW. Чтобы протестировать работу приложения, нужно разблокировать этот порт.

sudo ufw allow 8000

Теперь можно протестировать приложение, запустив сервер разработки Django:

python manage.py runserver 0.0.0.0:8000

В браузере посетите домен или IP, указав порт :8000, что откроет стандартную страницу Django:

http://server_domain_or_IP:8000

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

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

Добавьте к ссылке секцию /admin, чтобы получить доступ к странице входа в интерфейс администратора.

Заполните появившиеся на экране поля, указав имя и пароль только что созданной учётной записи администратора при помощи команды createsuperuser. После этого на экране появится интерфейс администратора.

Завершив проверку, остановите сервер разработки, нажав CTRL-C в окне терминала.

Получив доступ к интерфейсу, вы убедились, что БД хранит информацию проекта и взаимодействует с ним.

Заключение

Конечно, БД SQLite очень проста в использовании и без труда справляется с нагрузкой на этапе разработки. Но всё же в большинстве случаев её ресурсов на этапе производства оказывается недостаточно, потому рекомендуется использовать в качестве бэкэнда полнофункциональную базу данных, например, PostgreSQL.

Tags: , , , ,

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