Django-приложение на PostgreSQL в CentOS 7
Centos, Python | Комментировать запись
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: CentOS 7, Django, PostgreSQL, Python, virtualenv