Описание технических средств хранения исходного текста и объектного кода и средств компиляции
Версия 0.2.0 (редакция RU), проект · Скачать DOCX
Проект: документы проходят юридическую проверку. Пометки [ЗАПОЛНИТЬ] и [ПРОВЕРИТЬ] будут заполнены и сняты до подачи заявления.
Условия подачи [ЗАПОЛНИТЬ: удалить этот раздел, когда все условия выполнены]
Документ описывает размещение средств хранения и сборки, которое должно существовать на дату подачи заявления. Пока хотя бы одно из условий ниже не выполнено, сведения документа не соответствуют действительности и заявление подавать нельзя: недостоверные сведения влекут отказ во включении сведений в реестр (подпункт «а» пункта 27 Правил) и отказ в регистрации нового заявления в течение 12 месяцев (подпункт «б» пункта 17 Правил).
- [ПРОВЕРИТЬ ДО ПОДАЧИ] Репозиторий исходного текста со всей историей, ветками и тегами размещён в системе хранения на территории Российской Федерации (раздел 2), как требует подпункт «и» пункта 5 Правил. Копии вне Российской Федерации не используются для разработки и сборки.
- [ПРОВЕРИТЬ ДО ПОДАЧИ] Сборка всех образов выполняется только на сборочных серверах на территории Российской Федерации (раздел 4); иные системы сборки отключены.
- [ПРОВЕРИТЬ ДО ПОДАЧИ] Объектный код (образы контейнеров и чарты Helm) публикуется только в реестр образов на территории Российской Федерации (раздел 3); инсталляции получают образы только из него.
- [ПРОВЕРИТЬ ДО ПОДАЧИ] Все внешние источники зависимостей, перечисленные в разделе 5, заменены копиями или кэширующими прокси на территории Российской Федерации, а сборка проверена без доступа к иным источникам.
- [ПРОВЕРИТЬ ДО ПОДАЧИ] Развёртывание обновлений выполняется только из сборочной системы на территории Российской Федерации (раздел 4.4); управление программным обеспечением и его обновление из-за рубежа невозможны.
- [ПРОВЕРИТЬ ДО ПОДАЧИ] Сведения разделов 2–4 (адреса, договоры, версии) подтверждены документами, которые прилагаются к заявлению или предъявляются по запросу (раздел 6).
1. Общие сведения
1.1. Назначение документа
Документ содержит описание технических средств хранения исходного текста и объектного кода программного комплекса «Айтечество» (далее — программный комплекс) и средств его компиляции (сборки), включая место их размещения. Документ предусмотрен подпунктом «ж» пункта 11 Правил формирования и ведения единого реестра российских программ для электронных вычислительных машин и баз данных и единого реестра программ для электронных вычислительных машин и баз данных из государств — членов Евразийского экономического союза, за исключением Российской Федерации, утверждённых постановлением Правительства Российской Федерации от 16.11.2015 № 1236 (в редакции от 13.08.2026) (далее — Правила), и описывает соответствие программного комплекса требованию подпункта «и» пункта 5 Правил.
1.2. Сведения о программном обеспечении
| Параметр | Значение |
|---|---|
| Наименование | Программный комплекс «Айтечество» |
| Версия | 0.2.0 (редакция RU) |
| Правообладатель | Индивидуальный предприниматель Орлова Юлия Витальевна |
| Система контроля версий | Git |
| Языки программирования | Go, Python, TypeScript; SQL (схема базы данных) |
| Форма объектного кода | Образы контейнеров формата OCI для платформы linux/amd64; чарты Helm |
1.3. Состав исходного текста
Исходный текст хранится в одном репозитории Git. Репозиторий содержит исходный текст компонентов программного комплекса, тесты, общие контракты (схема базы данных, JSON-схемы, типы API), сценарии сборки (Dockerfile), описание конвейера сборки, манифесты развёртывания (чарты Helm, шаблон стека Docker Swarm) и документацию.
| Компонент | Назначение | Язык и форма объектного кода |
|---|---|---|
| gateway | Шлюз: приём запросов, маскирование и восстановление данных, политики, проксирование к моделям | Go; статически скомпонованный исполняемый файл в образе контейнера |
| api | API управления, фоновые задачи, миграции базы данных, биллинг | Python; пакет с зависимостями в образе контейнера |
| nlp | Сервис распознавания именованных сущностей | Python; пакет с зависимостями и словарями в образе контейнера |
| extractor | Извлечение текста из вложенных документов | Python; пакет в образе контейнера с офисным пакетом для старых форматов |
| web | Веб-консоль и сайт | TypeScript; собранное приложение Next.js в образе контейнера |
| contracts | Схема базы данных, JSON-схемы, типы API | SQL, JSON, YAML, TypeScript; входят в сборку компонентов |
| backup | Резервное копирование базы данных (для установки в Docker Swarm) | Сценарий оболочки; образ контейнера |
Объём исходного текста продукта, представленного в документе «Текст программы», указан на его титульном листе (число файлов, строк и SHA-256 листинга, коммит Git).
1.4. Схема размещения
Все средства хранения и сборки находятся на территории Российской Федерации и контролируются правообладателем:
- репозиторий исходного текста, система учёта задач, система непрерывной интеграции и реестр образов и пакетов — в российском сервисе GitFlic по договору правообладателя с оператором сервиса (разделы 2, 3);
- сборочный сервер — виртуальный сервер, арендованный правообладателем у российского поставщика услуг: на нём работают сборочный агент системы непрерывной интеграции, кэширующие прокси зависимостей и нагрузочный тест (разделы 4, 5);
- копии сторонних образов, чартов и файлов релизов, необходимых для сборки и установки, — в реестре того же сервиса (раздел 5).
Учётная запись организации в сервисе и договоры принадлежат правообладателю; административный доступ имеют только правообладатель и исполнитель по договору на доработку и сопровождение программы для ЭВМ «Айтечество» (документ «Описание процессов, обеспечивающих поддержание жизненного цикла программного обеспечения», раздел 6).
2. Средства хранения исходного текста
2.1. Система хранения
| Параметр | Значение |
|---|---|
| Система хранения репозиториев | GitFlic — российский сервис хранения репозиториев Git с системой учёта задач, непрерывной интеграцией и реестром образов и пакетов (облачная версия сервиса) |
| Оператор сервиса | [ЗАПОЛНИТЬ: наименование и ИНН оператора сервиса] |
| Место размещения | Центр обработки данных оператора на территории Российской Федерации [ЗАПОЛНИТЬ: адрес центра обработки данных по сведениям оператора] |
| Основание размещения | Договор правообладателя с оператором сервиса (раздел 6) |
| Адрес репозитория | [ЗАПОЛНИТЬ: адрес репозитория в сервисе] |
| Защищённые ветки | Основная ветка: прямая запись запрещена, изменения вносятся только через запросы на слияние после рецензирования и прохождения автоматических проверок [ПРОВЕРИТЬ ДО ПОДАЧИ: защита основной ветки настроена в сервисе] |
| Доступ | Персональные учётные записи правообладателя и исполнителя; операции с репозиторием — по SSH-ключам или персональным токенам; сборочный агент — по токену с правом чтения репозитория и публикации в реестр [ЗАПОЛНИТЬ: число учётных записей] |
| Учёт задач | Система учёта задач сервиса: неисправности, предложения и план выпусков (документ «Описание процессов, обеспечивающих поддержание жизненного цикла программного обеспечения», разделы 2.2 и 3.2) |
| Резервное копирование | Ежесуточное зеркальное копирование репозитория со всей историей, ветками и тегами на сборочный сервер правообладателя (раздел 4.1); хранятся копии за 30 дней |
2.2. Порядок внесения изменений
Изменения исходного текста вносятся в отдельных ветках и попадают в основную ветку через запрос на слияние. До слияния сборочная система выполняет автоматические проверки, перечисленные в документе «Описание процессов, обеспечивающих поддержание жизненного цикла программного обеспечения». Каждый выпуск отмечается тегом Git вида vX.Y.Z; коммит, из которого выгружен текст программы, указан на титульном листе документа «Текст программы».
Секреты (ключи, пароли, токены) в репозитории не хранятся: в нём находятся только шаблоны конфигурации с заглушками, а файлы с секретами исключены из системы контроля версий.
3. Средства хранения объектного кода
3.1. Реестр образов
| Параметр | Значение |
|---|---|
| Реестр образов контейнеров и чартов Helm | Реестр образов и реестр пакетов (Helm, generic) сервиса GitFlic, используемого для хранения исходного текста (раздел 2.1) |
| Оператор, место и основание размещения | Как в разделе 2.1 |
| Адрес реестра | [ЗАПОЛНИТЬ: адрес реестра образов] |
| Публикация | Только сборочным агентом правообладателя (раздел 4.1) по токену |
| Доступ заказчиков | Персональные учётные данные с правом только чтения, выдаваемые на срок лицензионного договора (документ «Описание технических средств активации, выдачи, распространения и управления лицензиями», раздел 3.2) |
| Срок хранения образов | Образы и чарты выпусков vX.Y.Z — бессрочно; промежуточные сборки (теги sha-…) — не менее 90 дней |
3.2. Состав объектного кода
Объектный код каждого выпуска — набор образов контейнеров (по одному на компонент) и чарты Helm. Образ собирается один раз из коммита, проверяется сканером уязвимостей и только после успешной проверки получает теги: sha-<первые 12 символов коммита> и номер выпуска vX.Y.Z. Образ, не прошедший проверку, тегов не получает и не может быть развёрнут. Инсталляции ссылаются на образы по тегу выпуска; неизменность содержимого обеспечивается дайджестом SHA-256 образа. При сборке формируется перечень компонентов образа (SBOM).
| Образ | Содержимое |
|---|---|
| gateway | Исполняемый файл шлюза; базовый образ без командной оболочки (distroless static, Debian 13), пользователь без прав администратора |
| api | Пакет aitech_api с зависимостями (API управления, фоновые задачи, миграции); Python 3.12; менеджеры пакетов и компиляторы удалены |
| nlp | Пакет aitech_nlp с зависимостями и словарями морфологии и распознавания сущностей; модели загружаются из установленных пакетов, без обращений к сети при работе |
| extractor | Пакет aitech_extractor; офисный пакет LibreOffice (без графического интерфейса) для старых форматов документов; менеджеры пакетов удалены |
| web | Собранное приложение Next.js (режим standalone) на Node.js 24; менеджеры пакетов удалены |
| backup | PostgreSQL 17 (клиент pg_dump), средства шифрования и выгрузки копий в объектное хранилище |
Сторонние образы, которые используются при установке (PostgreSQL, Valkey, объектное хранилище, обратный прокси, оператор PostgreSQL для Kubernetes и др.), перечислены в документе «Перечень сторонних компонентов» и закреплены по дайджесту; их копии размещаются в том же реестре (раздел 5).
4. Средства компиляции (сборки)
4.1. Сборочная система
| Параметр | Значение |
|---|---|
| Система непрерывной интеграции | Система CI/CD сервиса GitFlic; описание конвейера хранится в репозитории; задания выполняются только сборочным агентом правообладателя |
| Сборочный сервер | Один виртуальный сервер, арендованный правообладателем у российского поставщика услуг; на нём работают сборочный агент, кэширующие прокси зависимостей (раздел 5), зеркальная копия репозитория (раздел 2.1) и нагрузочный тест [ЗАПОЛНИТЬ: ОС, процессор, память, диск] |
| Место размещения | [ЗАПОЛНИТЬ: центр обработки данных, адрес на территории Российской Федерации] |
| Основание размещения | Договор аренды сервера (раздел 6) |
| Средство сборки образов | Docker Engine с BuildKit (docker buildx) [ЗАПОЛНИТЬ: версия на сборочном сервере] |
| Целевая платформа | linux/amd64 |
4.2. Инструменты сборки
Версии инструментов закреплены в сценариях сборки (Dockerfile) и файлах зависимостей репозитория; базовые образы закреплены по дайджесту SHA-256.
| Инструмент | Версия | Назначение |
|---|---|---|
| Go (компилятор и компоновщик) | 1.27.3 | Сборка шлюза: CGO_ENABLED=0, флаги -trimpath -buildvcs=false -ldflags="-s -w" |
| Python | 3.12.15 | Среда выполнения api, nlp, extractor; Python-компоненты не компилируются в машинный код, а поставляются как пакеты в образе |
| uv | 0.12.7 | Установка зависимостей Python строго по файлам блокировки (uv sync --frozen) |
| Node.js | 24.22.0 | Сборка и выполнение веб-приложения |
| pnpm | 12.8.1 | Установка зависимостей веб-приложения строго по файлу блокировки (--frozen-lockfile) |
| TypeScript | 6.0.3 | Компиляция веб-приложения |
| Next.js | 16.4.0 [ПРОВЕРИТЬ ДО ПОДАЧИ: до выпуска обновлено до версии с исправлением известных критических уязвимостей (не ниже 16.4.2); указать версию выпуска] | Сборка веб-приложения (режим standalone) |
| Базовый образ сборки Go | golang 1.27.3, Debian 12 | Стадия сборки шлюза |
| Базовый образ Python | python 3.12.15-slim, Debian 13 | Стадии сборки и выполнения api, nlp, extractor |
| Базовый образ Node.js | node 24.22.0, Debian 13 (slim) | Стадии сборки и выполнения web |
| Базовый образ шлюза | distroless static, Debian 13 | Стадия выполнения шлюза |
4.3. Порядок сборки
- Сборочная система получает исходный текст из репозитория (раздел 2) по коммиту основной ветки или тегу выпуска.
- Проверяется согласованность общих контрактов и их копий в компонентах, формат файла закрепления сторонних образов, конфигурация развёртывания.
- Выполняются статический анализ, проверка типов, модульные и интеграционные тесты всех компонентов, тесты качества маскирования, проверка совместимости с предыдущим выпуском и поиск известных уязвимостей в зависимостях.
- Для каждого компонента собирается образ контейнера (docker buildx build, платформа linux/amd64) по многостадийному Dockerfile: стадия сборки устанавливает зависимости по файлам блокировки из источников раздела 5 и выполняет самопроверку, стадия выполнения содержит только необходимые для работы файлы и запускается от пользователя без прав администратора.
- Образ публикуется в реестр (раздел 3) без тегов, проверяется сканером уязвимостей; при отсутствии исправимых критических уязвимостей образу присваиваются теги.
- Еженедельно повторно проверяются на уязвимости все закреплённые сторонние образы.
Сборка воспроизводима в том смысле, что все входные данные закреплены: базовые образы — по дайджесту, зависимости — файлами блокировки с хешами (go.sum, uv.lock, pnpm-lock.yaml). Побайтовое совпадение образов при повторной сборке не гарантируется.
4.4. Развёртывание обновлений
Обновление инсталляции правообладателя выполняется заданием сборочной системы на сборочном агенте правообладателя: задание запускается правообладателем или исполнителем только для образов, прошедших проверки раздела 4.3, формирует файл стека с тегом выпуска и разворачивает его на сервере инсталляции; образы загружаются только из реестра правообладателя (раздел 3). Инсталляции заказчиков обновляются заказчиками самостоятельно (документ «Информация, необходимая для установки и эксплуатации», раздел 10): средств удалённого управления инсталляциями заказчиков и принудительного обновления программный комплекс не содержит.
5. Источники зависимостей сборки
Сборка не обращается к хранилищам за пределами Российской Федерации: каждый внешний источник заменён копией в реестре правообладателя (раздел 3) или кэширующим прокси на сборочном сервере (раздел 4.1). Копии пополняются при изменении файлов зависимостей; целостность полученных файлов проверяется по хешам из файлов блокировки и закрепления. Перечень сторонних компонентов с версиями и лицензиями приведён в документе «Перечень сторонних компонентов».
| Исходный источник | Что из него получается | Источник при сборке в РФ |
|---|---|---|
| Публичные реестры образов контейнеров | Базовые образы сборки и выполнения; образы PostgreSQL, Valkey, объектного хранилища, обратного прокси, компонентов Kubernetes | Копии образов в реестре правообладателя, загруженные по дайджестам из Dockerfile и файла images.lock.yaml |
| Прокси модулей Go и база контрольных сумм | Модули Go шлюза; средства статического анализа | Кэширующий прокси модулей Go на сборочном сервере (переменная GOPROXY); модули проверяются по файлу go.sum репозитория, обращение к внешней базе контрольных сумм отключено |
| Индекс пакетов Python (PyPI) | Зависимости api, nlp, extractor, включая словари морфологии и модели распознавания сущностей | Кэширующее зеркало индекса пакетов на сборочном сервере; пакеты проверяются по хешам файлов uv.lock |
| Публикации релизов проектов с открытым исходным кодом | Пакет модели spaCy для английского языка; средства rclone и age для образа резервного копирования | Копии файлов в реестре пакетов правообладателя (generic); проверка по SHA-256, закреплённым в репозитории |
| Реестр пакетов npm | pnpm и зависимости веб-приложения | Кэширующее зеркало реестра npm на сборочном сервере; пакеты проверяются по хешам файла pnpm-lock.yaml |
| Внешний сервис шрифтов | Шрифты веб-интерфейса | Файлы шрифтов включаются в репозиторий и подключаются из файлов приложения; обращения к внешнему сервису при сборке нет [ПРОВЕРИТЬ ДО ПОДАЧИ: способ подключения шрифтов изменён] |
| Репозитории пакетов Debian | LibreOffice, шрифты, tini в образе extractor | Зеркало репозиториев Debian на территории Российской Федерации [ЗАПОЛНИТЬ: адрес зеркала] |
| Репозитории чартов Helm | Чарты контроллера входящего трафика, cert-manager, оператора PostgreSQL, мониторинга (только для установки в Kubernetes) | Копии чартов в реестре Helm правообладателя |
| База уязвимостей сканера | Обновление базы сканера образов | Копия базы в реестре правообладателя, обновляемая ежесуточно на сборочном сервере; сканер использует только копию |
6. Подтверждающие сведения
| Сведения | Документ или ссылка |
|---|---|
| Договор с оператором сервиса GitFlic (хранение исходного текста, учёт задач, CI/CD, реестр образов и пакетов) | [ЗАПОЛНИТЬ: номер и дата договора] |
| Договор аренды сборочного сервера | [ЗАПОЛНИТЬ: поставщик услуг, номер и дата договора] |
| Адреса центров обработки данных | Разделы 2.1 и 4.1 |
| Лица, имеющие административный доступ к средствам хранения и сборки | Правообладатель и исполнитель по договору на доработку и сопровождение — 2 лица (документ «Описание процессов, обеспечивающих поддержание жизненного цикла программного обеспечения», раздел 6) |
| Коммит и SHA-256 листинга исходного текста | Указаны на титульном листе документа «Текст программы» |