Резервное копирование PostgreSQL
Перед обновлением TRON.ASOC создайте резервную копию БД PostgreSQL, чтобы при неудачном обновлении вернуться к прежнему состоянию без потери данных.
Резервное копирование БД PostgreSQL включает следующие этапы:
Рекомендуется использовать штатные процедуры резервного копирования БД PostgreSQL, если они предусмотрены в вашей инфраструктуре.
В иных случаях используйте стандартные инструменты резервного копирования, адаптированные под систему TRON.ASOC. Для этого в систему добавлен отдельный сервис, который создает резервную копию БД PostgreSQL и выгружает архив в S3-хранилище. Этот сервис подключается как отдельный компонент в Docker Compose с использованием профиля (profile) и не активируется по умолчанию.
Резервное копирование
Чтобы сделать резервную копию БД PostgreSQL, выполните следующие шаги:
-
Добавьте сервис
postgres-backupв файлdocker-compose.yml:postgres-backup:profiles:- backupimage: harbor.tronsec.ru/asoc/external/minback:v1.4environment:- 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%Scommand: ${ASOC_PG_DBNAME:-dbasoc} -h psql -p ${ASOC_PG_PORT:-5432} -U ${ASOC_PG_USER:-asocusr}depends_on:psql:condition: service_healthyminio:condition: service_startedrestart: "no"warningЗначения переменных взяты из
docker-compose.ymlдля версии TRON.ASOC 1.4.2. Если вы используете другие значения, то приведите их в соответствие со значениями для других сервисов. -
Создайте бакет
postgres-backupsв S3:- перейдите в веб-интерфейс MinIO:
http://$ASOC_DOMAIN:9001; - нажмите кнопку Create Bucket.
- перейдите в веб-интерфейс MinIO:
-
Запустите резервное копирование сервиса командой:
sudo docker compose --profile backup up --no-deps postgres-backup
Восстановление
Чтобы восстановить БД PostgreSQL, выполните следующие шаги:
-
Остановите контейнеры
core,reporterиfrontкомандой:sudo docker compose stop core reporter front -
Переместите архив в контейнер с БД:
sudo docker cp dbasoc-20260403-194144.archive [ID_контейнера_PostgreSQL]:/tmp/restore.archivenoteЧтобы узнать значение ID контейнера PostgreSQL, выполните команду:
sudo docker ps -qf "name=psql" -
Запустите восстановление БД в контейнере:
-
подключитесь к контейнеру командой:
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;
-
-
Запустите сервисы
coreиreporter:sudo docker compose restart core reporter front -
Посмотрите логи сервиса:
sudo docker ps -qf "name=core"sudo docker logs <id контейнера core>noteПример успешного лога:
2026-04-03T20:12:28.982+0000 [INFO][core][http][server][listen][url::8080] start listening -
Авторизуйтесь в веб-интерфейсе и убедитесь в наличии данных.