Установка PgAdmin c использованием Docker и Traefik

В этой статье мы рассмотрим настройку и запуск PgAdmin в контейнере Docker. PgAdmin — удобный инструмент для управления базами данных PostgreSQL, и в некоторых случаях может быть полезным иметь его у себя на сервере. Также мы интегрируем реверс-прокси Traefik для управления SSL-сертификатами, а так же для реализации базовой HTTP-аутентификации в целях ограничения доступа к веб-интерфейсу PgAdmin.

Конфигурация успешно используется на нашем сервере.

Предварительные требования

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

Так же вам необходимо настроить поддомен https://pgadmin.<your_domain>

Создание файла Docker Compose

Создайте файл docker-compose.yml и вставьте в него следующий код:

YAML
services:
  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4:8.11.0
    restart: unless-stopped
    networks:
      - proxynet
    env_file:
      - /data/secrets/${SERVER_DOMAIN}/${SERVER_DOMAIN}.env
    environment:
       PGADMIN_CONFIG_SERVER_MODE: 'False'
       PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False'
       PGADMIN_DEFAULT_EMAIL: ${ADMIN_EMAIL}
    labels:
       - "traefik.enable=true"
       - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.${SERVER_DOMAIN}`)"
       - "traefik.http.routers.pgadmin.middlewares=pgadmin-auth"
       - "traefik.http.middlewares.pgadmin-auth.basicauth.usersfile=/httpauth/usersfile.htpasswd"
    volumes:
      - /data/secrets/${SERVER_DOMAIN}/httpauth:/httpauth
      - /data/appdata/pgadmin:/var/lib/pgadmin
networks:
  proxynet:
    external: true

Разбор конфигурации

  • services: — Раздел, где определяются различные сервисы. В нашем случае это один сервис — pgadmin.
  • pgadmin: — Имя сервиса. Так будет называться контейнер.
  • container_name: pgadmin — Устанавливает имя контейнера в Docker.
  • image: dpage/pgadmin4:8.11.0 — Используемый образ контейнера. В данном случае это PgAdmin версии 8.11.0.
  • restart: unless-stopped — Политика перезапуска контейнера. Контейнер будет перезапущен, если остановится из-за сбоев, но не будет перезапущен, если его остановить вручную.
  • networks: — Указание сетей, к которым подключен контейнер. Здесь используется сеть proxynet.
  • env_file: — Указание файла с переменными окружения. Этот файл должен содержать переменные, такие как имя сервера и домен сервера.
  • environment: — Переменные окружения для настройки PgAdmin.
  • PGADMIN_CONFIG_SERVER_MODE: 'False' — Отключает режим сервера (многопользовательский), позволяя запускать PgAdmin в режиме рабочего стола (однопользовательский). Мы устанавливаем для него значение False, поэтому не будут запрашиваться учетные данные для входа. Вместо этого используется базовая HTTP аутентификация.
  • PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False' — Позволяет обойти запрашивание мастер-пароля.
  • PGADMIN_DEFAULT_EMAIL: ${ADMIN_EMAIL} — Устанавливает адрес электронной почты администратора, который берется из переменных окружения.
  • labels: — Используются для конфигурации Traefik, который выступает обратным прокси-сервером.
  • traefik.enable=true — Включает Traefik для данного сервиса.
  • traefik.http.routers.pgadmin.rule=Host(pgadmin.${SERVER_DOMAIN}) — Устанавливает правила маршрутизации по домену.
  • traefik.http.routers.pgadmin.middlewares=pgadmin-auth — Указывает использовать middleware для аутентификации.
  • traefik.http.middlewares.pgadmin-auth.basicauth.usersfile=/httpauth/usersfile.htpasswd — Указывает файл с пользователями для базовой HTTP-аутентификации.
  • volumes: — Раздел для монтирования внешних папок в контейнер.
  • /data/secrets/${SERVER_DOMAIN}/httpauth:/httpauth — Монтирует директорию с конфигом для HTTP-аутентификации.
  • /data/appdata/pgadmin:/var/lib/pgadmin — Монтирует директорию для хранения данных PgAdmin.
  • networks: — Определение используемых сетей. Сеть proxynet задана как внешняя.

Подготовка окружения

У нас на сервере используется специально разработанная система скриптов для автоматизации установки. Эти скрипты по большей части опубликованы в нашем репозитории и описаны в отдельной статье. В нашем случае, вместе с этим docker-compose.yml идет Bash скрипт для инициализации всех необходимых параметров:

Bash
#!/bin/bash

if [ "$(id -u)" != "0" ]; then
    echo -e "\033[31mThis script requires superuser rights.\033[0m"
    exit 0
fi

trap 'echo -e "\033[31minstall.sh: Something went wrong\033[0m"; exit 1' ERR
set -e

export DEBIAN_FRONTEND=noninteractive

echo "Install pgadmin..."
mkdir -p /data/appdata/pgadmin
chown -R 5050:5050 /data/appdata/pgadmin
cd /data/utils
sudo bash env-gen.sh PGADMIN_DEFAULT_PASSWORD
cd /data/pgadmin
sudo docker compose up -d

trap - ERR
echo "Install pgadmin complete"

В начале мы создаем директорию данных для PgAdmin и устанавливаем ей необходимые права доступа:

Bash
mkdir -p /data/appdata/pgadmin
chown -R 5050:5050 /data/appdata/pgadmin


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

Далее нужно инициализировать переменные окружения:

Bash
sudo bash env-gen.sh PGADMIN_DEFAULT_PASSWORD


На нашем сервере используется специализированный скрипт env-gen.sh из репозитория utils, который добавляет записи в .env файл. Но вы так же можете вручную создать файл ${SERVER_DOMAIN}.env в директории /data/secrets/${SERVER_DOMAIN}/ и заполнить его необходимыми значениями:

PGADMIN_DEFAULT_PASSWORD=your_default_password

Замените your_default_password на свое значение.

Так же для работы потребуется указать глобальные переменные сервера PGADMIN_DEFAULT_EMAIL и SERVER_DOMAIN. Для этих целей у нас в репозитории так же есть специальный скрипт. Например, можно сделать так:

Bash
cd /data/utils
bash global-env.sh PGADMIN_DEFAULT_EMAIL admin@checkerwars.com
bash global-env.sh SERVER_DOMAIN checkerwars.com


Так же необходимо настроить HTTP-аутентификацию. В нашей конфигурации файл, в котором хранятся акаунты для входа находится по пути /data/secrets/${SERVER_DOMAIN}/httpauth/usersfile.htpasswd. В него необходимо добавить строчку вида admin:passoword_hash, генерация которой описана в этой статье. Но например, для генерации вы так же можете использовать сторонний сервис вроде этого.

Запуск сервиса

Откройте терминал, перейдите в директорию с файлом docker-compose.yml и выполните команду:

docker-compose up -d

Эта команда загрузит образ PgAdmin, создаст и запустит контейнер в фоновом режиме. После успешного запуска вы сможете пользоваться PgAdmin через веб-браузер, набрав https://pgadmin.<your_domain>. Для доступа вам потребуется ввести логин и пароль, сконфигурированные ранее.

Репозиторий этой конфигурации можно найти здесь.


Если вам интересен наш проект, есть вопросы, замечания, или предложения — оставляйте комментарии или пишите на почту: checkerwars@mail.ru

Кроме того, автор проекта ищет работу. Мое резюме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *