Иногда, в тестовых или учебных целях необходимо быстро развернуть Postgres сервер и систему администрирования БД, такие как PgAdmin или Adminer. Конечно можно использовать облачные сервисы баз данных (Amazon, Google cloud, Яндекс облако …) , но я решил сделать это на VPS и через Docker. Благо, как я говорил выше, для тестов, можно арендовать сейчас недорого VPS с почасовой оплатой (~ 0,26 - 0,58 р/час), и опыт работы с Unix системами будет полезен.
В качестве базового для докера, я взял этот «образ», вернее репозиторий 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.
Скопировать команду, вставить в терминале и запустить.
Команды скачает скрипт «1_postgres.sh», сделает его исполняемым и запустит его.
Краткое описание действий скрипта описано на Гитхабе.
Далее скрипт спросит, хотите ли поменять пароль у root-a
После имя пользователя в системе, если Вы уже заводили пользователя под кем вы обычно работаете, то введите его имя. Если нет , то скрипт создаст и попросит задать пароль для него.
Далее я не буду описывать действия скрипта, просто приложу скрины, где справа будет исполняемый скрипт с подсказками, слева то, что происходит в терминале.
Установка завершена. Видим запущенные контейнеры. Ниже информацию для подключения через 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 адрес.
В конце завершения скрипта (рис.9.5), выводится небольшая инструкция для смены настроек. Например, в случае если у Вас PostgreSQL уже крутиться на основном сервере на порту 5432 и потому Вам необходимо поменять порт Postgres сервера в докере на 5433 к примеру, или поменять порты PgAdmin-a и Adminer-a на 15050 и 18080, или поменять имя пользователя и пароль к БД PostgreSQL. Для примера приведен файл «.env_example».
Сделаем как в инструкции (рис.9.5).
Проверим
Если вы обеспокоены безопасностью сервера, то можно контейнеры останавливать и при необходимости включать:
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.