Django-приложение на PostgreSQL в CentOS 7

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

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

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

Требования

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

Добавление репозитория EPEL

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

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

sudo yum install epel-release

Добавив EPEL, установите необходимые пакеты:

sudo yum install python-pip python-devel gcc postgresql-server postgresql-devel postgresql-contrib

Начальная настройка PostgreSQL

После установки PostgreSQL нужно инициировать базу данных:

sudo postgresql-setup initdb

После этого запустите PostgreSQL как сервис:

sudo systemctl start postgresql

Запустив БД, нужно отредактировать настройки одного из конфигурационных файлов. Откройте этот файл в текстовом редакторе с правами sudo:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Этот файл отвечает за настройку авторизации в СУБД. На данный момент этот файл разрешает соединение только в случае если системный пользователь совпадает с пользователем БД. В целом, этого достаточно для выполнения задач локальной поддержки, но эти настройки не подходят для пользователя Django.

Чтобы это изменить, нужно добавить в конец файла две строки host. В последний столбец (метод авторизации) md5; это включит аутентификацию по паролю:

. . .
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
#host    all             all             ::1/128                 ident
host    all             all             ::1/128                 md5

Завершив редактирование, сохраните и закройте файл.

Чтобы новые настройки вступили в исполнение, перезапустите сервис. Также нужно настроить автоматический запуск PostgreSQL при загрузке сервера:

sudo systemctl restart postgresql
sudo systemctl enable postgresql

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

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

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

sudo su - postgres

Итак, теперь открыта сессия оболочки пользователя postgres. Запустите сессию PostgreSQL:

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

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

exit

Установка Django в virtualenv

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

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

sudo pip 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

Запустите проект 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
python manage.py makemigrations
python manage.py migrate

Создав структуру БД, создайте учётную запись администратора:

python manage.py createsuperuser

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

После этого протестируйте настройки, запустив сервер разработки 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: , , , ,

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