Поиск по сайту:

Как использовать PostgreSQL с вашим приложением Django в Ubuntu 22.04


Введение

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

В этом руководстве вы установите и настроите PostgreSQL (часто называемый Postgres) с вашим приложением Django. Вы также установите некоторые программные пакеты, создадите учетные данные базы данных для своего приложения, а затем запустите и настроите новый проект Django с этим бэкэндом.

Предпосылки

Для начала вам понадобится сервер Ubuntu 22.04 с настроенным пользователем без полномочий root, настроенным с привилегиями sudo. Узнайте, как это сделать, следуя нашему руководству по первоначальной настройке сервера.

Когда вы будете готовы продолжить, войдите в систему как пользователь sudo.

Шаг 1 — Установка компонентов из репозиториев Ubuntu

Сначала обновите кеш менеджера пакетов с помощью apt:

  1. sudo apt update

Затем установите необходимые компоненты для вашего проекта Django. Это включает в себя pip, менеджер пакетов Python, который устанавливает и управляет компонентами Python. Кроме того, установите Postgres вместе с дополнительными библиотеками, чтобы помочь с вашим проектом:

  1. 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, написав следующее:

  1. sudo -u postgres psql

Теперь вы можете получить доступ к сеансу оболочки для пользователя postgres.

Затем создайте базу данных для вашего проекта Django. Каждый проект должен иметь свою изолированную базу данных из соображений безопасности. В этом руководстве база данных называется myproject, но рекомендуется называть ее более информативным. Кроме того, когда вы вводите команды Postgres, не забудьте заканчивать команды в приглашении SQL точкой с запятой, ;:

  1. CREATE DATABASE myproject;

Теперь создайте пользователя базы данных, который будет подключаться к базе данных и взаимодействовать с ней. Установите надежный и безопасный пароль:

  1. CREATE USER myproject_user WITH PASSWORD 'myproject_database_password';

После этого измените несколько параметров подключения для созданного вами пользователя. Это ускорит операции с базой данных, так что правильные значения не нужно запрашивать и устанавливать каждый раз при установлении соединения. Сначала установите кодировку по умолчанию на UTF-8:

  1. ALTER ROLE myproject_user SET client_encoding TO 'utf8';

Затем установите для схемы изоляции транзакций по умолчанию значение read commit, которое блокирует чтение незафиксированных транзакций:

  1. ALTER ROLE myproject_user SET default_transaction_isolation TO 'read committed';

Наконец, установите часовой пояс. По умолчанию ваш проект Django настроен на использование UTC. Это рекомендации из проекта Django:

  1. ALTER ROLE myproject_user SET timezone TO 'UTC';

Теперь предоставьте пользователю вашей базы данных права доступа к базе данных, которую вы создали:

  1. GRANT ALL PRIVILEGES ON DATABASE myproject TO myproject_user;

Выйдите из приглашения SQL, чтобы вернуться в сеанс оболочки пользователя postgres:

  1. \q

Теперь, когда ваша база данных настроена, вы можете установить Django.

Шаг 3 — Установка Django в виртуальной среде

Для большей гибкости вы установите Django и все его зависимости в виртуальной среде Python.

Вы можете получить пакет virtualenv, который позволяет создавать эти среды, введя следующую команду:

  1. sudo pip install virtualenv

Затем создайте каталог для хранения вашего проекта Django:

  1. mkdir ~/myproject

Затем перейдите в каталог:

  1. cd ~/myproject

Теперь вы можете создать виртуальную среду для хранения требований Python для нашего проекта Django со следующим:

  1. python3 -m virtualenv myprojectenv

Это устанавливает локальную копию Python и pip в каталог с именем myprojectenv в каталоге вашего проекта.

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

  1. source myprojectenv/bin/activate

Ваше приглашение изменится, чтобы показать, что вы сейчас работаете в виртуальной среде. Например: (myprojectenv)пользователь@хост:~/мойпроект$.

Как только ваша виртуальная среда активна, вы можете установить Django с помощью pip. Вы также установите пакет psycopg2, который позволит вам использовать настроенную вами базу данных:

  1. pip install Django psycopg2

Примечание. Независимо от используемой версии Python при активации виртуальной среды следует использовать команду pip вместо pip3.

Теперь вы можете запустить проект Django в каталоге myproject. Это создаст дочерний каталог с тем же именем для хранения кода и создаст сценарий управления в текущем каталоге. Обязательно включите точку . в конце команды, чтобы она была настроена правильно:

  1. django-admin startproject myproject .

После настройки Django и вашей виртуальной среды вы можете перейти к настройке параметров базы данных Django.

Шаг 4 – Настройка параметров базы данных Django

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

Откройте основной файл настроек проекта Django, расположенный в каталоге дочернего проекта, в предпочитаемом вами текстовом редакторе. В этом примере используется nano:

  1. 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:

  1. cd ~/myproject

Затем сделайте и примените миграцию:

  1. python manage.py makemigrations
  2. python manage.py migrate

После создания структуры базы данных создайте учетную запись администратора, введя следующее:

  1. python manage.py createsuperuser

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

Перед доступом к серверу разработки Django проверьте подключение к базе данных. Откройте порт в брандмауэре, чтобы разрешить внешние подключения:

  1. sudo ufw allow 8000

Открыв порт, вы можете проверить правильность работы вашей базы данных, запустив сервер разработки Django:

  1. 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.