Перейти к содержанию

Обновление системы

Общие принципы

Обновление AppSec.GenAI в compose-сценарии выполняется путём подмены тегов образов в docker-compose.yml на новую версию, загрузки новых образов из приватного реестра registry.appsec.global и перезапуска контейнеров. Миграции базы данных выполняются автоматически при запуске.

Обязательно сделайте бэкап

Перед любым обновлением обязательно создайте резервную копию базы данных и конфигурации. Процедура бэкапа описана в разделе Управление сервисами.


Процедура обновления

Шаг 1: Создание резервной копии

cd $DEPLOY_DIR

# Бэкап базы данных
docker exec postgres pg_dumpall -U postgres > backup_before_update_$(date +%Y%m%d_%H%M%S).sql

# Бэкап конфигурации
cp .env .env.backup
cp docker-compose.yml docker-compose.yml.backup

Шаг 2: Получение новой поставки

Вендор предоставляет обновлённую поставку одним из двух способов:

Новая версия поставляется в виде архива с обновлённым docker-compose.yml и (при необходимости) изменённым шаблоном env. После распаковки:

  • Замените docker-compose.yml в $DEPLOY_DIR на новый.
  • Сравните новый шаблон env с текущим .env и при необходимости добавьте новые переменные (см. шаг 3).
# Пример замены docker-compose.yml
cp /path/to/new-release/docker-compose.yml $DEPLOY_DIR/docker-compose.yml

Если ничего, кроме версий образов, не изменилось, можно вручную обновить теги в существующем docker-compose.yml. Например, при переходе с 2026.5.0 на 2026.5.1:

sed -i 's|appsecgenai-release/\([a-z-]*\):2026\.5\.0|appsecgenai-release/\1:2026.5.1|g' \
    $DEPLOY_DIR/docker-compose.yml

Warning

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

Шаг 3: Проверка изменений .env

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

# Сравнение текущего .env с новым шаблоном env (если поставка обновлённая)
diff .env /path/to/new-release/env

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

Шаг 4: Загрузка новых образов

Перед запуском подтяните образы с новой версией:

cd $DEPLOY_DIR
docker compose pull

Команда скачает только те образы, теги которых отличаются от уже загруженных локально.

Аутентификация в реестре

Если со времени первой установки прошло много времени, может потребоваться повторно выполнить docker login registry.appsec.global — см. Установка и запуск.

Шаг 5: Перезапуск платформы

docker compose up -d

Docker Compose автоматически:

  1. Остановит контейнеры со старыми тегами образов.
  2. Создаст новые контейнеры с обновлёнными образами.
  3. Прогонит миграции БД через *-migrations контейнеры.
  4. Запустит сервисы в правильном порядке.

Автоматические миграции

При запуске контейнеры миграций автоматически выполнят alembic upgrade head. Если в обновлении есть новые миграции базы данных, они будут применены автоматически.

Шаг 6: Проверка

# Статус контейнеров (все должны быть Up или Exited (0) для one-shot)
docker compose ps

# Контейнеры миграций — должны быть Exited (0)
docker ps -a --filter "name=migrations" --format "table {{.Names}}\t{{.Status}}"

# Проверка версий сервисов
for port in 8001 8002 8003 8004 8005 8008 8009 8025; do
    echo -n "Port $port: "
    curl -s "http://localhost:$port/healthz" 2>/dev/null | jq -r '.version // "N/A"' 2>/dev/null \
        || echo "unavailable"
done

Откат обновления

В случае проблем после обновления:

Шаг 1: Возврат к предыдущим тегам

Восстановите предыдущий docker-compose.yml из бэкапа:

cd $DEPLOY_DIR
cp docker-compose.yml.backup docker-compose.yml

Шаг 2: Откат базы данных

Если новая версия применила несовместимые миграции, восстановите БД из бэкапа:

cd $DEPLOY_DIR

# Остановка сервисов
docker compose down

# Запуск только PostgreSQL
docker compose up -d postgres
sleep 10

# Восстановление БД
docker exec -i postgres psql -U postgres < backup_before_update_YYYYMMDD_HHMMSS.sql

# Запуск платформы с предыдущей версией
docker compose up -d

Шаг 3: Откат миграций отдельного сервиса (расширенный сценарий)

Если необходимо откатить только миграцию конкретного сервиса без полного восстановления БД:

# Откат последней миграции Model Management
docker exec model-management alembic downgrade -1

# Откат на конкретную ревизию
docker exec model-management alembic downgrade <revision_id>

# Проверка текущей ревизии
docker exec model-management alembic current

Совместимость кода и схемы

Откат миграций без отката версии образа может привести к несовместимости кода и схемы БД. Используйте этот способ только по рекомендации технической поддержки.


Версионирование

Проверка текущих версий

# Версии локально загруженных образов AppSec.GenAI
docker images --format "table {{.Repository}}\t{{.Tag}}" \
    | grep appsecgenai-release | sort -u

# Версия API каждого сервиса
for port in 8001 8002 8003 8004 8005 8008 8009 8025; do
    echo -n "Port $port: "
    curl -s "http://localhost:$port/healthz" 2>/dev/null | jq -r '.version // "N/A"' 2>/dev/null \
        || echo "unavailable"
done

Журнал обновлений

Рекомендуется вести журнал обновлений для аудита:

echo "$(date '+%Y-%m-%d %H:%M:%S') | Update to 2026.5.1 | User: admin | Status: OK" \
    >> /var/log/genai-updates.log