Найти в Дзене

Как из python подключиться к базе postgresql на облачном сервере (VPS)

Для программирования я использую среду PyCharm и Jupyter notebook на Yandex Cloud (DataSphere). Понадобилось поработать с базой данных на postgresql. Но где развернуть ее, как с ней взаимодействовать? Поиски ответа в интернете были долгими, информация неполная. Рассказываю. - Понадобиться аккаунт на reg.ru, регистрируемся, пополняем баланс. - входим в аккаунт, ЛКМ (левый клик мышкой) в правом верхнем углу на логин (он же адрес эл. ящика), из списка выбираем "Мои домены и услуги" - далее, слева ЛКМ на VPS, ЛКМ Облачные серверы - справа вверху большой плюс в квадрате ЛКМ - создание сервера: образы - Ubuntu 20.04 LTS, тарифы - Стандартные, Base-1, более ничего не меняем. ЛКМ на Заказать сервер, чуть подождем - ЛКМ по названию сервера, справа ЛКМ Запустить сервер, затем Открыть консоль - откроется окно браузера, переходим в него (ЛКМ по нему или удерживаем Alt + нажимаем Tab для переключения между окнами до нужного) - жмем Enter, появиться приглашение ввести логин (всегда root) и пароль,

Для программирования я использую среду PyCharm и Jupyter notebook на Yandex Cloud (DataSphere). Понадобилось поработать с базой данных на postgresql. Но где развернуть ее, как с ней взаимодействовать? Поиски ответа в интернете были долгими, информация неполная. Рассказываю.

- Понадобиться аккаунт на reg.ru, регистрируемся, пополняем баланс.

- входим в аккаунт, ЛКМ (левый клик мышкой) в правом верхнем углу на логин (он же адрес эл. ящика), из списка выбираем "Мои домены и услуги"

- далее, слева ЛКМ на VPS, ЛКМ Облачные серверы

- справа вверху большой плюс в квадрате ЛКМ

- создание сервера: образы - Ubuntu 20.04 LTS, тарифы - Стандартные, Base-1, более ничего не меняем. ЛКМ на Заказать сервер, чуть подождем

- ЛКМ по названию сервера, справа ЛКМ Запустить сервер, затем Открыть консоль

- откроется окно браузера, переходим в него (ЛКМ по нему или удерживаем Alt + нажимаем Tab для переключения между окнами до нужного)

- жмем Enter, появиться приглашение ввести логин (всегда root) и пароль, который берем в письме на своем эл. ящике (всегда приходит при создании нового сервера или переустановке системы)

- вводим логи и пароль (который не отображается при вводе)

- устанавливаем postgresql: sudo apt update - обновляем список пакетов, sudo apt install postgresql postgresql-contrib - устанавливаем необходимые пакеты (см. подробно тут)

- вводим sudo -u -postgres psql, жмем Enter

- вводим SHOW config_file;, видим подобное '/var/lib/pgsql/9.6/data/postgresql.conf' - это путь расположения конфигурационных файлов

- потребуется два файла: postgresql.conf, pg_hba.conf, (у меня находятся в папке /etc/postgresql/12/main), где 12 это версия, у вас может быть, например, 9.1

- выходим из postgresql командой \q

- находим postgresql.conf -

sudo nano /etc/postgresql/12/main/postgresql.conf

- ищем `# listen_addresses = 'localhost'`, для этого жмем F6, вводим `listen_addresses`, или листаем вниз один экран

- нашли, убираем знак комментария `#` перед `listen_addresses = 'localhost'`, меняем на `listen_addresses = '*'`

- жмем CTRL + O --> ENTER, чтобы сохранить изменения, и CTRL + X, чтобы выйти из nano.

- находим pg_hba.conf sudo nano /etc/postgresql/12/main/pg_hba.conf

- меняем строку под `# IPv4 local connections:` на следующего вида: host all all 0.0.0.0/0 md5

- жмем CTRL + O --> ENTER, чтобы сохранить изменения, и CTRL + X, чтобы выйти из nano.

host - подключаемся через host

all - разрешаем подключение ко всем базам

all - разрешаем подключение любому пользователю

0.0.0.0/0 - маска сети с которой можно подключаться, т.е. любой

md5 - способ шифрования пароля

- теперь создаем пользователя для подключения: su postgres, затем createuser -s -r -d -P postgreadmin, и введите пароль, потом exit

Используемые опции команды createuser:

-s - добавить пользователю права суперпользователя

-r - разрешить пользователю создавать других пользователей

-d - разрешает пользователю создавать базы данных

-P - добавить к пользователю пароль

Для нового подключения используем параметры:

БД - например: postgre (по умолчанию)

Хост - ip-адрес сервера с БД, например: 188.123.456.768 (см. в эл. письме или панели управления сервером, над IPv4, не IPv6)

Порт - 5432 (по умолчанию)

Имя пользователя - postgreadmin

Пароль - созданный выше пароль

- перезапускаем postgresql service postgresql restart

- подключаемся к запущенному! серверу, например, из PyCharm, создаем файл формата `*.py` и добавляем туда следующий код:

import psycopg2
conn = psycopg2.connect(database="postgres", user='postgreadmin',
password='1234', host='188.123.456.768', port= '5432')
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Executing an PostgreSQL function using the execute() method
cursor.execute("select version()")
# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print("Connection established to: ",data)
#Closing the connection
conn.close()
>>> Connection established to: ('PostgreSQL 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit',)

При подготовке статьи я еще раз создал сервер и прошел весь путь от установки postgresql до запроса из python. У меня получилось.

Вот и все

Спасибо за чтение.

Пожалуйста, ознакомьтесь с исходным кодом в записной книжке на моем Github.