В этой статье мы рассмотрим настройку и запуск PgAdmin в контейнере Docker. PgAdmin — удобный инструмент для управления базами данных PostgreSQL, и в некоторых случаях может быть полезным иметь его у себя на сервере. Также мы интегрируем реверс-прокси Traefik для управления SSL-сертификатами, а так же для реализации базовой HTTP-аутентификации в целях ограничения доступа к веб-интерфейсу PgAdmin.
Конфигурация успешно используется на нашем сервере.
Предварительные требования
Перед началом убедитесь, что у вас установлены следующие компоненты:
- Docker (Готовый скрипт для установки Docker на Ubuntu 24.04 LTS)
- Traefik (Установка Traefik с использованием Docker)
Так же вам необходимо настроить поддомен https://pgadmin.<your_domain>
Создание файла Docker Compose
Создайте файл docker-compose.yml
и вставьте в него следующий код:
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 скрипт для инициализации всех необходимых параметров:
#!/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 и устанавливаем ей необходимые права доступа:
mkdir -p /data/appdata/pgadmin
chown -R 5050:5050 /data/appdata/pgadmin
В своем случае, вы можете выполнить эти команды вручную.
Далее нужно инициализировать переменные окружения:
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
. Для этих целей у нас в репозитории так же есть специальный скрипт. Например, можно сделать так:
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
Кроме того, автор проекта ищет работу. Мое резюме.