Установка и подключение PostgreSQL к Django

Внимание! Это 3-я часть из серии статей по деплою (развертыванию) Django-приложения. Перед ее прочтением рекомендуем ознакомиться с другими частями:
1. Начальная настройка сервера
2. Деплой Django-приложения
3. Подключение базы данных PostgreSQL (текущая статья)
4. Установка и привязка Memcached к Django
5. Привязка домена к серверу Django, настройка SSL и редиректов

Подключение PostgreSQL к Django

Приветствую! В прошлой статье мы выполнили деплой приложения Django на сервере с операционной системой Ubuntu 20.04. В этой статье мы продолжим эту инструкцию, а именно установим и подключим мощную и функциональную базу данных PostgreSQL к нашему Django приложению.

По-умолчанию Django использует базу данных SQLite, но это не самый лучший вариант для хранения информации. Поэтому работать мы будем именно с PostgreSQL.

1. Добавление PPA

PostgreSQL - популярный сервер баз данных и он имеется в официальных репозиториях. Но мы хотим использовать самую последнюю версию программы. Для этого нужно добавить в систему PPA (Personal Package Archive) с помощью команд:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

2. Обновляем пакеты

sudo apt update

3. Устанавливаем PostgreSQL

sudo apt install postgresql-12 postgresql-contrib postgresql-server-dev-12

На момент написания статьи последней актуальной версий являлась PostgreSQL-12. Проверить последнюю версию можно на официальном сайте БД. В случае обновления можно просто заменить версию в команде, например, sudo apt install postgresql-13.

4. Открываем консоль PostgreSQL

sudo -u postgres psql postgres

5. Задаем пароль для администратора БД

\password postgres

6. Создадим суперпользователя

Создадим и настроим пользователя, при помощи которого будем соединяться с базой данных из Django (делать все через суперпользователя - не самая хорошая идея). Также укажем значения по умолчанию для кодировки, уровня изоляции транзакций и временного пояса. Вводим поочередно следующие команды:

create user hostgeek_db with password 'testpassword18';
alter role hostgeek_db set client_encoding to 'utf8';
alter role hostgeek_db set default_transaction_isolation to 'read committed';
alter role hostgeek_db set timezone to 'UTC';

Здесь hostgeek_db - это имя пользователя, а testpassword18 - пароль. Указывайте свои индивидуальные значения.

7. Создаем базу данных для нашего проекта

create database first_db owner hostgeek_db;

Здесь first_db - это название базы данных, а hostgeek_db - имя пользователя, который был создан в предыдущем пункте.

8. Выходим из консоли PostgreSQL команой:

\q

9. Активируем виртуальное окружение (если оно не активировано)

Подробно об этом было расписано в прошлой статье по деплою Django. Активируется виртуальное окружение командой:

. ~/myapps/parser/env/bin/activate

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

10. В виртуальное окружение проекта устанавливаем бэкэнд для PostgreSQL

pip install psycopg2

11. Отредактируем файл настроек Django

nano ~/myapps/parser/siteparser/siteparser/settings.py

Полностью удаляем раздел DATABASES = {...} и заменяем на следующий код:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'first_db',
        'USER' : 'hostgeek_db',
        'PASSWORD' : 'testpassword18',
        'HOST' : '127.0.0.1',
        'PORT' : '5432',
    }
}

12. Перезапускаем Gunicorn

Для активизации этих изменений нужно перезапустить Gunicorn. Для этого вводим команду:

htop

Жмем F4 (Filter) и вводим слово gunicorn. Так мы из общей массы отсортируем только процессы Gunicorn. Жмем на клавиатуре стрелку вниз и "киляем" все процессы поочередным нажатием клавиш F9 - 1 (SIGHUP) - Enter. Как видно, после "убийства" процессов они тут же запускаются автоматически, значит все работает правильно blush

Процессы Gunicorn

Выходим из htop нажатием клавиши F10.

13. Выполним миграцию базы данных

Перейдем в папку ~/myapps/parser/siteparser (папка, в которой лежит файл manage.py):

cd ~/myapps/parser/siteparser

Выполним команду миграции БД:

./manage.py migrate

Миграция базы данных Python

14. Создадим суперпользователя Django

Под этим пользователем мы будем авторизовываться в админ-панели Django.

./manage.py createsuperuser

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

15. Перезапускаем Gunicorn (повторяем пункт 12 этой статьи)

16. Авторизуемся в админке

Теперь можем зайти в админку сайта по адресу: http://45.82.178.214/admin/ и авторизоваться в ней под данными созданного суперпользователя. Но можно заметить, что админка не имеет подключенных стилей:

Админка Django без стилей

Для подключения стилей откроем конфигурационный файл Nginx:

sudo nano /etc/nginx/sites-available/default

Добавим в него следующий код и сохраним файл:

location /static/ {
    alias /home/hostgeek/myapps/parser/env/lib/python3.8/site-packages/django/contrib/admin/static/;
    expires modified +1w;
}

Перезапустим Nginx:

sudo service nginx restart

После этого админка будет отображаться корректно:

Админка Django с подключенными стилями

На этом подключение базы данных PostgreSQL к фреймворку Django завершено. В следующей статье разберем настройку Memcached.

Если у вас возникли какие-либо вопросы по этой статье, то задавайте их в комментариях, мы обязательно ответим. Спасибо за внимание!

Оставьте свой отзыв
Для публикации отзыва, пожалуйста, авторизуйтесь на сайте с помощью одной из доступных социальных сетей. Это действие займет несколько секунд Вашего времени и требуется для защиты сайта от накруток рейтингов и отзывов