4.3. Установка в контейнерных средах #

В этом разделе описан пример установки и настройки PPEM в контейнерных средах.

4.3.1. Процесс установки #

Чтобы использовать PPEM в контейнерных средах:

  1. Создайте образ контейнера с менеджером.

  2. Создайте новые образы контейнеров СУБД или измените существующие для интеграции в них агента, чтобы выполнять мониторинг и управление СУБД через PPEM.

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

  3. Настройте сетевое взаимодействие контейнеров, чтобы менеджер имел доступ к агентам и наоборот:

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

      Например, с Docker можно использовать сетевые драйверы overlay или macvlan.

    2. Скорректируйте политики сетевого трафика при их наличии, чтобы разрешить трафик PPEM.

      За подробной информацией о требованиях к сетевому взаимодействию с PPEM обратитесь к разделу Безопасность.

  4. Получите API-ключ для настройки агентов:

    1. Запустите контейнер со службой менеджера.

    2. Войдите в веб-приложение PPEM.

    3. Скопируйте API-ключ из выведенной на экран инструкции по установке агента и сохраните его.

  5. Создайте файл конфигурации агента ppem-agent.yml:

    1. Укажите параметры для подключения агента к контейнерной СУБД.

    2. Укажите ранее полученный API-ключ и URL для подключения агента к менеджеру.

  6. Запустите контейнеры СУБД, передав в них ранее созданный файл конфигурации агента.

4.3.2. Пример процесса установки #

Пример организован следующим образом:

  • Используются инструменты Docker Engine и Docker Compose.

  • Для обеспечения сетевого взаимодействия контейнеров используется сетевой драйвер macvlan, если отсутствуют ограничения трафика.

  • Образы контейнеров основаны на Debian 12.

  • Образы контейнеров создаются, используя стандартные имена объектов, например, ppem для базы данных репозитория.

  • PostgreSQL используется в качестве примера контейнерной СУБД. База данных репозитория для менеджера размещается в отдельном контейнере и также использует PostgreSQL.

  • В ходе интеграции агента в образ контейнера СУБД используется менеджер служб systemd.

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

Инструкция ниже позволяет протестировать процесс установки и получить минимальную рабочую версию PPEM, подходящую для управления контейнерной СУБД в демонстрационных целях.

Примечание

Инструкцию можно адаптировать под разные среды. Скорректируйте команды и имена объектов в соответствии с вашей операционной системой и другими требованиями.

Чтобы установить PPEM, выполните следующие действия:

  1. Разверните и запустите менеджер:

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

      mkdir ppem
    2. Создайте файл 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
      
    3. Создайте файл 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:
      
    4. Создайте образ и запустите контейнеры, необходимые для работы службы менеджера:

      docker compose up -f ppem/ -d --build
  2. Получите API-ключ для настройки агентов:

    1. Войдите в веб-приложение PPEM.

    2. Скопируйте API-ключ из выведенной на экран инструкции по установке агента и сохраните его.

  3. Разверните и запустите контейнерную СУБД:

    1. Создайте отдельный каталог для файлов, необходимых для установки СУБД, например:

      mkdir dbms
    2. Создайте файл 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" ]
      
    3. Файл Dockerfile по умолчанию использует исполняемый файл systemd.

      Создайте файл службы systemd dbms/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
    4. Для управления СУБД файл службы использует скрипт 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
    5. Создайте файл 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 
      
    6. Создайте файл конфигурации агента 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
  4. Создайте образ и запустите контейнер СУБД с интегрированным агентом:

    docker compose up -f dbms/ -d --build

Установка PPEM будет завершена. Обновите страницу браузера с веб-приложением и начинайте работу.