Приветствую! В прошлой статье мы выполнили деплой приложения Django на сервере с операционной системой Ubuntu 20.04. В этой статье мы продолжим эту инструкцию, а именно установим и подключим мощную и функциональную базу данных PostgreSQL к нашему Django приложению.
По-умолчанию Django использует базу данных SQLite, но это не самый лучший вариант для хранения информации. Поэтому работать мы будем именно с PostgreSQL.
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 -
sudo apt update
sudo apt install postgresql-12 postgresql-contrib postgresql-server-dev-12
На момент написания статьи последней актуальной версий являлась PostgreSQL-12. Проверить последнюю версию можно на официальном сайте БД. В случае обновления можно просто заменить версию в команде, например, sudo apt install postgresql-13.
sudo -u postgres psql postgres
\password postgres
Создадим и настроим пользователя, при помощи которого будем соединяться с базой данных из 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 - пароль. Указывайте свои индивидуальные значения.
create database first_db owner hostgeek_db;
Здесь first_db - это название базы данных, а hostgeek_db - имя пользователя, который был создан в предыдущем пункте.
\q
Подробно об этом было расписано в прошлой статье по деплою Django. Активируется виртуальное окружение командой:
. ~/myapps/parser/env/bin/activate
Конечно, эта команда зависит от пути, в который вы установили виртуальное окружение. Но у меня оно активируется таким образом.
pip install psycopg2
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',
}
}
Для активизации этих изменений нужно перезапустить Gunicorn. Для этого вводим команду:
htop
Жмем F4 (Filter) и вводим слово gunicorn. Так мы из общей массы отсортируем только процессы Gunicorn. Жмем на клавиатуре стрелку вниз и "киляем" все процессы поочередным нажатием клавиш F9 - 1 (SIGHUP) - Enter. Как видно, после "убийства" процессов они тут же запускаются автоматически, значит все работает правильно
Выходим из htop нажатием клавиши F10.
Перейдем в папку ~/myapps/parser/siteparser (папка, в которой лежит файл manage.py):
cd ~/myapps/parser/siteparser
Выполним команду миграции БД:
./manage.py migrate
Под этим пользователем мы будем авторизовываться в админ-панели Django.
./manage.py createsuperuser
Теперь можем зайти в админку сайта по адресу: http://45.82.178.214/admin/ и авторизоваться в ней под данными созданного суперпользователя. Но можно заметить, что админка не имеет подключенных стилей:
Для подключения стилей откроем конфигурационный файл 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
После этого админка будет отображаться корректно:
На этом подключение базы данных PostgreSQL к фреймворку Django завершено. В следующей статье разберем настройку Memcached.
Если у вас возникли какие-либо вопросы по этой статье, то задавайте их в комментариях, мы обязательно ответим. Спасибо за внимание!