Перейти к основному содержимому
Версия: 1.7

Резервное копирование PostgreSQL

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

Резервное копирование БД PostgreSQL включает следующие этапы:

  1. Резервное копирование.
  2. Восстановление.

Рекомендуется использовать штатные процедуры резервного копирования БД PostgreSQL, если они предусмотрены в вашей инфраструктуре.

В иных случаях используйте стандартные инструменты резервного копирования, адаптированные под систему TRON.ASOC. Для этого в систему добавлен отдельный сервис, который создает резервную копию БД PostgreSQL и выгружает архив в S3-хранилище. Этот сервис подключается как отдельный компонент в Docker Compose с использованием профиля (profile) и не активируется по умолчанию.

Резервное копирование​

Чтобы сделать резервную копию БД PostgreSQL, выполните следующие шаги:

  1. Добавьте сервис postgres-backup в файл docker-compose.yml:

    postgres-backup:
    profiles:
    - backup
    image: harbor.tronsec.ru/asoc/external/minback:v1.4
    environment:
    - PGHOST=psql
    - PGPORT=${ASOC_PG_PORT:-5432}
    - PGUSER=${ASOC_PG_USER:-asocusr}
    - PGPASSWORD=${ASOC_PG_PASSWORD:-asocpwd}
    - PGDATABASE=${ASOC_PG_DBNAME:-dbasoc}
    - MINIO_SERVER=http://minio:9000
    - MINIO_ACCESS_KEY=${ASOC_MINIO_ROOT_USER:-minioroot}
    - MINIO_SECRET_KEY=${ASOC_MINIO_ROOT_PASSWORD:-miniorootpassword}
    - MINIO_BUCKET=postgres-backups
    - DATE_FORMAT=+%Y%m%d-%H%M%S
    command: ${ASOC_PG_DBNAME:-dbasoc} -h psql -p ${ASOC_PG_PORT:-5432} -U ${ASOC_PG_USER:-asocusr}
    depends_on:
    psql:
    condition: service_healthy
    minio:
    condition: service_started
    restart: "no"
    Внимание

    Значения переменных взяты из docker-compose.yml для версии TRON.ASOC 1.4.2. Если вы используете другие значения, то приведите их в соответствие со значениями для других сервисов.

  2. Создайте бакет postgres-backups в S3:

    • перейдите в веб-интерфейс MinIO: http://$ASOC_DOMAIN:9001;
    • нажмите кнопку Create Bucket.
  3. Запустите резервное копирование сервиса командой:

    sudo docker compose --profile backup up --no-deps postgres-backup

Восстановление​

Чтобы восстановить БД PostgreSQL, выполните следующие шаги:

  1. Остановите контейнеры core, reporter и front командой:

    sudo docker compose stop core reporter front
  2. Переместите архив в контейнер с БД:

    sudo docker cp dbasoc-20260403-194144.archive [ID_контейнера_PostgreSQL]:/tmp/restore.archive
    К сведению

    Чтобы узнать значение ID контейнера PostgreSQL, выполните команду:

    sudo docker ps -qf "name=psql"
  3. Запустите восстановление БД в контейнере:

    • подключитесь к контейнеру командой:

      sudo docker exec -ti 15cd460e9c6c /bin/bash
    • убедитесь, что архив с резервной копией присутствует в директории /tmp:

      ls -lh /tmp
    • удалите старую БД:

      psql -U postgres -c "DROP DATABASE IF EXISTS dbasoc;"
    • создайте новую БД с владельцем asocusr:

      psql -U postgres -c "CREATE DATABASE dbasoc OWNER asocusr;"
    • восстановите архив от пользователя asocusr:

      pg_restore -U asocusr -d dbasoc -v /tmp/restore.archive
    • подключитесь к БД и проверьте наличие данных:

      psql -U asocusr -d dbasoc -> select * from users;
  4. Запустите сервисы core и reporter:

    sudo docker compose restart core reporter front
  5. Посмотрите логи сервиса:

    sudo docker ps -qf "name=core"
    sudo docker logs <id контейнера core>
    К сведению

    Пример успешного лога:

    2026-04-03T20:12:28.982+0000 [INFO][core][http][server][listen][url::8080] start listening
  6. Авторизуйтесь в веб-интерфейсе и убедитесь в наличии данных.