4.3. Установка в контейнерных средах #
В этом разделе описан пример установки и настройки PPEM в контейнерных средах.
4.3.1. Процесс установки #
Чтобы использовать PPEM в контейнерных средах:
Создайте образ контейнера с менеджером.
Создайте новые образы контейнеров СУБД или измените существующие для интеграции в них агента, чтобы выполнять мониторинг и управление СУБД через PPEM.
Поскольку агент и сервер СУБД будут одновременно работать в одном контейнере, по умолчанию для работы с образом должен использоваться менеджер служб.
Настройте сетевое взаимодействие контейнеров, чтобы менеджер имел доступ к агентам и наоборот:
Если планируется разместить контейнеры со службами агента и менеджера в разных сетях или на разных хостах, убедитесь, что IP-адреса контейнеров не скрыты NAT и доступны извне.
Например, с Docker можно использовать сетевые драйверы
overlayилиmacvlan.Скорректируйте политики сетевого трафика при их наличии, чтобы разрешить трафик PPEM.
За подробной информацией о требованиях к сетевому взаимодействию с PPEM обратитесь к разделу Безопасность.
Получите API-ключ для настройки агентов:
Запустите контейнер со службой менеджера.
Скопируйте API-ключ из выведенной на экран инструкции по установке агента и сохраните его.
Создайте файл конфигурации агента
ppem-agent.yml:Укажите параметры для подключения агента к контейнерной СУБД.
Укажите ранее полученный API-ключ и URL для подключения агента к менеджеру.
Запустите контейнеры СУБД, передав в них ранее созданный файл конфигурации агента.
4.3.2. Пример процесса установки #
Пример организован следующим образом:
Используются инструменты Docker Engine и Docker Compose.
Для обеспечения сетевого взаимодействия контейнеров используется сетевой драйвер
macvlan, если отсутствуют ограничения трафика.Образы контейнеров основаны на Debian 12.
Образы контейнеров создаются, используя стандартные имена объектов, например,
ppemдля базы данных репозитория.PostgreSQL используется в качестве примера контейнерной СУБД. База данных репозитория для менеджера размещается в отдельном контейнере и также использует PostgreSQL.
В ходе интеграции агента в образ контейнера СУБД используется менеджер служб systemd.
Исполняемый файл
systemdбудет указан по умолчанию, поэтому контейнер должен запускаться с расширенными правами.
Инструкция ниже позволяет протестировать процесс установки и получить минимальную рабочую версию PPEM, подходящую для управления контейнерной СУБД в демонстрационных целях.
Примечание
Инструкцию можно адаптировать под разные среды. Скорректируйте команды и имена объектов в соответствии с вашей операционной системой и другими требованиями.
Чтобы установить PPEM, выполните следующие действия:
Разверните и запустите менеджер:
Создайте отдельный каталог для файлов, необходимых для установки менеджера, например:
mkdir ppem
Создайте файл
ppem/Dockerfileсо следующим содержимым:FROM debian:12 RUN <<EOF set -e apt-get update apt-get -y install curl curl https://repo.postgrespro.com/ppem/ppem/keys/pgpro-repo-add.sh | bash - apt install -y ppem cat <<EOF2 >/etc/ppem-manager.yml http: server: address: "" port: 80 static_files_path: "/usr/share/ppem/web-app" security: enabled: true repo: url: postgres://ppem:ppem@db/ppem EOF2 EOF ENTRYPOINT ["/usr/sbin/ppem-manager", "-config", "/etc/ppem-manager.yml"] EXPOSE 80Создайте файл
ppem/docker-compose.ymlсо следующим содержимым:--- services: db: image: postgres:17 environment: POSTGRES_PASSWORD: ppem POSTGRES_USER: ppem POSTGRES_DB: ppem volumes: - db_data:/var/lib/postgresql/data manager: build: manager depends_on: - db ports: - 8080:80 volumes: db_data:Создайте образ и запустите контейнеры, необходимые для работы службы менеджера:
docker compose up -f ppem/ -d --build
Получите API-ключ для настройки агентов:
Скопируйте API-ключ из выведенной на экран инструкции по установке агента и сохраните его.
Разверните и запустите контейнерную СУБД:
Создайте отдельный каталог для файлов, необходимых для установки СУБД, например:
mkdir dbms
Создайте файл
dbms/Dockerfileсо следующим содержимым:FROM debian:12 COPY start.sh /usr/local/bin/ COPY start.service /etc/systemd/system/ # Systemd and Postgres RUN <<EOF apt-get update && \ apt-get install -y \ systemd \ postgresql \ postgresql-contrib \ sudo \ curl \ gnupg \ lsb-release apt-get clean rm -rf /var/lib/apt/lists/ find /etc/systemd/system \ /lib/systemd/system \ -path '*.wants/*' \ -not -name '*journald*' \ -not -name '*systemd-tmpfiles*' \ -not -name '*systemd-user-sessions*' \ -delete systemctl enable start.service /etc/init.d/postgresql stop rm -rf /var/lib/postgresql/15/main/* EOF # PPEM Agent RUN <<EOF set -e curl https://repo.postgrespro.com/ppem/ppem/keys/pgpro-repo-add.sh | bash - apt install -y ppem-agent systemctl enable ppem-agent EOF EXPOSE 5432 VOLUME /var/lib/postgresql/15/main VOLUME [ "/sys/fs/cgroup" ] CMD [ "/lib/systemd/systemd" ]Файл
Dockerfileпо умолчанию использует исполняемый файлsystemd.Создайте файл службы
systemddbms/start.serviceсо следующим содержимым:[Unit] Description=Systemd-oriented wrapper for database init [Service] Type=oneshot ExecStart=/bin/bash /usr/local/bin/start.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
Для управления СУБД файл службы использует скрипт
start.sh.Создайте файл скрипта
dbms/start.shсо следующим содержимым:#!/bin/bash set -eo pipefail PGDATA=/var/lib/postgresql/15/main init_db() { chown postgres:postgres ${PGDATA} su -l postgres -c "/usr/lib/postgresql/15/bin/initdb -A trust -D ${PGDATA}" sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/15/main/postgresql.conf mv ${PGDATA}/pg_hba.conf /etc/postgresql/15/main/pg_hba.conf echo "host all all al md5" >> /etc/postgresql/15/main/pg_hba.conf systemctl start postgresql psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'postgres';" } if [ "$(ls -1 ${PGDATA} | wc -l)" -eq 0 ]; then init_db else systemctl start postgresql fiСоздайте файл
dbms/docker-compose.ymlсо следующим содержимым:--- services: agent: build: agent hostname: agent privileged: true volumes: - postgres_data:/var/lib/postgresql/15/main - /sys/fs/cgroup:/sys/fs/cgroup:rw - ./ppem-agent.yml:/etc/ppem-agent.yml networks: companynetwork: volumes: postgres_data: networks: companynetwork: driver: macvlan driver_opts: parent: eth0 ipam: config: - subnet: 10.5.1.0/24 gateway: 10.5.1.1Создайте файл конфигурации агента
dbms/ppem-agent.yml.В файле укажите следующие значения:
agent.manager.api_key: ранее полученный API-ключ для подключения агента к менеджеру.agent.manager.url: URL для подключения агента к менеджеру.Например:
http://ppem.example.com:8080/v1
Файл должен иметь следующее содержимое:
agent: name: agent instance: connection_defaults: host: localhost database: postgres port: 5432 user: postgres password: postgres manager: api_key:URL_для_подключения_к_менеджеруurl:API_ключ_для_подключения_к_менеджеруhttp: server: address: "" port: 8081
Создайте образ и запустите контейнер СУБД с интегрированным агентом:
docker compose up -f dbms/ -d --build
Установка PPEM будет завершена. Обновите страницу браузера с веб-приложением и начинайте работу.