Установка¶
В состав системы входят следующие компоненты:
- 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), а не сам пароль в открытом виде. - Все пароли и секретные ключи должны быть изменены в продакшене.
Генерация хэша пароля администратора¶
Для генерации хэша пароля администратора выполните следующую команду:
После выполнения команды:
- Введите желаемый пароль.
- Подтвердите пароль повторным вводом.
- Скопируйте полученный хэш.
Важно!
В полученном хэше необходимо экранировать каждый символ $ еще одним символом $ (то есть $ становится $$). Например, если хэш содержит $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$$...
Создание необходимых директорий¶
Выполните скрипт подготовки:
Скрипт создаст следующие директории и установит правильные права владения:
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).
Запуск сервисов¶
Запустите все сервисы:
Для просмотра логов выполните команду:
Для просмотра логов конкретного сервиса выполните команду:
Логи Nginx доступны в директории logs/nginx/logs/.
Проверка работоспособности¶
После запуска проверьте статус контейнеров:
Все сервисы должны быть в состоянии Up. Приложение будет доступно по адресу:
- HTTP:
http://localhost - API:
http://localhost/api - Health check:
http://localhost/api/actuator/health
Настройка Nginx¶
Изменение server_name¶
По умолчанию Nginx настроен на server_name localhost.
Для использования с другим доменным именем:
- Откройте файл
nginx/default.conf - Измените значение
server_nameв строке 3: Или для нескольких доменов: - Перезапустите сервис
frontend:
Примечание
Если вы используете IP-адрес вместо доменного имени, можно оставить server_name localhost или указать IP-адрес.
Настройка SSL (опционально)¶
Для включения HTTPS:
-
Поместите SSL-сертификаты в директорию
ssl/:fullchain.pem- полная цепочка сертификатов.privkey.pem- приватный ключ.
-
Раскомментируйте строки в
docker-compose.yml(строка 65): -
Раскомментируйте строки в
nginx/default.conf(строки 5-16): -
Установите
ENABLE_HTTPS=trueв файле.env: -
Перезапустите сервисы:
Дополнительные настройки¶
В файле docker-compose.yml для сервиса copilot-backend есть закомментированные переменные окружения, которые можно раскомментировать при необходимости:
Настройки загрузки файлов¶
Для изменения максимального размера загружаемых файлов раскомментируйте следующие строки в docker-compose.yml:
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 перезапустите сервис:
Порты¶
По умолчанию используются следующие порты:
- 80 - HTTP (Nginx).
- 443 - HTTPS (Nginx, если настроен SSL).
- 5432 - PostgreSQL (внешний доступ).
Для изменения портов отредактируйте секцию ports в docker-compose.yml.
Сеть¶
Все сервисы находятся в одной Docker-сети net-copilot и могут обращаться друг к другу по именам контейнеров.