Как использовать PostgreSQL с вашим приложением Django в Ubuntu 22.04
Введение
Django — это гибкая среда для быстрого создания приложений Python. По умолчанию приложения Django настроены на хранение данных в облегченном файле базы данных SQLite. Хотя это хорошо работает при некоторых нагрузках, более традиционная система управления базами данных может повысить производительность в производственной среде.
В этом руководстве вы установите и настроите PostgreSQL (часто называемый Postgres) с вашим приложением Django. Вы также установите некоторые программные пакеты, создадите учетные данные базы данных для своего приложения, а затем запустите и настроите новый проект Django с этим бэкэндом.
Предпосылки
Для начала вам понадобится сервер Ubuntu 22.04 с настроенным пользователем без полномочий root, настроенным с привилегиями sudo
. Узнайте, как это сделать, следуя нашему руководству по первоначальной настройке сервера.
Когда вы будете готовы продолжить, войдите в систему как пользователь sudo
.
Шаг 1 — Установка компонентов из репозиториев Ubuntu
Сначала обновите кеш менеджера пакетов с помощью apt
:
- sudo apt update
Затем установите необходимые компоненты для вашего проекта Django. Это включает в себя pip
, менеджер пакетов Python, который устанавливает и управляет компонентами Python. Кроме того, установите Postgres вместе с дополнительными библиотеками, чтобы помочь с вашим проектом:
- sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib
После установки Python, Postgres и дополнительных библиотек вы можете перейти к созданию базы данных.
Шаг 2 – Создание базы данных и пользователя базы данных
По умолчанию Postgres использует схему аутентификации, называемую одноранговой аутентификацией для локальных подключений. Это означает, что если имя пользователя операционной системы совпадает с действительным именем пользователя Postgres, этот пользователь может войти в систему без дополнительной аутентификации.
Во время установки Postgres был создан пользователь операционной системы с именем postgres, соответствующий пользователю-администратору postgres PostgreSQL. Вам нужно использовать этого пользователя postgres для выполнения административных задач. Используйте sudo
для передачи имени пользователя postgres
вместе с параметром -u
, который запускает команду от имени пользователя, а не root. Войдите в интерактивный сеанс Postgres, написав следующее:
- sudo -u postgres psql
Теперь вы можете получить доступ к сеансу оболочки для пользователя postgres
.
Затем создайте базу данных для вашего проекта Django. Каждый проект должен иметь свою изолированную базу данных из соображений безопасности. В этом руководстве база данных называется myproject
, но рекомендуется называть ее более информативным. Кроме того, когда вы вводите команды Postgres, не забудьте заканчивать команды в приглашении SQL точкой с запятой, ;
:
- CREATE DATABASE myproject;
Теперь создайте пользователя базы данных, который будет подключаться к базе данных и взаимодействовать с ней. Установите надежный и безопасный пароль:
- CREATE USER myproject_user WITH PASSWORD 'myproject_database_password';
После этого измените несколько параметров подключения для созданного вами пользователя. Это ускорит операции с базой данных, так что правильные значения не нужно запрашивать и устанавливать каждый раз при установлении соединения. Сначала установите кодировку по умолчанию на UTF-8:
- ALTER ROLE myproject_user SET client_encoding TO 'utf8';
Затем установите для схемы изоляции транзакций по умолчанию значение read commit
, которое блокирует чтение незафиксированных транзакций:
- ALTER ROLE myproject_user SET default_transaction_isolation TO 'read committed';
Наконец, установите часовой пояс. По умолчанию ваш проект Django настроен на использование UTC
. Это рекомендации из проекта Django:
- ALTER ROLE myproject_user SET timezone TO 'UTC';
Теперь предоставьте пользователю вашей базы данных права доступа к базе данных, которую вы создали:
- GRANT ALL PRIVILEGES ON DATABASE myproject TO myproject_user;
Выйдите из приглашения SQL, чтобы вернуться в сеанс оболочки пользователя postgres:
- \q
Теперь, когда ваша база данных настроена, вы можете установить Django.
Шаг 3 — Установка Django в виртуальной среде
Для большей гибкости вы установите Django и все его зависимости в виртуальной среде Python.
Вы можете получить пакет virtualenv
, который позволяет создавать эти среды, введя следующую команду:
- sudo pip install virtualenv
Затем создайте каталог для хранения вашего проекта Django:
- mkdir ~/myproject
Затем перейдите в каталог:
- cd ~/myproject
Теперь вы можете создать виртуальную среду для хранения требований Python для нашего проекта Django со следующим:
- python3 -m virtualenv myprojectenv
Это устанавливает локальную копию Python и pip
в каталог с именем myprojectenv
в каталоге вашего проекта.
Перед установкой приложений в виртуальной среде ее необходимо активировать. Вы можете сделать это, введя эту команду:
- source myprojectenv/bin/activate
Ваше приглашение изменится, чтобы показать, что вы сейчас работаете в виртуальной среде. Например: (myprojectenv)пользователь@хост:~/мойпроект$
.
Как только ваша виртуальная среда активна, вы можете установить Django с помощью pip
. Вы также установите пакет psycopg2
, который позволит вам использовать настроенную вами базу данных:
- pip install Django psycopg2
Примечание. Независимо от используемой версии Python при активации виртуальной среды следует использовать команду pip
вместо pip3
.
Теперь вы можете запустить проект Django в каталоге myproject
. Это создаст дочерний каталог с тем же именем для хранения кода и создаст сценарий управления в текущем каталоге. Обязательно включите точку .
в конце команды, чтобы она была настроена правильно:
- django-admin startproject myproject .
После настройки Django и вашей виртуальной среды вы можете перейти к настройке параметров базы данных Django.
Шаг 4 – Настройка параметров базы данных Django
Теперь, когда у вас есть проект, вам нужно настроить его для использования созданной вами базы данных.
Откройте основной файл настроек проекта Django, расположенный в каталоге дочернего проекта, в предпочитаемом вами текстовом редакторе. В этом примере используется nano
:
- nano ~/myproject/myproject/settings.py
В нижней части файла есть раздел DATABASES
, который в настоящее время настроен на использование SQLite:
. . .
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
. . .
Это необходимо изменить, чтобы использовать Postgres.
Во-первых, измените движок, чтобы он использовал адаптер postgresql
вместо бэкенда sqlite3
. В качестве NAME
используйте имя вашей базы данных. В этом примере myproject
— это имя базы данных. Затем добавьте учетные данные для входа, которые включают имя пользователя, пароль и хост для подключения. Наконец, оставьте параметр порта пустым, чтобы было выбрано значение по умолчанию:
. . .
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject',
'USER': 'myproject_user',
'PASSWORD': 'myproject_database_password',
'HOST': 'localhost',
'PORT': '',
}
}
. . .
Вам также необходимо настроить директиву ALLOWED_HOSTS
. Это определяет белый список адресов или доменных имен, которым разрешено подключаться к экземпляру Django. Любые входящие запросы с заголовком Host
, которых нет в этом списке, вызовут исключение. Django требует, чтобы вы установили это, чтобы предотвратить определенный класс уязвимостей безопасности.
В квадратных скобках укажите IP-адреса или доменные имена, связанные с вашим сервером Django. Каждый элемент должен быть указан в цитатах с элементами, разделенными запятой. Если вы хотите запросить весь домен и любые поддомены, поставьте точку в начале записи.
Вы можете добавить доменное имя (имена) и IP-адреса вашего сервера Django следующим образом: ALLOWED_HOSTS=[ your_domain, 203.0.113.5]
. Если вы хотите ответить на ваш_домен
и любые поддомены, начните домен с точки .
: ALLOWED_HOSTS=[. ваш_домен, 203.0.113.5]
.
Например, введите домен вашего сервера или IP-адрес:
. . .
ALLOWED_HOSTS = ['your_server_domain_or_IP']
. . .
Когда вы закончите, сохраните и закройте файл. Если вы используете nano
, нажмите CTRL+X
, затем y
, затем ENTER
.
Шаг 5 — Миграция базы данных и тестирование вашего проекта
Теперь, когда параметры Django настроены, вы можете перенести свои структуры данных в свою базу данных и протестировать сервер.
Начните с создания и применения миграций к вашей базе данных. Поскольку у вас еще нет данных, это создаст начальную структуру базы данных. Во-первых, убедитесь, что вы находитесь в каталоге myproject
:
- cd ~/myproject
Затем сделайте и примените миграцию:
- python manage.py makemigrations
- python manage.py migrate
После создания структуры базы данных создайте учетную запись администратора, введя следующее:
- python manage.py createsuperuser
Вам будет предложено выбрать имя пользователя. Вы можете оставить это поле пустым, чтобы использовать имя пользователя, связанное с вашим сервером. Затем укажите адрес электронной почты и создайте пароль для учетной записи.
Перед доступом к серверу разработки Django проверьте подключение к базе данных. Откройте порт в брандмауэре, чтобы разрешить внешние подключения:
- sudo ufw allow 8000
Открыв порт, вы можете проверить правильность работы вашей базы данных, запустив сервер разработки Django:
- python manage.py runserver 0.0.0.0:8000
В веб-браузере посетите доменное имя или IP-адрес вашего сервера, а затем :8000
, чтобы перейти на целевую страницу Django по умолчанию:
http://server_domain_or_IP:8000
Добавьте /admin
в конец URL-адреса, и вы сможете получить доступ к экрану входа в интерфейс администратора:
Введите имя пользователя и пароль, созданные с помощью команды createsuperuser
. После этого вы попадете в интерфейс администратора:
Когда вы закончите изучение, вы можете остановить сервер разработки, нажав CTRL+C
в окне терминала.
Получив доступ к интерфейсу администратора, вы подтверждаете, что в вашей базе данных хранится информация о вашей учетной записи пользователя и что к ней можно получить соответствующий доступ.
Заключение
В этом руководстве вы узнали, как установить и настроить PostgreSQL в качестве серверной базы данных для проекта Django. В то время как SQLite может справиться с нагрузкой во время разработки и использования в малой рабочей среде, большинство проектов выигрывают от внедрения более полнофункциональной системы управления базами данных.
Чтобы продвинуть свой проект еще дальше, прочитайте наше руководство Как настроить Django с Postgres, Nginx и Gunicorn в Ubuntu 22.04.