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

Установка оффлайн-версии

CodeScoring поддерживает работу в закрытом контуре. Для доступа к базе данных о пакетах и уязвимостях в таком режиме используется сервис Index API Offline.

Предварительная установка продукта

Для использования Index API Offline на сервере должна быть предварительно развернута платформа CodeScoring с использованием Docker или Kubernetes.

Ресурсы для установки и обновления

Адрес ресурса с установочными файлами, Docker Registry и файлами оффлайн-БД можно узнать у вендора.

В примерах ниже используются плейсхолдеры:

  • <REGISTRY_URL> — HTTPS-адрес ресурса с файлами дистрибутива;
  • <REGISTRY_HOST> — адрес Docker Registry без протокола.

На ресурсе доступны:

  • Docker Registry с образами CodeScoring и Index API Offline
  • Полная версия оффлайн-БД Index API: <REGISTRY_URL>/db/index-api.db
  • Инкрементальные обновления оффлайн-БД: <REGISTRY_URL>/#browse/browse:codescoring-offline-files:db%2Fv1%2Fupdates

Оффлайн база данных представляет собой шифрованный файл SQLite. Инкрементальные обновления распространяются в виде WAL-файлов.

Скачивание базы данных

  1. Выберите сервер с доступным дисковым пространством не менее 300 ГБ.

  2. Создайте файл curl.config со следующими параметрами доступа:

    user = <REGISTRY_LOGIN>:<REGISTRY_PASSWORD>
    
  3. Запустите скачивание базы данных:

curl --config curl.config \
     -C - \
     --output index-api.db \
     <REGISTRY_URL>/db/index-api.db

Рекомендуется выполнять загрузку в screen или tmux, так как процесс может занимать значительное время.

Установка Index API Offline

  1. Выполните авторизацию в Docker Registry:

    docker login <REGISTRY_HOST>
    
  2. Скачайте архив с установочными файлами и распакуйте его:

    curl -u <REGISTRY_LOGIN>:<REGISTRY_PASSWORD> \
         -C - \
         <REGISTRY_URL>/repository/codescoring-offline-files/index-api/docker-compose/<INDEX_API_OFFLINE_VERSION>.tar.gz \
         -o index-api-offline.tar.gz
    
  3. Переместите скачанный файл базы данных в директорию сервиса, например:

    mv index-api.db index-api-offline/db
    
  4. Перейдите в директорию с конфигурацией:

    cd index-api-offline/
    
  5. Скопируйте шаблон конфигурации .env.template в .env и заполните его:

    Основные параметры:

    • INDEX_API_OFFLINE_VERSION — версия Index API Offline;
    • NGINX_SSL_ENABLED — включение SSL (true | false);
    • NGINX_HOST — имя хоста для nginx;
    • OFFLINE_DB_UPDATE_ENABLED — включение автоматического обновления базы данных;
    • WAL_CHECK_INTERVAL — интервал проверки обновлений;
    • NEXUS_HOST — адрес репозитория обновлений;
    • NEXUS_USERNAME — логин для доступа к Nexus;
    • NEXUS_PASSWORD — пароль для доступа к Nexus;
    • CODESCORING_ACTIVATION_KEY — лицензионный ключ.

    Параметры аутентификации для обновления базы данных и получения метрик через Prometheus (опционально):

    • MAINTENANCE_USERNAME - Basic Auth логин для метода /system/update_database;
    • MAINTENANCE_PASSWORD - Basic Auth пароль для метода /system/update_database;
    • METRICS_USERNAME - Basic Auth логин для метода /metrics;
    • METRICS_PASSWORD - Basic Auth пароль для метода /metrics.
  6. При использовании SSL (NGINX_SSL_ENABLED=true) разместите сертификат и ключ в каталоге ssl.

    Важно

    Формат сертификата – PEM. Файл сертификата должен иметь расширение .crt, а файл ключа сертификата должен иметь расширение .key

  7. Запустите сервис:

    docker compose up -d --remove-orphans
    

После установки и запуска в интерфейсе CodeScoring можно посмотреть версию последнего загруженного в Index API Offline WAL-файла.

Обновление базы данных

Автоматическое обновление оффлайн базы данных

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

Механизм обновления работает следующим образом:

  1. Запущенный сервис Index API Offline с заданной периодичностью опрашивает репозиторий обновлений.
  2. Сервис хранит номер текущей версии базы данных (например, 72).
  3. При обнаружении следующего доступного обновления (например, 73) файл загружается автоматически.
  4. Загруженный WAL-файл применяется к локальной базе данных.

Интервал проверки задаётся параметром WAL_CHECK_INTERVAL.

При отключённом параметре OFFLINE_DB_UPDATE_ENABLED автоматическое обновление не выполняется.

Ручное обновление базы данных

Ручное обновление используется в случаях, когда автоматическая загрузка WAL-файлов отключена (OFFLINE_DB_UPDATE_ENABLED=false) или невозможна по сетевым ограничениям.

Обновление с использованием отдельных файлов обновлений

Если развёрнута первая версия оффлайн базы данных, необходимо последовательно скачать и загрузить все доступные WAL-файлы обновлений, начиная с версии, следующей за текущей версией базы данных.

Файлы обновлений необходимо размещать в директории, указанной в параметре WAL_DIR в конфигурации Index API Offline. Сервис отслеживает появление файлов в этой директории и применяет их к базе данных.

В комплект обновления входят:

  • *.wal — файл с изменениями (основные данные обновления);
  • *.shm — вспомогательный служебный файл, необходимый SQLite для корректного применения WAL.

Обновление с использованием полной версии базы данных

В случае загрузки актуального файла полной оффлайн-БД необходимо выполнить следующие действия:

  1. Остановить сервис Index API Offline.
  2. Переместить текущий файл базы данных в резервную директорию (рекомендуется сохранить копию до завершения обновления).
  3. Разместить новый файл базы данных в директории, указанной в параметре DB_FILE.
  4. Запустить сервис Index API Offline.
  5. Убедиться, что сервис успешно запущен.

После этого, при необходимости, можно продолжить обновление с помощью WAL-файлов, размещая их в директории WAL_DIR в стандартном порядке.

Запуск процесса обновления

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

  1. В файле .env необходимо указать параметры аутентификации:

    MAINTENANCE_USERNAME=
    MAINTENANCE_PASSWORD=
    
  2. Файлы обновлений (*.wal, *.shm) необходимо разместить в директории, указанной в параметре WAL_DIR.

Для запуска процесса обновления выполните запрос:

curl -X GET --location "{{INDEX_API_URL}}/system/update_database" \
     -H "Accept: application/json" \
     -H "Authorization: Basic {{metrics_auth}}"

Где:

  • {{INDEX_API_URL}} — значение из переменной INDEX_API_URL в .env;
  • {{metrics_auth}} — Base64-кодированная строка вида user:password.

Статус обновления отслеживается в логах сервиса Index API Offline.

Возможные сообщения:

  • WAL files download scheduler started with interval: — сервис обновлений запущен;
  • missing mandatory Nexus configuration parameters — допустимое сообщение для ручного режима;
  • The WAL file [%s] was successfully loaded into the main database file — обновление успешно применено;
  • Failed to checkpoint WAL file: — ошибка применения WAL-файла;
  • No WAL files to checkpoint — отсутствуют файлы для применения;
  • Error getting latest database update: — ошибка получения информации об обновлениях.
Страница была полезна?