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

Установка

В состав системы входят следующие компоненты:

  • copilot-backend - Backend API сервис.
  • copilot-frontend - Frontend веб-приложение (Nginx).
  • copilot-extra-stats - Сервис дополнительной статистики.
  • copilot-vul-detect-rl - Сервис обнаружения уязвимостей (RL модель).
  • copilot-vul-explainer - Сервис объяснения уязвимостей (LLM).
  • postgresql - База данных PostgreSQL 17.4.
  • rabbitmq - Очередь сообщений RabbitMQ 4.1.1.

Быстрый старт

Подготовка окружения

Отредактируйте файл .env в корне проекта.

Пример файла .env:

# Docker образы для всех сервисов платформы
BACKEND_IMAGE=registry.appsec.global/copilot/copilot-backend:1.0.0
EXTRA_STATS_IMAGE=registry.appsec.global/copilot/copilot-extra-stats:1.0.0
FRONTEND_IMAGE=registry.appsec.global/copilot/copilot-frontend:1.0.0
VUL_EXPLAINER_IMAGE=registry.appsec.global/copilot/copilot-vul-explainer:1.0.0
VUL_DETECT_RL_IMAGE=registry.appsec.global/copilot/copilot-vul-detect-rl:1.0.0

# PostgreSQL: хост, порт и учетные данные администратора (используются для создания БД и миграций)
PGSQL_HOST=postgresql
PGSQL_PORT=5432
PGSQL_ADMIN_USER=postgres
PGSQL_ADMIN_PASSWORD=postgres

# База данных для backend: имя БД и пользователь приложения (создается автоматически)
BACKEND_DB_NAME=copilot_backend
BACKEND_DB_USER=sfs_copilot_backend_user
BACKEND_DB_PASSWORD=sfs_copilot_backend_user_password

# RabbitMQ: хост, порт и учетные данные пользователя
RABBITMQ_HOST=rabbitmq
RABBITMQ_PORT=5672
RABBITMQ_USER=rbbtusr
RABBITMQ_PASS=rbtpsswrd

# Учетные данные администратора приложения
# ВАЖНО: BACKEND_ADMIN_PASSWORD должен содержать хэш пароля (Argon2), а не сам пароль!
BACKEND_ADMIN_USERNAME=admin
BACKEND_ADMIN_PASSWORD="{argon2@SpringSecurity_v5_8}$$argon2id$$v=19$$m=16384,t=2,p=1$$SNMhbDcOwBvWM4bH38RsLg$$UbN0oSiNjryoXkPfgAo1tlZE/VjGqoaqZtkCziElz0w" # admin

# Explainer Service: хост LLM сервиса (например, Ollama), порт и модель
EXPLAINER_HOST=https://ollama.example.com
EXPLAINER_PORT=
EXPLAINER_MODEL=qwen3-coder:30b

# Контекстные пути и URL сервисов
CHECK_CONTEXT_PATH=/api
EXTRA_STATS_CONTEXT_PATH=/extra-stats
VUL_DETECT_RL_URL=http://copilot-vul-detect-rl:8000/predict-issues
VUL_EXPLAINER_URL=http://copilot-vul-explainer:8000/explain-issues

# Включение HTTPS (true для HTTPS, false для HTTP)
# При использовании HTTP установите false для корректной работы CSRF токенов
ENABLE_HTTPS=false

Важно!

  • Для BACKEND_ADMIN_PASSWORD необходимо указать хэш пароля (Argon2), а не сам пароль в открытом виде.
  • Все пароли и секретные ключи должны быть изменены в продакшене.

Генерация хэша пароля администратора

Для генерации хэша пароля администратора выполните следующую команду:

docker run -it --rm registry.appsec.global/copilot/copilot-backend:1.0.0 --hash-password

После выполнения команды:

  1. Введите желаемый пароль.
  2. Подтвердите пароль повторным вводом.
  3. Скопируйте полученный хэш.

Важно!

В полученном хэше необходимо экранировать каждый символ $ еще одним символом $ (то есть $ становится $$). Например, если хэш содержит $argon2id$, в .env файле это должно быть записано как $$argon2id$$.

Пример:

  • Полученный хэш: {argon2@SpringSecurity_v5_8}$argon2id$v=19$m=16384,t=2,p=1$...
  • В .env файле: {argon2@SpringSecurity_v5_8}$$argon2id$$v=19$$m=16384,t=2,p=1$$...

Создание необходимых директорий

Выполните скрипт подготовки:

chmod +x install.sh
./install.sh

Скрипт создаст следующие директории и установит правильные права владения:

  • nginx/ - конфигурация Nginx (владелец: 101:101).
  • report-files/ - для хранения отчетов (владелец: 1000:1000).
  • rabbitmq-data/ - данные RabbitMQ (владелец: 100:100).
  • postgresql-data/ - данные PostgreSQL (владелец: 70:70).
  • logs/nginx/logs/ - логи Nginx (владелец: 101:101).
  • ssl/ - для SSL сертификатов (опционально, владелец: 101:101).

Запуск сервисов

Запустите все сервисы:

docker compose up -d

Для просмотра логов выполните команду:

docker compose logs -f

Для просмотра логов конкретного сервиса выполните команду:

docker compose logs -f copilot-backend

Логи Nginx доступны в директории logs/nginx/logs/.

Проверка работоспособности

После запуска проверьте статус контейнеров:

docker compose ps

Все сервисы должны быть в состоянии Up. Приложение будет доступно по адресу:

  • HTTP: http://localhost
  • API: http://localhost/api
  • Health check: http://localhost/api/actuator/health

Настройка Nginx

Изменение server_name

По умолчанию Nginx настроен на server_name localhost.

Для использования с другим доменным именем:

  1. Откройте файл nginx/default.conf
  2. Измените значение server_name в строке 3:
    server_name your-domain.com;
    
    Или для нескольких доменов:
    server_name your-domain.com www.your-domain.com;
    
  3. Перезапустите сервис frontend:
    docker compose restart copilot-frontend
    

Примечание

Если вы используете IP-адрес вместо доменного имени, можно оставить server_name localhost или указать IP-адрес.

Настройка SSL (опционально)

Для включения HTTPS:

  1. Поместите SSL-сертификаты в директорию ssl/:

    • fullchain.pem - полная цепочка сертификатов.
    • privkey.pem - приватный ключ.
  2. Раскомментируйте строки в docker-compose.yml (строка 65):

    - ./ssl/:/etc/ssl/certs/ssl-cert:ro
    

  3. Раскомментируйте строки в nginx/default.conf (строки 5-16):

    listen 443 ssl;
    ssl_certificate /etc/ssl/certs/ssl-cert/fullchain.pem;
    ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers off;
    
    if ($scheme != "https") { 
        return 301 https://$host$request_uri;
    }
    

  4. Установите ENABLE_HTTPS=true в файле .env:

    ENABLE_HTTPS=true
    

  5. Перезапустите сервисы:

    docker compose restart copilot-frontend copilot-backend
    

Дополнительные настройки

В файле docker-compose.yml для сервиса copilot-backend есть закомментированные переменные окружения, которые можно раскомментировать при необходимости:

Настройки загрузки файлов

Для изменения максимального размера загружаемых файлов раскомментируйте следующие строки в docker-compose.yml:

# - SPRING_SERVLET_MULTIPART_MAXFILESIZE=100MB
# - SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE=100MB
  • SPRING_SERVLET_MULTIPART_MAXFILESIZE - максимальный размер одного файла (по умолчанию: 100MB).
  • SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE - максимальный размер всего запроса с несколькими файлами (по умолчанию: 100MB).

Примечание

Закомментированные значения в docker-compose.yml соответствуют значениям по умолчанию.

Примечание

Также убедитесь, что в nginx/default.conf установлено соответствующее значение client_max_body_size (по умолчанию: 10240m).

Настройки батч-обработки ML-сервисов

Для настройки размера батчей при обработке запросов к ML-сервисам можно раскомментировать:

# - APPSECSOLUTIONS_COPILOT_PREDICTION_BATCHSIZE=80
# - APPSECSOLUTIONS_COPILOT_EXPLANATION_BATCHSIZE=2
  • APPSECSOLUTIONS_COPILOT_PREDICTION_BATCHSIZE - размер батча для сервиса обнаружения уязвимостей (RL-модель) (по умолчанию: 80).
  • APPSECSOLUTIONS_COPILOT_EXPLANATION_BATCHSIZE - размер батча для сервиса объяснения уязвимостей (LLM) (по умолчанию: 2).

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

Примечание

Закомментированные значения в docker-compose.yml соответствуют значениям по умолчанию.

После изменения docker-compose.yml перезапустите сервис:

docker compose restart copilot-backend

Порты

По умолчанию используются следующие порты:

  • 80 - HTTP (Nginx).
  • 443 - HTTPS (Nginx, если настроен SSL).
  • 5432 - PostgreSQL (внешний доступ).

Для изменения портов отредактируйте секцию ports в docker-compose.yml.

Сеть

Все сервисы находятся в одной Docker-сети net-copilot и могут обращаться друг к другу по именам контейнеров.