Установка AppSec.Hub
Требования к инфраструктуре
Установленные для эксплуатации AppSec.Hub технические средства должны быть совместимы между собой и поддерживать сетевой протокол TCP/IP.
Рекомендуемые технические характеристики серверного оборудования:
- Процессор: 4×CPU 2 ГГц.
- Оперативная память: 16 Гб.
- Свободное дисковое пространство: 150 Гб для размещения прикладных систем и баз данных AppSec.Hub.
Поддерживаются следующие операционные системы.
| Операционная система | Архитектура | Платформа |
|---|---|---|
| Linux | 64-bit | Ubuntu Server 18.04.6 x64 и выше |
| Linux | 64-bit | CentOS/RHEL 7 и выше |
Для установки системы необходимо предварительно установить из стандартных репозиториев Docker и Docker-compose.
| Пакет | Версия |
|---|---|
| Docker | 19.03.0 и выше |
| Docker-compose | 1.27.0 и выше |
Настройка антивирусной защиты
На сервере, на котором устанавливается AppSec.Hub, необходимо установить антивирусное программное обеспечение в соответствии с политиками компании в области антивирусной защиты.
Установка Docker и Docker-compose
Предлагаются следующие способы установки Docker и Docker-compose:
Ubuntu/CentOS/RHEL (root Docker)
-
Обновите на сервере пакеты окружения и выполните подготовительные операции.
sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -
Установите последнюю версию Docker.
-
Запустите Docker.
sudo systemctl start docker -
Убедитесь, что Docker успешно запущен.
sudo systemctl status dockerВ командной строке должно отобразиться:
Active: active (running). -
Для запуска Docker после перезагрузки сервера используйте следующую команду.
sudo systemctl enable docker -
Проверьте версию Docker.
sudo docker --version -
Установите Docker-compose версии 2.2.3.
export VERSION="v2.2.3" # выпущена до 2022.02.24 (6 января 2022) export DESTINATION=/usr/local/bin/docker-compose sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION sudo chmod 755 $DESTINATIONИли более свежую.
sudo curl -SL https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose -
Проверьте версию Docker-compose.
sudo /usr/local/bin/docker-compose --version
Ubuntu/CentOS/RHEL (rootless Docker)
-
Обновите на сервере пакеты окружения.
-
Установите последнюю версию Docker.
curl -fsSL https://get.docker.com/ | sudo sh -
Выполните подготовку для установки rootless Docker.
sudo apt install -y uidmap sudo sh -eux <<EOF echo "$USER:100000:65536" >> /etc/subuid echo "$USER:100000:65536" >> /etc/subgid EOF -
Установите rootless Docker.
dockerd-rootless-setuptool.sh install -
Проверьте версию Docker.
docker --version -
Установите Docker-compose.
export VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d') export DESTINATION=/usr/local/bin/docker-compose sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION sudo chmod 755 $DESTINATION -
Проверьте версию Docker-compose.
/usr/local/bin/docker-compose --version
Настройка локального firewall
Если БД устанавливается отдельно от AppSec.Hub, на инстансе с БД откройте порт 5432 (PostgreSQL).
Установка AppSec.Hub с помощью Docker
Выполните следующие шаги:
-
Создайте папки.
sudo mkdir -p /opt/apphub/config/hub-core sudo mkdir -p /opt/apphub/config/hub-ui sudo mkdir -p /opt/apphub/config/postgresql sudo mkdir -p /opt/apphub/config/consul sudo mkdir -p /opt/apphub/logs/hub-air sudo mkdir -p /opt/apphub/logs/hub-core sudo mkdir -p /opt/apphub/logs/hub-ui sudo mkdir -p /opt/apphub/ml/local sudo mkdir -p /opt/apphub/logs/postgresql sudo mkdir -p /opt/apphub/postgresql/data sudo mkdir -p /opt/apphub/ssl sudo mkdir -p /opt/apphub/consul-data sudo mkdir -p /opt/apphub/zapfiles sudo mkdir -p /opt/apphub/db-data/ sudo mkdir -p /opt/apphub/docker/pythonpath_dev -
Создайте конфигурационные файлы.
/opt/apphub/.env /opt/apphub/docker-compose.yml /opt/apphub/config/hub-core/app.properties /opt/apphub/config/hub-core/auth.properties /opt/apphub/config/hub-ui/hub.conf /opt/apphub/config/postgresql/postgresql.conf /opt/apphub/config/consul/server.json /opt/apphub/docker/docker-bootstrap.sh /opt/apphub/docker/docker-init.sh /opt/apphub/docker/.env /opt/apphub/docker/pythonpath_dev/superset_config.pyПримеры конфигурационных файлов приведены в следующих приложениях.
Примечание
При rootless-установке в файле docker-compose.yml необходимо заменить строку
user: "root"на строкуuser: "superset"в секцияхmetricsиmetrics-init. -
Выполните настройку конфигурационного файла /opt/apphub/.env. Укажите следующие параметры:
pgsql_admin_password— пароль пользователя с административным доступом к основной схеме БД;hub_app_password— пароль пользователя БД для работы AppSec.Hub;hub_auth_password— пароль пользователя для сервиса аутентификации AppSec.Hub;hub_adm_password— пароль пользователя с правами администратора на БД AppSec.Hub;-
hub_bi_password— пароль пользователя с правами работы с AppSec.Hub DWH; -
MODEL_SECRET_KEY— ключ шифрования моделей AVC;Примечание
Ключ шифрования моделей AVC необходимо получить у сотрудников компании Swordfish Security.
-
gateway_jwt_token— ключ подписи jwt-токена для сервиса gateway; -
CONSUL_TOKEN— токен для доступа к сервису consul.Примечание
Для генерации токена необходимо выполнить следующие команды и скопировать значение
SecretIDв переменнуюCONSUL_TOKENв .env-файле: -
SSO_ENC_KEY— ключ шифрования SSO; -
HUB_URL— URL AppSec.Hub, например, https://hub.your.domain.local; metrics_pg_password— пароль пользователя с административным доступом БД метрик;metrics_db_password— пароль пользователя БД;metrics_password— пароль пользователя метрик;metrics_scheduler_db_password— пароль пользователя scheduler БД метрик;RABBITMQ_HOST- этот параметр зависит оттого, как установленhub-engine- он может быть установлен либо на одном хосте с AppSec.Hub, либо на разных;RABBITMQ_PASSWORD— пароль пользователя RabbitMQ;CONSUL_HOST- этот параметр зависит оттого, как установленhub-engine- он может быть установлен либо на одном хосте с AppSec.Hub, либо на разных;GRPC_ADDRESS- адресhub-pipeline-agent- этот параметр зависит оттого, как установленhub-engine- он может быть установлен либо на одном хосте с AppSec.Hub, либо на разных;ENC_KEY— ключ шифрования. Значение должно совпадать со значением параметраencrypt.keyв файле /opt/apphub/config/hub-core/app.properties, см. шаг 5.
-
Выполните настройку конфигурационного файла /opt/apphub/config/hub-ui/hub.conf. В «Приложении 13. Конфигурационный файл hub.conf» приведен пример конфигурации для HTTPS-соединения, если планируется использовать HTTP, удалите из файла следующий раздел.
listen 4443 ssl; ssl_certificate /etc/ssl/certs/ssl-cert/fullchain1.pem; ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey1.pem; if ($scheme != "https") { return 301 https://$host$request_uri; }Укажите параметр
server_name— доменное имя сервера/сервиса, на котором будет развернут AppSec.Hub. -
Выполните настройку конфигурационного файла /opt/apphub/config/hub-core/app.properties.
-
db.hub.url— замените значения<pgsql_url>,<pgsql_port>и<hub_db_name>на значения соответствующих переменных из файла .env; -
db.hub.password— замените<hub_app_password>на значение соответствующей переменной из файла .env; -
encrypt.key— замените<HUBAPP-ENC-KEY>на значение ключа шифрования паролей, используемых для доступа к инструментам ИБ. Размер ключа — 24 символа. -
hub.app.url— замените на URL, который будет использоваться для доступа к AppSec.Hub. -
hub.consul.token— замените значение параметра на токен для сервиса consul, см. пункт 3.
-
-
Выполните настройку конфигурационного файла /opt/apphub/config/hub-core/auth.properties.
-
db.auth.url— замените значения<pgsql_url>,<pgsql_port>и<hub_db_name>на значения соответствующих переменных из файла .env. -
db.auth.password— замените<hub_auth_password>на значение переменнойhub_auth_passwordиз файла .env. -
jwt.token.signing.key— замените<HUBAPP-SIGN-KEY>на значение, полученное в результате выполнения следующей команды.
-
-
Выполните настройку конфигурационного файла /opt/apphub/docker/docker-init.sh, см. «Приложение 19. Конфигурационный файл metrics docker-init.sh». В скрипте инициализации базы данных metrics, в секции, определяющей администратора БД metrics:
superset fab create-admin \ --username admin \ --firstname Superset \ --lastname Admin \ --email admin@superset.com \укажите следующие параметры:
--username— логин пользователя с правами администратора БД metrics;--firstname— имя пользователя с правами администратора БД metrics;--lastname— фамилия пользователя с правами администратора БД metrics;--email— электронная почта пользователя с правами администратора БД metrics.
-
Выполните настройку конфигурационного файла /opt/apphub/docker/.env, см. «Приложение 20. Конфигурационный файл metrics .env». Укажите следующие параметры:
DATABASE_PASSWORD,POSTGRES_PASSWORD— пароль пользователя с административным доступом к основной схеме БДmetrics, пароли должны совпадать сmetrics_pg_password;ADMIN_PASSWORD— пароль пользователя администратораmetrics, по умолчанию будет иметь значениеadmin;SUPERSET_SECRET_KEY— установите для этого параметра значение, полученное в результате выполнения следующей команды:openssl rand -base64 42.
-
Для добавления возможности использования внутренних агентов сканирований на одном хосте или на разных хостах с AppSec.Hub, выполните шаги, описанные в разделах:
-
Если в качестве доверенных необходимо добавить самоподписанные сертификаты, см. раздел «Добавление самоподписанных сертификатов в качестве доверенных».
-
Назначьте группу и владельца локальных папок.
sudo chown 2000:2000 -R /opt/apphub/config/hub-core sudo chown 101:101 -R /opt/apphub/config/hub-ui sudo chown 70:70 -R /opt/apphub/config/postgresql sudo chown 2000:2000 -R /opt/apphub/logs/hub-air sudo chown 2000:2000 -R /opt/apphub/logs/hub-core sudo chown 101:101 -R /opt/apphub/logs/hub-ui sudo chown 2000:2000 -R /opt/apphub/ml/local sudo chown 70:70 -R /opt/apphub/logs/postgresql sudo chown 70:70 -R /opt/apphub/postgresql/data sudo chown 101:101 -R /opt/apphub/ssl sudo chown 100:1000 -R /opt/apphub/consul-data sudo chown 100:1000 -R /opt/apphub/config/consul sudo chown 2000:2000 -R /opt/apphub/zapfiles sudo chown 70:70 -R /opt/apphub/db-data sudo chown 100:1000 -R /opt/apphub/docker/ sudo chmod u+x /opt/apphub/docker/docker-bootstrap.sh sudo chmod u+x /opt/apphub/docker/docker-init.shexport REMAP_UID=$(cat /etc/subuid | grep -i $USER | awk -F : '{print $2}') export UID_2000=$((${REMAP_UID}+1999)) export UID_101=$((${REMAP_UID}+100)) export UID_70=$((${REMAP_UID}+69)) export UID_100=$((${REMAP_UID}+99)) export UID_1000=$((${REMAP_UID}+999)) sudo chown ${UID_2000}:${UID_2000} -R /opt/apphub/config/hub-core sudo chown ${UID_101}:${UID_101} -R /opt/apphub/config/hub-ui sudo chown ${UID_70}:${UID_70} -R /opt/apphub/config/postgresql sudo chown ${UID_2000}:${UID_2000} -R /opt/apphub/logs/hub-air sudo chown ${UID_2000}:${UID_2000} -R /opt/apphub/logs/hub-core sudo chown ${UID_101}:${UID_101} -R /opt/apphub/logs/hub-ui sudo chown ${UID_2000}:${UID_2000} -R /opt/apphub/ml/local sudo chown ${UID_70}:${UID_70} -R /opt/apphub/logs/postgresql sudo chown ${UID_70}:${UID_70} -R /opt/apphub/postgresql/data sudo chown ${UID_101}:${UID_101} -R /opt/apphub/ssl sudo chown ${UID_100}:${UID_1000} -R /opt/apphub/consul-data sudo chown ${UID_100}:${UID_1000} -R /opt/apphub/config/consul sudo chown ${UID_2000}:${UID_2000} -R /opt/apphub/zapfiles sudo chown ${UID_70}:${UID_70} -R /opt/apphub/db-data sudo chown ${UID_1000}:${UID_1000} -R /opt/apphub/docker/ sudo chmod u+x /opt/apphub/docker/docker-bootstrap.sh sudo chmod u+x /opt/apphub/docker/docker-init.shУстановите разрешение на прослушивание привилегированных портов от непривилегированного пользователя.
Добавление в Docker-образ hub-engine агентов Johnny и PT AISA
Для добавления агента Johnny (CodeScoring) и PT AISA в образ hub-engine необходимо выполнить следующие шаги:
-
Создайте папку для сборки Docker-образа, скопируйте агента командной строки Johnny в созданную папку.
-
Создайте в этой папке Dockerfile со следующим содержимым, изменив версии образа hub-engine и агентов на необходимые (если один из агентов использовать не планируется, то необходимо удалить блок кода, содержащий установку этого агента):
FROM registry.appsec.global/appsechub/hub-engine:2025.4.2 USER root # PT AISA ENV aisa_version 4.8.0.40157 RUN wget -qO - https://update.ptsecurity.com/packages/PT-public.gpg | apt-key add - \ && echo deb https://update.ptsecurity.com/packages/deb/AI.Shell/release all non-free >> /etc/apt/sources.list \ && apt update && apt install aisa=${aisa_version} \ && apt-get clean && rm -rf /var/lib/apt/lists/* # Johnny RUN mkdir -p /opt/codescoring COPY johnny /opt/codescoring RUN chown ubuntu:ubuntu /opt/codescoring/johnny \ && chmod u+x /opt/codescoring/johnny USER ubuntu -
Далее необходимо запустить сборку Docker-файла, при необходимости заменив имя и тег образа.
docker build -t registry.appsec.global/appsechub/hub-engine:2025.4.2-agent -f Dockerfile .
Настройка пайплайн-агентов на удаленном хосте с безопасным соединением TLS
При установке AppSec.Hub и сервиса hub-pipeline на разных хостах необходимо выполнить следующие шаги:
-
Создайте директорию
/opt/pipelineна удаленном хосте. -
Создайте на удаленном хосте файл docker-compose.yml со следующим содержимым:
version: '3.2' services: nginx: image: nginx container_name: nginx networks: - network volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - ./ssl/certs/ssl-cert:/etc/ssl/certs/ssl-cert:ro restart: always ports: - 80:80/tcp - 443:443/tcp # Порты по количеству агентов, для каждого свой - 50052:50052/tcp - 50053:50053/tcp hub-pipeline-agent-node-1: image: registry.appsec.global/appsechub/hub-pipeline-agent:${hub_pipeline_agent_version} container_name: hub-pipeline-agent-node-1 networks: - network user: 2000:2000 restart: always environment: - LANG=en_US.utf-8 - DOCKER_HOST=tcp://docker-in-docker:2375 - SCANS_FOLDER=${SCANS_FOLDER} - ARCHIVE_FOLDER=${ARCHIVE_FOLDER} - CONSUL__HOST=${CONSUL_HOST} - CONSUL__PORT=${CONSUL_PORT} - CONSUL__TOKEN=${CONSUL_TOKEN} - ENCRYPTION_KEY=${ENCRYPTION_KEY} - GRPC__ADDRESS=${GRPC_ADDRESS} - GRPC__ID=${GRPC_ID} - GRPC__NAME=${GRPC_NAME} - GRPC__PORT=${GRPC_PORT} - GRPC__TAGS=${GRPC_TAGS} - GRPC__USE_TLS=${GRPC_USE_TLS} - LOG_LEVEL=${LOG_LEVEL} - PIPELINE_SERVICE_NAME=${PIPELINE_SERVICE_NAME} - PIPELINE_SERVICE_HOST=${PIPELINE_SERVICE_HOST} - PIPELINE_SERVICE_PORT=${PIPELINE_SERVICE_PORT} - RABBITMQ_MANAGEMENT_PORT=${RABBITMQ_MANAGEMENT_PORT} - RABBITMQ__HOST=${RABBITMQ_HOST} - RABBITMQ__PASSWORD=${RABBITMQ_PASSWORD} - RABBITMQ__PORT=${RABBITMQ_PORT} - RABBITMQ__ROUTING_KEY=${RABBITMQ_ROUTING_KEY} - RABBITMQ__USER=${RABBITMQ_USER} volumes: - ./scans_folder:/app/scans_folder hub-pipeline-agent-node-2: image: registry.appsec.global/appsechub/hub-pipeline-agent:${hub_pipeline_agent_version} container_name: hub-pipeline-agent-node-2 networks: - network user: 2000:2000 restart: always environment: - LANG=en_US.utf-8 - DOCKER_HOST=tcp://docker-in-docker:2375 - ARCHIVE_FOLDER=${ARCHIVE_FOLDER} - SCANS_FOLDER=${SCANS_FOLDER} - CONSUL__HOST=${CONSUL_HOST} - CONSUL__PORT=${CONSUL_PORT} - CONSUL__TOKEN=${CONSUL_TOKEN} - ENCRYPTION_KEY=${ENCRYPTION_KEY} - GRPC__ADDRESS=${GRPC_ADDRESS} - GRPC__ID=${GRPC_ID} - GRPC__NAME=${GRPC_NAME} - GRPC__PORT=${GRPC_PORT} - GRPC__TAGS=${GRPC_TAGS} - GRPC__USE_TLS=${GRPC_USE_TLS} - LOG_LEVEL=${LOG_LEVEL} - PIPELINE_SERVICE_NAME=${PIPELINE_SERVICE_NAME} - PIPELINE_SERVICE_HOST=${PIPELINE_SERVICE_HOST} - PIPELINE_SERVICE_PORT=${PIPELINE_SERVICE_PORT} - RABBITMQ_MANAGEMENT_PORT=${RABBITMQ_MANAGEMENT_PORT} - RABBITMQ__HOST=${RABBITMQ_HOST} - RABBITMQ__PASSWORD=${RABBITMQ_PASSWORD} - RABBITMQ__PORT=${RABBITMQ_PORT} - RABBITMQ__ROUTING_KEY=${RABBITMQ_ROUTING_KEY} - RABBITMQ__USER=${RABBITMQ_USER} volumes: - ./scans_folder:/app/scans_folder docker-in-docker: image: registry.appsec.global/public/sfs-docker:19.03.3-dind container_name: docker-in-docker privileged: true volumes: - ./docker-certs:/etc/docker/certs.d - /sys/fs/cgroup:/sys/fs/cgroup:ro environment: - DOCKER_TLS_CERTDIR= networks: - network pids_limit: 100 restart: on-failure:5 cpu_shares: 512 deploy: resources: limits: memory: 512M networks: network: driver: "bridge" driver_opts: com.docker.network.driver.mtu: 1450 ipam: driver: default config: - subnet: 172.20.0.0/16 -
Создайте в директории
/opt/pipelineфайл .env со следующим содержимым:# Версия образа hub-pipeline-agent hub_pipeline_agent_version=2025.4.2 # Директория для хранения архивов сканов для hub-pipeline-agent ARCHIVE_FOLDER=/app/archive_folder # Директория для временного хранения файлов сканов SCANS_FOLDER=/app/scans_folder # URL удаленного AppSec.Hub CONSUL_HOST=<AppSec.Hub URL, например, https://hub.your.domain.local> CONSUL_PORT="443" CONSUL_TOKEN="changeit" # Ключ для шифрования логинов и паролей для микросервисов AppSec.Hub # Должен совпадать с ключом hub-core ENCRYPTION_KEY="changeit" # GRPC_ADDRESS - Это URL ЭТОЙ Виртуальной машины GRPC_ADDRESS=<AppSec.Hub URL, например, https://hub-agent.your.domain.local> GRPC_USE_TLS=true # Переменные для hub-pipeline-agent-node-1 GRPC_ID=hub-pipeline-agent-node-1 GRPC_NAME=hub-pipeline-agent-node-1 GRPC_PORT="50052" GRPC_TAGS=["hub-pipeline-agent-node-1", "grpc-service"] # Переменные для hub-pipeline-agent-node-2 GRPC_ID2=hub-pipeline-agent-node-2 GRPC_NAME2=hub-pipeline-agent-node-2 GRPC_PORT2="50053" GRPC_TAGS2=["hub-pipeline-agent-node-2", "grpc-service"] LOG_LEVEL=INFO # Имя сервиса hub-pipeline-agent на удаленном хосте AppSec.Hub PIPELINE_SERVICE_NAME=grpc-pipeline-50053 PIPELINE_SERVICE_HOST=<AppSec.Hub URL, например, https://hub.your.domain.local> PIPELINE_SERVICE_PORT=50053 RABBITMQ_MANAGEMENT_PORT="15671" RABBITMQ_HOST=rabbitmq RABBITMQ_PASSWORD="changeit" RABBITMQ_PORT="5671" RABBITMQ_ROUTING_KEY=super RABBITMQ_USER=user -
Создайте директорию nginx с файлом default.conf со следующим содержимым (блоков
serverв нем может быть больше, чем в примере ниже, если в файле docker-compose.yaml описано больше агентов; общее правило - под каждый агент должен быть создан свой блок):server { server_name localhost; ignore_invalid_headers off; proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600; client_max_body_size 10000m; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; #limit_conn connections 90; listen 50052 ssl; http2 on; location / { grpc_pass grpc://hub-pipeline-agent-node-1:50052; } ssl_certificate /etc/ssl/certs/ssl-cert/fullchain1.pem; # managed by Certbot ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey1.pem; # managed by Certbot } server { server_name localhost; ignore_invalid_headers off; proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600; client_max_body_size 10000m; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; #limit_conn connections 90; listen 50053 ssl; http2 on; location / { grpc_pass grpc://hub-pipeline-agent-node-2:50053; } ssl_certificate /etc/ssl/certs/ssl-cert/fullchain1.pem; # managed by Certbot ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey1.pem; # managed by Certbot } -
Положите сертификаты для NGINX в директорию /opt/pipeline/ssl.
Настройка SSL-соединения для доступа в hub-pipeline
-
Зайдите на виртуальную машину где установлен AppSec.Hub.
-
В конфигурационном файле /opt/apphub/.env (см. «Приложение 1. Конфигурационный файл .env») укажите новые версии образов:
hub_core_version=2025.4.2 hub_ui_version=2025.4.2 hub_air_version=2025.4.2 hub_db_version=2025.4.2 hub_gateway_version=2025.4.2 hub_issue_rule_version=2025.4.2 hub_issue_version=2025.4.2 hub_sso_version=2025.4.2 hub_metrics_version=2025.4.2 hub_metrics_bridge_version=2025.4.2И добавьте строки для версий образов новых микросервисов:
hub_pipeline_version=2025.4.2 rabbitmq_version=3.13-management -
Добавьте следующие строки в конец файла /opt/apphub/.env (см. «Приложение 1. Конфигурационный файл .env»), указав переменные и значения параметров в соответствии с вашим окружением:
# Переменные для регистрации hub-pipeline на consul CONSUL_HOST=http://consul CONSUL_PORT="8500" CONSUL_TOKEN="changeit" # Имя, хост и порт для hub-pipeline PIPELINE_SERVICE_NAME=grpc-pipeline-50053 PIPELINE_SERVICE_HOST=hub-pipeline PIPELINE_SERVICE_PORT=50053 # Переменные для подключения hub-pipeline к rabbitmq RABBITMQ_MANAGEMENT_PORT="15672" RABBITMQ_HOST=rabbitmq RABBITMQ_AMQP_PORT=5672 RABBITMQ_PASSWORD="changeit" RABBITMQ_PORT="5672" RABBITMQ_ROUTING_KEY=super RABBITMQ_USERNAME=user RABBITMQ_USER=user # Используется для шифрования траффика hub-pipeline # В данный момент в бета-режиме USE_GRPC_SECURITY=false GRPC_AUTHORITY=<адрес хоста (url), на котором установлены пайплайн-агенты> -
Отредактируйте файл docker-compose.yml - добавьте новые блоки:
rabbitmq: image: registry.appsec.global/public/rabbitmq:${rabbitmq_version} container_name: rabbitmq environment: - RABBITMQ_DEFAULT_USER=${RABBITMQ_USERNAME} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD} networks: - net-hub volumes: - ./rabbit:/var/lib/rabbitmq ports: - 15672:15672 - 5672:5672 restart: on-failure:5 security_opt: - no-new-privileges cpu_shares: 1024 deploy: resources: limits: memory: 300M container_name: hub-pipeline environment: - PG_USER=postgres - PGPASSWORD=${pgsql_admin_password} - PG_URL=${pgsql_url} - HUB_URL=${HUB_URL} - TZ=Europe/Moscow - CONSUL_HOST=http://consul - CONSUL_PORT=8500 - CONSUL_TOKEN=${CONSUL_TOKEN} - DB_URL=jdbc:postgresql://${pgsql_url}/${hub_db_name} - HUBAPP_USERNAME=hubapp - HUBAPP_PASSWORD=${hub_app_password} - RABBITMQ_HOST=${RABBITMQ_HOST} - RABBITMQ_AMQP_PORT=${RABBITMQ_AMQP_PORT} - RABBITMQ_USERNAME=${RABBITMQ_USERNAME} - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD} - USE_GRPC_SECURITY=${USE_GRPC_SECURITY} - GRPC_AUTHORITY=${GRPC_AUTHORITY} networks: - net-hub cpu_shares: 768 deploy: resources: limits: memory: 1000M -
В файле для
hub-ui(/opt/apphub/config/hub-ui/hub.conf, см. «Приложение 13. Конфигурационный файл hub.conf») SSL терминируем в NGINX, роутинг настраиваем по порту, аналогично нодам:server { server_name localhost; ignore_invalid_headers off; proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600; client_max_body_size 10000m; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; #limit_conn connections 90; listen 50053 ssl http2; location / { grpc_pass grpc://hub-pipeline:50053; } ssl_certificate /etc/ssl/certs/ssl-cert/fullchain1.pem; # managed by Certbot ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey1.pem; # managed by Certbot } -
Также в файле /opt/apphub/config/hub-ui/default.conf для
hub-uiдля настройки SSL-соединения для доступа вconsulнеобходимо создать новый блок -locationсproxy_passнаconsul:location /v1/agent/service/ { proxy_set_header X-Forwarded-Port 443; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Scheme https; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Scheme https; proxy_set_header upgrade-insecure-requests 1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://consul:8500/v1/agent/service/; } -
Для настройки SSL-соединения для доступа в
rabbitmqдобавьте блокstreamв конец файла /opt/apphub/config/nginx/nginx.conf:worker_processes auto; error_log /var/log/nginx/error.log notice; pid /tmp/nginx.pid; events { worker_connections 1024; } http { proxy_temp_path /tmp/proxy_temp; client_body_temp_path /tmp/client_temp; fastcgi_temp_path /tmp/fastcgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; scgi_temp_path /tmp/scgi_temp; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$request_length $upstream_response_time $request_time'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } stream { server { listen 5671 ssl; proxy_pass rabbitmq:5672; ssl_certificate /etc/ssl/certs/ssl-cert/fullchain1.pem; # managed by Certbot ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey1.pem; # managed by Certbot } }и пробросьте файл в
hub-uiтаким способом:... volumes: ... - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf ... -
Необходимо открыть порты на двух NGINX - на ноде с AppSec.Hub:
hub-ui: ports: .... - 5671:5671/tcpи на ноде с пайплайн-агентами:
.... ports: - 80:80/tcp - 443:443/tcp - 50052:50052/tcp - 50053:50053/tcp