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

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

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

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

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

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


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

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

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

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

Шаг 2: Получение обновлений

# Переход в директорию проекта
cd /path/to/genai-microservices

# Получение последних изменений
git fetch origin
git pull origin main
# Распаковка нового архива
tar -xzf genai-release-X.Y.Z.tar.gz

# Замена файлов (сохраняя .env)
cp -r genai-release-X.Y.Z/* /path/to/genai-microservices/
# Или rsync (безопаснее)
rsync -av --exclude='.env' genai-release-X.Y.Z/ /path/to/genai-microservices/
cd compose

# Загрузка обновлённых образов
docker compose pull

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

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

# Сравнение текущего .env с шаблоном
diff compose/.env compose/.env.example

Шаг 4: Пересборка образов

cd compose

# Пересборка всех образов с параметром build
docker compose build

Или пересборка отдельных сервисов (если обновлён только один):

# Пример: обновление только Jailbreak Service
docker compose build jailbreak-migrations

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

# Остановка текущих контейнеров
docker compose down

# Запуск с обновлёнными образами
./scripts/start.sh

Либо без полной остановки:

# Docker Compose автоматически пересоздаст контейнеры с обновлёнными образами
docker compose up -d

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

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

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

# Проверка статуса контейнеров
docker ps --format "table {{.Names}}\t{{.Status}}"

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

# Комплексная проверка здоровья
./scripts/health-check.sh

# Проверка версий сервисов
curl -s http://localhost:8001/healthz | jq .
curl -s http://localhost:8004/healthz | jq .

Обновление отдельного сервиса

Для обновления только одного сервиса без остановки остальных:

cd compose

# 1. Пересборка образа
docker compose build <service>-migrations

# 2. Перезапуск миграций (если есть новые)
docker compose run --rm <service>-migrations

# 3. Перезапуск сервиса
docker compose up -d <service>

Пример для Scan Orchestrator:

docker compose build scan-orchestrator-migrations
docker compose run --rm scan-orchestrator-migrations
docker compose up -d scan-orchestrator

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

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

Откат кода

git log --oneline -10   # Найти предыдущий коммит
git checkout <предыдущий-коммит>
# Восстановление из предыдущего архива
rsync -av --exclude='.env' genai-release-PREV/ /path/to/genai-microservices/

Откат базы данных

# 1. Остановка сервисов
cd compose && docker compose down

# 2. Восстановление БД из бэкапа
docker compose up -d postgres
sleep 10
docker exec -i postgres psql -U postgres < backup_before_update_YYYYMMDD_HHMMSS.sql

# 3. Пересборка и запуск предыдущей версии
docker compose build
./scripts/start.sh

Откат миграций

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

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

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

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

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

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

# Версии Docker-образов
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.CreatedAt}}" | grep genai

# Версия API каждого сервиса
for port in 8001 8002 8003 8004 8005 8025 8008; 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 v2.1.0 | User: admin | Status: OK" >> /var/log/genai-updates.log