Иногда, в тестовых или учебных целях необходимо быстро развернуть Postgres сервер и систему администрирования БД, такие как PgAdmin или Adminer. Конечно можно использовать облачные сервисы баз данных (Amazon, Google cloud, Яндекс облако …) , но я решил сделать это на VPS и через Docker. Благо, как я говорил выше, для тестов, можно арендовать сейчас недорого VPS с почасовой оплатой (~ 0,26 - 0,58 р/час), и опыт работы с Unix системами будет полезен.

рис.1 Цены на VPS
рис.1 Цены на VPS

В качестве базового для докера, я взял этот «образ», вернее репозиторий compose-postgres и добавил в файл «docker-compose.yml» в раздел «services» сервис «adminer».

Установку Docker-а и Docker Compose взял с официальной страницы Install Docker Engine on Ubuntu.

Этой информации мне хватило, чтобы создать один единственный bash скрипт «1_postgres.sh», чтобы запустив его на VPS (ОС Ubuntu), установить докер с компоусом, PostgreSQL, PgAdmin и Adminer.

Cпросите, зачем Adminer, если есть PgAdmin? Иногда в своих тестовых проектах, используем SQLite, или другую СУБД. Adminer позволяет подключиться к большому списку СУБД (MySQL, MS SQL, Oracle, MongoDB, ..) .

И так для установки надо перейти на мной созданный репозиторий на гитхабе. Подключиться к своему VPS по SSH.

рис.2 Переход в репозиторий, Подключение к VPS
рис.2 Переход в репозиторий, Подключение к VPS

Скопировать команду, вставить в терминале и запустить.

Команды скачает скрипт «1_postgres.sh», сделает его исполняемым и запустит его.

рис.3 Запуск скрипта
рис.3 Запуск скрипта

Краткое описание действий скрипта описано на Гитхабе.

Далее скрипт спросит, хотите ли поменять пароль у root-a

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

рис.4 Смена пароля root-а. Добавление пользователя
рис.4 Смена пароля root-а. Добавление пользователя

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

рис.5 Установка Docker, Docker-compose
рис.5 Установка Docker, Docker-compose
рис.6 Скачивание «docker-compose.ym»l
рис.6 Скачивание «docker-compose.ym»l
рис.7 Ввод пользователя и пароля для БД
рис.7 Ввод пользователя и пароля для БД
рис.8 Завершение работы скрипта
рис.8 Завершение работы скрипта

Установка завершена. Видим запущенные контейнеры. Ниже информацию для подключения через PgAdmin и Adminer.

Вводим эти данные в браузере и проверяем работу.

рис.9.1 Подключение через PgAdmin и Adminer
рис.9.1 Подключение через PgAdmin и Adminer
рис.9.2 Подключение через PgAdmin, добавление сервера
рис.9.2 Подключение через PgAdmin, добавление сервера
рис.9.3 Подключение через PgAdmin, ввод названия сервера
рис.9.3 Подключение через PgAdmin, ввод названия сервера
рис.9.4 Подключение через PgAdmin и Adminer, ввод настроек подключения
рис.9.4 Подключение через PgAdmin и Adminer, ввод настроек подключения
рис.9.5 Подключение через PgAdmin и Adminer, проверка. Инструкция для изменения настроек подключения
рис.9.5 Подключение через PgAdmin и Adminer, проверка. Инструкция для изменения настроек подключения

Если посмотреть процессы докера (рис.10), то увидим адреса 172.18.0.2, 172.18.0.3 и 172.18.0.4.

Это адреса подсетки «postgresql_vps_net_postgres» 172.18.0.0/24, которые создал Docker. Потому для подключения, каких то внутренних проектов на сервере к БД PostgreSQL, можно использовать не внешний IP адрес 91.222.236.168, а 172.18.0.3 — где крутится как раз на порту 5432 контейнер с PostgreSQL. Этот же IP адрес можно использовать и в PgAdmin (Host name/address) и в Adminer (Server). Но если вы удаленно, например у Вас локально стоит PgAdmin и Вы хотите подключиться к базе на VPS, то необходимо указывать внешний IP адрес.

рис.10 Сеть докера. Проверка с локального PgAdmin и с IP адресом докера
рис.10 Сеть докера. Проверка с локального PgAdmin и с IP адресом докера

В конце завершения скрипта (рис.9.5), выводится небольшая инструкция для смены настроек. Например, в случае если у Вас PostgreSQL уже крутиться на основном сервере на порту 5432 и потому Вам необходимо поменять порт Postgres сервера в докере на 5433 к примеру, или поменять порты PgAdmin-a и Adminer-a на 15050 и 18080, или поменять имя пользователя и пароль к БД PostgreSQL. Для примера приведен файл «.env_example».

Сделаем как в инструкции (рис.9.5).

рис.11 Смена настроек по инструкции
рис.11 Смена настроек по инструкции

Проверим

рис.12 Проверка подключений, после изменения настроек (переменных окружения в файле .env)
рис.12 Проверка подключений, после изменения настроек (переменных окружения в файле .env)

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

docker container stop adminer_cont

docker container start adminer_cont

Либо без слова «container»:

docker stop pgadmin_cont

docker start pgadmin_cont

А для PostgreSQL сервера, нужно скорее всего заходить в контейнер и настроить конфигурационные файлы «pg_hba.conf, … », для доступа не со всех IP адресов, а с внутренних адресов докера 172.18.0.0 (или 172.19.0.0), но это отдельная тема, касаться её не будем.

Бывает в процессе разработки необходимо проверить работу с конкретной версией PostgreSQL, поэтому в файле «docker-compose.yml», я оставил закомментированными такие строчки «image: postgres:12.6-alpine», изменив версию и раскомментировав, можно проверять на определенной версии.

Работа c SQLite в Adminer здесь не возможна, так как Adminer требует ввод пароля, сделано для безопасности. Но есть плагины и определенные настройки, вроде даже как и готовые контейнеры, чтобы отключить функцию проверки пароля. Я не стал этим заниматься.

И еще здесь устанавливается docker-compose-plugin версии v2..., потому при работе используется не привычное мне, слитная команда «docker-compose ...» , а раздельное написание «docker compose …».

Вроде это все, что я хотел сказать.

Надеюсь кому то поможет.

Короткая видео версия shorts на youtube.

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


  1. NikaLapka
    13.01.2024 03:51

    Ну, во-первых, "И так для установки надо перейти на мной созданный репозиторий на гитхабе ..Команды скачает скрипт «1_postgres.sh», сделает его исполняемым и запустит его.",

    во-вторых, VPS на таймвэбе и рег.ру, отделён от основного сервиса: отдельная регистрация, отдельный счёт, отдельная панелька, не буду гадать о причинах, скажу лишь что сталкивался с таким на практике и в случае возникновения проблем основной сервис "кидает через колено" - "вот где VPS открывали - туда и обращайтесь".

    в-третьих, самые дешёвые VPS на ihc.ru(72 руб\мес) и jino.ru(129 руб\мес).


    1. aquarium
      13.01.2024 03:51
      -3

      Интересное у Вас понятие дешевизны. Даже беглый просмотр показал, что на таймвеб дешевле ощутимо.


  1. nronnie
    13.01.2024 03:51
    +13

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


    1. ky0
      13.01.2024 03:51
      +3

      Зато намного проще, чем apt install postgresql ; nano postgresql.conf ; nano pg_hba.conf ; service postgresql restart!


      1. Cregennan
        13.01.2024 03:51

        И проще чем с сайта скопировать и вставить в консоль docker run -d postgres...?


        1. ky0
          13.01.2024 03:51

          СУБД в докере - это такое. Я по умолчанию предполагаю использование, более-менее приближенное к продукционному.


  1. mikaakim
    13.01.2024 03:51

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


  1. kest70
    13.01.2024 03:51

    Эта статья прошла модерацию?


  1. Ingener74
    13.01.2024 03:51

    Как то сложно, к тому же для учебных целей, там делов то на минуту всё это запустить. И зачем это делать на VPS, хотите потренироваться запустите на локальной машине.