Управление сервисами¶
Скрипты управления¶
Все скрипты расположены в директории compose/scripts/ и должны запускаться из директории compose/.
start.sh — полный запуск¶
Запускает все контейнеры и ожидает готовности инфраструктурных сервисов.
Что выполняет:
- Проверяет наличие файла
.env(копирует из.env.exampleпри отсутствии). - Запускает
docker compose up -d. - Последовательно проверяет готовность: PostgreSQL, NATS, Redis, MinIO, Keycloak.
- Выводит таблицу URL всех сервисов.
stop.sh — остановка¶
Останавливает все контейнеры с сохранением данных (Docker volumes не удаляются).
Эквивалентная команда:
Сохранение данных
Команда docker compose down останавливает и удаляет контейнеры, но сохраняет Docker volumes. Все данные PostgreSQL, Redis, MinIO и NATS останутся на месте. При следующем docker compose up -d сервисы продолжат работу с теми же данными.
logs.sh — просмотр логов¶
Просмотр логов конкретного сервиса в реальном времени:
# Логи конкретного сервиса
./scripts/logs.sh scan-orchestrator
# Все логи (требует указания 'all')
./scripts/logs.sh all
Альтернатива через Docker Compose:
# Последние 100 строк + follow
docker compose logs -f --tail 100 scan-orchestrator
# Логи нескольких сервисов
docker compose logs -f model-management scan-profile results
# Логи с временными метками
docker compose logs -f --timestamps jailbreak-api
health-check.sh — проверка состояния¶
Проверяет доступность всех инфраструктурных и прикладных сервисов:
Скрипт выполняет healthcheck для каждого сервиса и выводит результат:
✅ OK— сервис доступен и работает.❌ FAILED— сервис недоступен.
По завершении выводится общий статус и количество неуспешных проверок.
reset.sh — полный сброс¶
Удаление ВСЕХ данных
Этот скрипт удаляет все данные платформы, включая базу данных, бакеты MinIO, потоки NATS и кеш Redis. Используйте только для полного пересоздания среды.
Что выполняет:
- Запрашивает подтверждение (
yes). - Выполняет
docker compose down -v(удаляет контейнеры и volumes). - Удаляет локальные директории данных.
Для восстановления после сброса:
Пересборка Docker-образов¶
Принцип пересборки¶
В docker-compose.yml параметр build указан только у контейнеров миграций. Все остальные контейнеры того же сервиса используют образ, собранный миграционным контейнером. Поэтому для пересборки любого сервиса необходимо пересобрать его миграционный контейнер.
graph LR
BUILD["docker compose build<br/><service>-migrations"]
IMG["genai-<service>:latest"]
C1["<service>-migrations"]
C2["<service>-seed"]
C3["<service> (API)"]
C4["<service>-preparator"]
C5["<service>-attacker"]
BUILD --> IMG
IMG --> C1 & C2 & C3 & C4 & C5
Пошаговая процедура¶
Полная пересборка всех образов¶
cd compose
# Пересборка всех образов (только сервисы с параметром build)
docker compose build
# Перезапуск всех контейнеров с новыми образами
docker compose up -d
Время сборки
Полная пересборка всех образов может занимать 15--30 минут в зависимости от скорости сети (скачивание зависимостей) и производительности сервера.
Повседневные операции¶
Перезапуск отдельного сервиса¶
# Перезапуск без пересборки
docker compose restart model-management
# Остановка и запуск (с пересозданием контейнера)
docker compose up -d --force-recreate model-management
Масштабирование воркеров¶
Для увеличения производительности можно масштабировать воркеры:
Ограничения
Масштабирование работает только для контейнеров без фиксированного IP-адреса и без привязки к конкретному порту хоста. Воркеры (preparator, attacker, judge, reporter) можно масштабировать, а API-контейнеры — нет.
Просмотр использования ресурсов¶
# Текущее потребление CPU/RAM всеми контейнерами
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"
Очистка неиспользуемых образов¶
# Удаление неиспользуемых образов (dangling)
docker image prune -f
# Удаление всех неиспользуемых образов
docker image prune -a -f
# Полная очистка (образы, кеш сборки, остановленные контейнеры)
docker system prune -f
Просмотр размера volumes¶
Бэкап и восстановление¶
Полный бэкап¶
#!/bin/bash
# backup.sh — полный бэкап AppSec.GenAI
BACKUP_DIR="/backup/genai/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
# 1. Бэкап PostgreSQL
docker exec postgres pg_dumpall -U postgres > "$BACKUP_DIR/postgres_full.sql"
echo "PostgreSQL backup: OK"
# 2. Бэкап Redis
docker exec redis redis-cli BGSAVE
sleep 5
docker cp redis:/data/dump.rdb "$BACKUP_DIR/redis_dump.rdb"
echo "Redis backup: OK"
# 3. Бэкап MinIO (данные)
docker cp minio:/data "$BACKUP_DIR/minio_data"
echo "MinIO backup: OK"
# 4. Бэкап конфигурации
cp compose/.env "$BACKUP_DIR/env_backup"
echo "Config backup: OK"
echo "Backup completed: $BACKUP_DIR"
Восстановление из бэкапа¶
#!/bin/bash
# restore.sh — восстановление из бэкапа
BACKUP_DIR=$1
if [ -z "$BACKUP_DIR" ]; then
echo "Usage: restore.sh /path/to/backup"
exit 1
fi
# 1. Остановка сервисов (сохранение volumes)
cd compose && docker compose down
# 2. Восстановление PostgreSQL
docker compose up -d postgres
sleep 10
docker exec -i postgres psql -U postgres < "$BACKUP_DIR/postgres_full.sql"
# 3. Восстановление Redis
docker cp "$BACKUP_DIR/redis_dump.rdb" redis:/data/dump.rdb
docker compose restart redis
# 4. Запуск всех сервисов
docker compose up -d