Всё остаётся внутри периметра: код, панель, находки.
Для регулируемых отраслей и закрытых сетей: панель, анализ и база работают на ваших серверах. Наружу открыты только две двери - реестр образов и файл лицензии; в air-gapped установке обе можно занести внутрь.
Один продукт, одна линия релизов
Каждая установка работает на одних и тех же образах с одним тегом версии. Ни форков, ни отстающих редакций.
Все модули включены
Все модули, от ArchPilot до Archito, работают на ваших серверах. Каждая функция приходит в каждую установку в тех же образах.
Консоль управления включена
У установки есть своя админ-зона: лицензия, пользователи и почта в одном месте, а мастер первого запуска проведёт по настройке.
Учётные записи и ИИ
Входа через Google или GitHub нет: учётные записи остаются внутри периметра, с e-mail и паролем или LDAP / Active Directory. Функции ИИ необязательны, и только им нужен интернет, к провайдеру, которого выберет оператор.
Что работает в установке?
Эталонная установка состоит из четырёх контейнеров на одном сервере. Анализ работает не на этом сервере, а внутри ваших CI-задач.
| Компонент | Назначение | Кто обращается |
|---|---|---|
| Панель (app-ui) | Веб-интерфейс, который открывают ваши пользователи. Передаёт каждый запрос в API от имени самого пользователя. | Браузеры; порт по умолчанию 8080 |
| API (api) | Принимает отчёты анализа, считает оценки и выполняет плановые задачи, например синхронизацию Git и отчёты. Только он работает с базой данных. | Панель и ваши CI-раннеры; порт по умолчанию 5000 |
| PostgreSQL 16 | Находки, отчёты, пользователи и настройки администрирования. | Только API |
| Redis 7 | Сессии, кэш и ключи сессий, общие для реплик. | Панель и API |
| Образы анализа (коллекторы) | Сканируют код в вашей CI-задаче и отправляют отчёт в ваш собственный API. Отдельный образ для каждого из девяти языков. | Ваши CI-задачи; на сервере постоянно ничего не работает |
TLS обеспечивает стоящий впереди обратный прокси (nginx, traefik) или ingress. Браузерам нужен только порт панели, CI-раннерам только порт API.
Установка - три шага
Kubernetes не обязателен; хватит docker compose. Руководство со скриншотами - на docs.apparch.io.
- 01
Лицензия + ключ установки
Отдел продаж передаёт ID установки и ключ установки; ключ отправляется ровно один раз. При первом запуске установка сама получает лицензию онлайн. В изолированной сети вы отправляете код установки из мастера настройки и получаете привязанный к нему .lic файл.
- 02
Скачайте образы
docker login hub.apparch.io - ID установки как логин, ключ как пароль. В air-gapped сети образы скачиваются один раз снаружи и заносятся внутрь.
- 03
compose up + мастер
Compose-файл поднимает панель, анализ и миграции базы; при первом запуске мастер настраивает админа и лицензию.
Требование: Docker Engine 24+ с плагином compose. Это всё.
Установка в изолированной сети
Ни установке, ни работе не нужно соединение за пределы вашей сети. Единственный обмен с внешним миром: два файла, переносимые вручную.
- 01
Внесите образы
Образы панели и API поставляются одним архивным файлом; вы переносите его на сервер и загружаете командой docker load. Образы анализа вы кладёте в свой внутренний registry, и CI-задачи берут их оттуда.
- 02
Сгенерируйте секреты на сервере
gen-secrets.sh случайным образом создаёт прямо на сервере пароли базы данных и Redis, ключ подписи сессий и главный ключ шифрования. Ни один из них не попадает к нам и не содержится в образах.
- 03
Отправьте код установки
Запустите сервисы и отправьте AppArch код установки, показанный на шаге лицензии мастера настройки. Полученный файл .lic привязан только к этой установке; положите его в ./license/apparch.lic или вставьте в мастер.
- 04
Наружу не уходит ни один запрос
Оставьте адреса поставщика и обновлений пустыми: лицензия проверяется локально, проверки версий нет, ни один запрос не покидает сеть. Новые версии тоже приходят файлами.
Просто эксплуатировать, понятно наблюдать
Что вашей команде нужно знать после установки, в четырёх пунктах.
Эндпоинты здоровья
/health/live сообщает, что процесс работает, /health/ready, что база данных и Redis отвечают (для панели: API). Compose использует их как проверки здоровья контейнеров; в Kubernetes они служат пробами liveness и readiness.
Обновления
Измените версию образа в .env и выполните docker compose pull и up. Ожидающие миграции базы применяются при запуске по порядку, сколько бы версий ни было пропущено. Миграции идут только вперёд, поэтому сначала сделайте резервную копию через pg_dump.
Запуск, который всё объясняет
API пошагово пишет запуск в журнал: база данных, миграции, справочные данные, лицензия. Если шаг не удался, строка ошибки называет этот шаг; при сбое соединения видны хост и порт, но никогда учётные данные.
Больше одной реплики
Реплики с общими PostgreSQL и Redis составляют одну установку: миграции выполняются один раз под блокировкой базы, плановые задачи срабатывают на одной реплике через кластерный планировщик, сессии разделяются через Redis.
Безопасность по умолчанию
Меры, которые идут вместе с установкой и не требуют дополнительной настройки.
- Секреты остаются у вас. Пароли и ключи создаются на вашем сервере при установке; в образах только несекретные значения по умолчанию.
- Учётные данные Git зашифрованы. Токены доступа подключённых провайдеров шифруются в базе данных алгоритмом AES-GCM главным ключом вашей установки.
- Образы без оболочки и без root. Контейнеры содержат только среду выполнения .NET, не включают оболочку и работают от непривилегированного пользователя.
- Лицензию нельзя изменить. Лицензия проверяется ключом подписи AppArch внутри образов; ручная правка файла ломает подпись.
- Вход остаётся в вашей сети. Почта и пароль (с необязательной двухфакторной аутентификацией) или LDAP / Active Directory. Входа через Google или GitHub нет.
Как ведёт себя лицензия?
Никаких внезапных отключений: лимиты явные, как и то, что происходит при их превышении.
Подписанный файл, офлайн-проверка
Лицензия - это .lic файл с подписью RS256; установка проверяет его локально, и одна лицензия работает только на одной установке. Она не звонит на лицензионный сервер, чтобы работать. Несколько подов с общей базой данных считаются одной установкой.
Счётчики по календарному месяцу
Лимиты считаются за календарный месяц и обнуляются в его начале - без сюрпризов скользящего окна.
Сначала мягкий лимит, потом жёсткий
Превышение лимита не останавливает работу: семь дней и 10% допускаются, панель предупреждает. Жёсткая остановка наступает лишь когда буфер исчерпан.
Частые вопросы
Как получать обновления?
Какие есть варианты аутентификации?
Что работает в полном air gap, а что нет?
Кто видит данные?
Как устроены цены?
Работает ли это в Kubernetes?
Что нужно резервировать?
Что будет с лицензией при смене сервера?
Попробуйте внутри своего периметра
Запросите ID установки; с compose-файлом вы подниметесь за один вечер.