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

Вступление

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

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

Предпосылки

Для начала вам понадобится чистый экземпляр сервера Ubuntu 16.04 с настроенным пользователем без полномочий root. Пользователь без полномочий root должен быть настроен с привилегиями + sudo +. Узнайте, как это настроить, следуя нашему https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 руководство по настройке начального сервера].

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

Установите компоненты из репозитория Ubuntu

Нашим первым шагом будет установка всех необходимых нам частей из репозиториев. Мы установим + pip +, менеджер пакетов Python, чтобы установить и управлять нашими компонентами Python. Мы также установим программное обеспечение базы данных и соответствующие библиотеки, необходимые для взаимодействия с ними.

Python 2 и Python 3 требуют немного разных пакетов, поэтому выберите команды ниже, соответствующие версии вашего проекта на Python.

Если вы используете * Python 2 *, введите:

sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib

Если вместо этого вы используете * Python 3 *, введите:

sudo apt-get update
sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

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

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

По умолчанию Postgres использует схему аутентификации, называемую «равноправная аутентификация» для локальных соединений. По сути, это означает, что если имя пользователя операционной системы пользователя совпадает с действительным именем пользователя Postgres, этот пользователь может войти в систему без дальнейшей аутентификации.

Во время установки Postgres был создан пользователь операционной системы с именем + postgres +, соответствующий администратору + postgres + PostgreSQL. Нам нужно использовать этого пользователя для выполнения административных задач. Мы можем использовать + sudo + и передать имя пользователя с опцией + -u +.

Войдите в интерактивную сессию Postgres, набрав:

sudo -u postgres psql

Сначала мы создадим базу данных для нашего проекта Django. Каждый проект должен иметь свою собственную изолированную базу данных по соображениям безопасности. Мы будем называть нашу базу данных ++ в этом руководстве, но всегда лучше выбрать что-то более описательное:

CREATE DATABASE ;

note

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

CREATE USER  WITH PASSWORD '';

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

Мы устанавливаем кодировку по умолчанию в UTF-8, что ожидает Django. Мы также устанавливаем схему изоляции транзакции по умолчанию «read commit», которая блокирует чтение из незафиксированных транзакций. Наконец, мы устанавливаем часовой пояс. По умолчанию наши проекты Django будут настроены на использование + UTC. Это все рекомендации из самого проекта Django.

ALTER ROLE  SET client_encoding TO 'utf8';
ALTER ROLE  SET default_transaction_isolation TO 'read committed';
ALTER ROLE  SET timezone TO 'UTC';

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

GRANT ALL PRIVILEGES ON DATABASE  TO ;

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

\q

Установите Django в виртуальной среде

Теперь, когда наша база данных настроена, мы можем установить Django. Для большей гибкости мы установим Django и все его зависимости в виртуальной среде Python. Пакет + virtualenv + позволяет вам легко создавать эти среды.

Если вы используете * Python 2 *, вы можете установить правильный пакет, набрав:

sudo pip install virtualenv

Если вы используете * Python 3 *, введите:

sudo pip3 install virtualenv

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

mkdir ~/
cd ~/

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

virtualenv

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

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

source /bin/activate

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

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

Note

pip install django psycopg2

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

django-admin.py startproject  .

Настройте параметры базы данных Django

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

Откройте основной файл настроек проекта Django, расположенный в директории дочернего проекта:

nano ~///settings.py

Внизу файла вы увидите раздел + DATABASES +, который выглядит следующим образом:

~ / MyProject / MyProject / settings.py

. . .

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.sqlite3',
       'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

. . .

В настоящее время он настроен на использование SQLite в качестве базы данных. Нам нужно изменить это так, чтобы вместо этого использовалась наша база данных PostgreSQL.

Сначала измените движок так, чтобы он использовал адаптер + postgresql_psycopg2 + вместо адаптера + sqlite3 +. Для + NAME + используйте имя вашей базы данных (++ в нашем примере). Нам также нужно добавить учетные данные для входа. Нам нужно имя пользователя, пароль и хост для подключения. Мы добавим и оставим пустым параметр порта, чтобы выбрать по умолчанию:

~ / MyProject / MyProject / settings.py

. . .

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.',
       'NAME': '',
       'USER': '',
       'PASSWORD': '',
       'HOST': 'localhost',
       'PORT': '',
   }
}

. . .

Пока вы здесь, вам также может потребоваться изменить директиву + ALLOWED_HOSTS +. Это определяет белый список адресов или доменных имен, которые можно использовать для подключения к экземпляру Django. Любые входящие запросы с заголовком * Host *, которого нет в этом списке, вызовут исключение. Django требует, чтобы вы установили это, чтобы предотвратить определенный класс уязвимости безопасности.

В квадратных скобках укажите IP-адреса или доменные имена, связанные с вашим сервером Django. Каждый элемент должен быть указан в цитатах с записями, разделенными запятой. Если вы хотите запросить весь домен и любые дочерние домены, добавьте точку к началу записи. В приведенном ниже фрагменте есть несколько закомментированных примеров, используемых для демонстрации:

~ / MyProject / MyProject / settings.py

. . .
# The simplest case: just add the domain name(s) and IP addresses of your Django server
# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
# To respond to 'example.com' and any subdomains, start the domain with a dot
# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
ALLOWED_HOSTS = ['', '', ]

Когда вы закончите, сохраните и закройте файл.

Перенос базы данных и тестирование вашего проекта

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

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

cd ~/
python manage.py makemigrations
python manage.py migrate

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

python manage.py createsuperuser

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

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

Разрешите внешние подключения к порту, набрав:

sudo ufw allow 8000

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

python manage.py runserver 0.0.0.0:8000

В веб-браузере перейдите на имя домена или IP-адрес вашего сервера, а затем +: 8000 +, чтобы перейти к корневой странице Django по умолчанию:

http://:8000

Вы должны увидеть страницу индекса по умолчанию:

изображение: https: //assets.digitalocean.com/articles/django_mysql_1404/django_index.png [индекс Джанго]

Добавьте + / admin + в конец URL, и вы сможете получить доступ к экрану входа в интерфейс администратора:

изображение: https: //assets.digitalocean.com/articles/django_mysql_1404/admin_login.png [Вход администратора Django]

Введите имя пользователя и пароль, которые вы только что создали, используя команду + createuperuser +. Затем вы попадете в интерфейс администратора:

изображение: https: //assets.digitalocean.com/articles/django_mysql_1404/admin_interface.png [интерфейс администратора Django]

Когда вы закончите расследование, вы можете остановить сервер разработки, нажав CTRL-C в окне терминала.

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

Заключение

В этом руководстве мы продемонстрировали, как установить и настроить PostgreSQL в качестве серверной базы данных для проекта Django. В то время как SQLite легко справляется с нагрузкой во время разработки и легкого производственного использования, большинство проектов выигрывают от внедрения более полнофункциональной СУБД.

Related