Привет, Хабр. Сегодня я расскажу вам, как развернуть мощную и супер популярную SQL базу данных PostgreSQL. Для решения этой задачи существует множество способов, но я буду говорить о способе разворачивания при помощи Docker контейнера.

Для старта вам необходимо будет обзавестись VPS сервером (виртуальным или выделенным) с линуксом. Я обычно предпочитаю Ubunta, так что будем рассматривать на ее примере.

После покупки вам предложат способ входа. Обычно это SSH – значит и мы возьмем его за основу.

Допустим данные для входа это:

Hidden text

IPv4-адрес сервера: 000.0.000.000

Пользователь: root

Пароль: ZZujF38P$LcpWWZh

  1. Открываем командную строку

  2. Вводим команду: ssh root@000.0.000.000

  3. Подтверждаем сохранение SSH ключа командой yes

  4. Вводим пароль (при вставке пароль не отображается, что является нормальной защитной мерой, затем нажимаем ENTER)

После успешного входа, вас поприветствует Ubuntu, что будет свидетельствовать о том, что сервер работает и доступ к нему есть.

Обновляем Ubuntu и догружаем пакеты:

sudo apt update -y 
sudo apt upgrade -y

Флаг -y используется как согласие на установку по умолчанию.

Установите Docker, если он еще не установлен:

sudo apt install -y docker.io

Запустите службу Docker:

sudo systemctl start docker

Включите автозапуск Docker при загрузке системы:

sudo systemctl enable docker

Теперь нам необходимо создать контейнер postgres.

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

sudo docker run -d --name my_db_postgres -e POSTGRES_PASSWORD=083Hdwd3 -e POSTGRES_USER=admin -e POSTGRES_DB=my_first_db -p 5432:5432 postgres

После ввода дожидаемся пока все загрузится и установится. Для того чтоб посмотреть на запущенные Docker контейнеры вводим:

sudo docker ps

Разбор команды для создания контейнера

Теперь давайте разберемся, что сделала наша команда:

  • sudo docker run -d: запускает новый контейнер в фоновом режиме (detached mode).

  • --name my_db_postgres: задает имя контейнера для удобства управления.

  • --restart always: автоматически перезапускает контейнер при сбое или перезапуске системы.

  • -e POSTGRES_PASSWORD=083Hdwd3: устанавливает пароль для пользователя Postgres.

  • -e POSTGRES_USER=admin: создает пользователя с именем admin.

  • -e POSTGRES_DB=my_first_db: создает базу данных с именем my_first_db.

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

Подключение к базе данных

Теперь давайте подключимся к нашей базе данных, чтобы убедиться, что все работает корректно. В качестве GUI для взаимодействия с SQL базами данных я обычно использую DBeaver, вы же для себя можете пользоваться любой программой.

  • Запускаем DBeaver.

  • Нажимаем на новое соединение (или комбинация клавиш CTRL + SHIFT + N).

  • Выбираем PostgreSQL.

  • Вводим данные для подключения (хост – это IP адрес сервера, а остальное, думаю, понятно).

  • Жмем на «Тест соединения».

  • Если все ок – жмем на «Готово».

Запуск и указание на "Новое соединение"
Запуск и указание на "Новое соединение"
Выбираем PostgreSQL
Выбираем PostgreSQL
Ввод данных для авторизации, тест и сохранение авторизации.
Ввод данных для авторизации, тест и сохранение авторизации.

Заключение

Таким образом, буквально за пару минут мы подняли серьезную базу данных, которую можно будет использовать в большом количестве проектов, начиная от Telegram ботов и заканчивая большими сайтами. Я, например, практически не пользуюсь другими SQL в своих проектах (разве что в SQLITE в совссем маленьких проектах).

Если вам будет интересна эта тема в формате программного взаимодействия с PostgreSQL (например, через python3, модуль asyncpg), дайте знать. С удовольствием поделюсь своими наработками.

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

Спасибо за внимание!

Комментарии (10)


  1. fzfx
    07.06.2024 05:42
    +12

    С технической стороны всё хорошо, кроме пары моментов:

    1. PostgreSQL выставлять в интернет "голой жопой" не рекомендуется, особенно если пароль на учётку в нём выбран по принципу "что-нибудь простое, например, 123". Довольно быстро такое приводит к тому, что контейнер начинает майнить, либо данные в таблицах оказываются удалены или зашифрованы.

    2. Коль уж поднимаете PostgreSQL в контейнере без вольюма, желательно упомянуть о том, что время жизни БД в этом случае - до смерти контейнера.


    1. yakvenalex Автор
      07.06.2024 05:42

      Да, абсолютно верно.


    1. 500rur
      07.06.2024 05:42

      чем прикрыть задницу базы?


      1. maxzh83
        07.06.2024 05:42

        Обычно ssh-тоннелем


  1. Revertis
    07.06.2024 05:42
    +2

    Вы подключались к хосту юзером root, зачем во всех командах sudo?


    1. yakvenalex Автор
      07.06.2024 05:42

      Затем что не все будут подключаться через root. А после уже вопросы пойдут "А чё оно не работает". Многоходовочка)


  1. yakvenalex Автор
    07.06.2024 05:42

    12 дизов, за что?)) Ребята, это тут так принято на старте мочить или куда?)


    1. FelixTheMagnificent
      07.06.2024 05:42
      +3

      Скорее тут принято не публиковать туториалы, худшие по качеству, нежели ридми у контейнера самой postgres.


  1. khgvghv
    07.06.2024 05:42
    +2

    Без докера еще пару минут можно было бы сэкономить.


  1. savostin
    07.06.2024 05:42

    А, это только на VPS. Не, не подходит.