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

Обновление TRON.ASOC

Рекомендуется выполнять обновление TRON.ASOC после выхода новой версии.

Перед обновлением обязательно сделайте резервные копии компонентов для возможности отката без потери данных в случае неудачного обновления.

Обновление TRON.ASOC состоит из следующих этапов:

  1. Резервное копирование базы данных PostgreSQL с использованием Docker и MinIO
  2. Резервное копирование базы данных ClickHouse (S3 Storage)
  3. Установка новой версии TRON.ASOC
предупреждение

Обратите внимание, что синхронизация баз данных PostgreSQL и ClickHouse с точностью до секунды не обязательна и допускается расхождение. При этом основным источником данных выступает БД PostgreSQL, она должна поддерживаться в максимально актуальном состоянии. База ClickHouse, в свою очередь, резервируется с интервалом около 20 минут, и ее незначительное отставание от PostgreSQL не влияет на работу системы.

Резервное копирование базы данных PostgreSQL с использованием Docker и MinIO

Рекомендуется использовать штатные процедуры резервного копирования БД 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. Если вы используете другие значения, то приведите их в соответствие со значениями для других сервисов.

  1. Создайте бакет postgres-backups в S3. Для этого:

    • перейдите в веб-интерфейс MinIO: http://$ASOC_DOMAIN:9001;
    • нажмите кнопку Create Bucket.
  2. Запустите резервное копирование сервиса командой: 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".

  1. Запустите восстановление БД в контейнере. Для этого:
    • подключитесь к контейнеру командой: 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;.
  2. Запустите сервисы core и reporter: sudo docker compose restart core reporter front.
  3. Посмотрите логи сервиса:
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
  1. Авторизуйтесь в веб-интерфейсе и убедитесь в наличии данных.

Резервное копирование базы данных ClickHouse (S3 Storage)

осторожно

Перед началом работ остановите контейнеры core, reporter и front, взаимодействующие с контейнером ClickHouse.

Остановка контейнера ClickHouse не требуется, так как если остановить контейнер ClickHouse, резервное копирование может быть неуспешным.

Миграция и резервное копирование БД ClickHouse включает следующие этапы:

  1. Подключение к терминалу контейнера и запуск клиента ClickHouse
  2. Создание резервной копии в S3
  3. Подключение к терминалу контейнера для восстановления
  4. Запуск восстановления БД

Подключение к терминалу контейнера и запуск клиента ClickHouse

Чтобы подключиться к терминалу контейнера и запустить клиента ClickHouse, выполните следующие шаги:

  1. Выполните команду для подключения к терминалу в зависимости от места развертывания ClickHouse:
    • если БД развернута в Kubernetes, выполните команду: kubectl exec -it asoc-clickhouse-<номер_пода> -n namespace -- /bin/bash;
    • если БД развернута в Docker Compose, выполните команду: docker exec -it tron-clickhouse-<номер_контейнера> /bin/bash.
  2. Запустите клиента ClickHouse командой: clickhouse-client --database=asoc_db --user=<пользователь> --port=9000 --host=localhost

Создание резервной копии в S3

предупреждение

Эта инструкция рассчитана на использование встроенного S3-хранилища, которое разворачивается в вашей инфраструктуре при установке TRON.ASOC. Если вместо этого используется внешнее хранилище (External S3), замените логин и токен в команде из шага 2 на соответствующие учетные данные из ващего внешнего S3.

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

  1. Запустите клиента ClickHouse командой: clickhouse-client --database=asoc_db --user=<пользователь> --port=9000 --host=localhost
  2. Введите следующий SQL-запрос:
BACKUP DATABASE asoc_db TO S3(
'https://URL_Вашего_S3/clickhouse-asoc/asoc_db_test_1.zip',
'ПОЛЬЗОВАТЕЛЬ_S3',
'ТОКЕН_S3'
)
SETTINGS compression_method='zstd', compression_level=3;
информация

Актуальное состояние БД хранится в директории /var/lib/clickhouse.

Подключение к терминалу контейнера для восстановления БД

Чтобы повторно подключиться к терминалу контейнера, выполните шаг 1 из инструкции выше.

Запуск восстановления БД

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

  1. Запустите клиента ClickHouse командой: clickhouse-client --database=asoc_db --user=<пользователь> --port=9000 --host=localhost
  2. Удалите старую БД: DROP DATABASE
  3. Выполните восстановление:
RESTORE DATABASE asoc_db FROM S3(
'https://URL_Вашего_S3/clickhouse-asoc/asoc_db_test_1.zip',
'ПОЛЬЗОВАТЕЛЬ_S3',
'ТОКЕН_S3'

Установка новой версии TRON.ASOC

Для установки новой версии воспользуйтесь инструкцией в разделе Установка с помощью Docker Compose или Установка с помощью Helm Chart.