Files
Bridge-and-Join-s/REPORT.md
T
fontvielle bac55cbdfd feat(deploy): полный набор скриптов миграции на Astra Linux
Поскольку Интеграционный шлюз НРД (ИШ) официально работает только на
Astra Linux SE 1.6/1.7 (RPM-версии нет, дистрибутив только .deb для
Debian-based), мигрируем инфраструктуру с РЕД ОС на Astra. Это
заодно проверит «чистую» установку с нуля.

deploy/astra/install.sh — установщик bj-server для свежей Astra ВМ:
- проверка ОС (Astra Linux SE)
- apt-зависимости (curl, git, podman, podman-compose, postgresql-client)
- скачивание Go 1.24+ с go.dev, если нет
- системный пользователь bj + каталоги /opt/bj /var/lib/bj /var/log/bj
- git clone репо в /opt/bj/src
- go build бинарника /opt/bj/bj-server
- podman-compose up -d postgres + накат всех миграций
- systemd unit с безопасными ограничениями (NoNewPrivileges,
  ProtectSystem=strict, ReadWritePaths только нужные, PrivateTmp)
- автозапуск + проверка systemctl is-active
- финальная подсказка с URL'ами

deploy/astra/install-validata.sh — установщик Валидата CSP:
- ищет .deb пакеты в dist/validata/ или принимает путь аргументом
- если пакетов нет — печатает текст письма для запроса дистрибутива
  у НРД (soed@nsd.ru) или МБ (pki@moex.com)
- dpkg -i + apt-get install -f для зависимостей
- проверка установки в /opt/Validata*

deploy/astra/install-ish.sh — установщик ИШ:
- ищет igate_*_amd64.deb в стандартных местах (dist/ish/, ~/Downloads и т.п.)
- проверяет наличие Валидаты (предупреждает если нет)
- dpkg -i igate_*.deb
- подсказывает следующие шаги (запуск GUI, настройка БД и канала WSL)

deploy/astra/migrate-from-redos.sh — экспорт со старой РЕД ОС ВМ:
- pg_dump БД bj (через podman exec или напрямую)
- копия ~/.bj/setup.json (ищется в нескольких стандартных путях)
- последние 7 дней логов из /var/log/bj и journalctl
- meta.txt с версиями ОС/пакетов
- README.md с инструкциями восстановления на новой ВМ
- итоговый тарбол /tmp/bj-migration-YYYY-MM-DD-HHMM.tar.gz

deploy/astra/healthcheck.sh — проверка после установки:
- 8 разделов: ОС, пользователь/каталоги, systemd, HTTP, PostgreSQL,
  Валидата, ИШ, сетевые порты
- цветной вывод OK/WARN/FAIL для каждого пункта

deploy/astra/README.md — пошаговая инструкция миграции из 8 этапов:
- подготовка (Astra ВМ, доступ root, запрос Валидаты у НРД)
- экспорт со старой ВМ
- install.sh на новой ВМ
- restore БД и настроек
- healthcheck
- install-validata.sh + импорт сертификатов УЦ МБ
- install-ish.sh + настройка канала WSL
- первый тест с роботом MOEX МОСТ
- раздел «что НЕ переносится автоматически»
- раздел «откат» (старая ВМ работает до подтверждения миграции)

REPORT.md обновлён:
- общая готовность 72% → 75%
- готовность к роботу 85% → 88%
- новая строка «Установщик/мигратор на Astra Linux: 100% »
- «Установка ИШ на наш стенд» поднялась с 0% до 30%
2026-05-14 17:37:10 +03:00

25 KiB
Raw Blame History

Bridge-and-Join-s — отчёт о ходе работ

Дата: 14.05.2026 (3-я редакция за день — скачан дистрибутив ИШ + полная документация ИШ) Контур: дев-стенд РЕД ОС 8 (10.10.10.22), bj-server на :8080, lk-emulator на :8083 Целевая интеграция: сервис MOEX МОСТ (M2M) через НКО АО НРД


Готовность по областям

Область Готовность Статус
Контракты и модели M2M (XSD → Go) 100% Готово
Журнал сделок (PostgreSQL + in-memory) 100% Готово
Бизнес-логика FSM (стейт-машина заявок) 100% Готово
Веб-интерфейс администратора 95% Готово
Мастер настройки (wizard) для оператора 100% Готово
Установка и конфигурация КриптоПро CSP через UI 100% Готово
Авто-загрузка сертификатов УЦ (мониторинг + ежесуточное обновление) 100% Готово
Контейнеры КриптоПро с флешки (импорт в HDIMAGE) 80% ⚠ Без UI-импорта сертификата из контейнера
Лента новостей + мониторинг сайта НРД (doc-watcher) 100% Готово
Эмулятор робота-автотеста НРД (внутренний mock) 90% ⚠ Сценарий 3333 — частично
Реальное подключение к роботу на TEST3 НРД 30% ⚠ REST-клиент ИШ готов, ждём сам ИШ + сертификат
REST-клиент ИШ НРД (по DOC/instr-ish-rest-api.pdf) 100% POST file, GET status, GET list, GET package, упаковщик ZIP, 10/10 тестов
Дистрибутив ИШ НРД и полная документация 100% Скачаны: igate_100.0-765_amd64.deb (117 МБ) + 6 PDF
Установка ИШ на наш стенд 30% ⚠ Скрипты установки готовы, ждём Astra Linux ВМ от инфра-команды
Установщик/мигратор на Astra Linux 100% 5 скриптов в deploy/astra/: install/install-ish/install-validata/migrate-from-redos/healthcheck + README
Получение СКЗИ «Валидата CSP» для Linux 0% Запрос в soed@nsd.ru / pki@moex.com — см. блокер #2
Сертификат УЦ Московской Биржи для подписи 0% Не получен — см. блокер #3
Подключение реального ЛК ESIA Finance 20% ⚠ Эмулятор lk-emulator работает, реальный URL не указан
Контракт с Fansy (ETL) 30% ⚠ Контракт документирован, ETL не реализован стороной Fansy
Уведомления (e-mail, мессенджеры) 0% M3-M4
Тесты, CI/CD 40% ⚠ Unit-тесты компонентов, нет E2E против реального НРД

Общая готовность системы: ≈ 75% (по объёму функциональности) Готовность к интеграционному тесту с роботом: ≈ 88% (зависит только от внешних факторов: Astra Linux ВМ, Валидата CSP, сертификат УЦ МБ — на нашей стороне установщик готов)


Что сделано (28 коммитов)

Архитектура и ядро (M1)

  • Реализованы Go-модели всех M2M-сообщений (M2MTransferRequest, Response, Decision, History, Movement) с валидацией.
  • Стейт-машина обработки заявок (FSM): draft → validated → submitted_to_nsd → awaiting_decision → confirmed/rejected/timed_out → done + ветка ручного разбора.
  • Один исполняемый бинарник bj-server (вместо запланированных микросервисов) — рассчитано на нагрузку до 1000 сделок/день.
  • Хранилище: PostgreSQL 16 в контейнере podman (один клик «Поднять автоматически» в UI), миграции для двух схем — fansy.* (данные от Fansy) и m2m_core.* (журнал сделок). Fallback на in-memory для дева.

Криптография

  • Переход с КриптоПро JCP (~82 000₽, Java) на КриптоПро CSP (~30-50 000₽, нативный) — экономия лицензии в ~2 раза. Подходит для нашего объёма (100-1000 сделок/день).
  • Go-клиент к СКЗИ через стандартный PKCS#11 интерфейс (internal/cryptocli). Один клиент работает с КриптоПро CSP, Рутокен ЭЦП 2.0, Валидата, ViPNet — меняется только путь к .so модулю.
  • UI-кнопка «Загрузить дистрибутив КриптоПро»: загружаешь tar/tgz/rpm, система сама распаковывает и устанавливает через sudo rpm -Uvh.
  • Активация лицензии через UI (cpconfig -license -set под капотом).
  • Импорт сертификатов (.pfx/.p12 с PIN, .cer/.crt без) в хранилища uMy/mroot/uRoot через certmgr -inst.
  • Авто-обнаружение контейнеров КриптоПро на USB-флешках (формат name.000): сканирует /run/media/$USER/, /media/, /mnt/; кнопка «Скопировать в локальное хранилище» переносит контейнер в /var/opt/cprocsp/keys/$USER/.
  • Авто-обнаружение сертификатов на Рутокене ЭЦП 2.0 — список заполняется автоматически после подключения токена в USB.

Сертификаты УЦ

  • Авто-загрузка корневых и подписных сертификатов УЦ по списку URL: SHA-256 дедуп, импорт в mroot/uRoot через certmgr.
  • Ежесуточная фоновая горутина обновляет сертификаты, в ленте новостей появляется уведомление «Обновлён сертификат УЦ: ».
  • За 14 дней до истечения сертификата — отдельное предупреждение в ленте.

Веб-интерфейс администратора (порт 8080)

6 разделов меню:

  • Дашборд — счётчики сделок, состояние подсистем, последние заявки, блок «Новости» сверху.
  • Мастер настройки — пошаговая настройка (5 шагов) с прогресс-баром, подсказки «?» и «Где взять?» рядом с каждым полем.
  • Настройка — расширенные параметры всех подсистем.
  • Заявки — журнал + карточка заявки с историей FSM.
  • Статус системы — health-check всех подсистем.
  • Инструкции — 5 help-страниц: БД, API ЛК, КриптоПро, Внешние системы, Тестирование с роботом.
  • Новости — лента событий + кнопка «Проверить обновления документации НРД сейчас».

Все надписи на русском.

Мониторинг НРД (doc-watcher)

  • Раз в сутки скачивает страницы с сайта НРД, парсит ссылки на PDF, обновляет файлы в DOC/ (старые версии переименовываются в .YYYY-MM-DD.pdf.bak для аудита).
  • Каждое обновление публикуется как новость в ленту.
  • Уже скачаны три свежие инструкции от 12.05.2026:
    • instruktsiya-po-testirovaniyu-s-robotom.pdf — инструкция по роботу-автотесту
    • instruktsiya-...-fizicheskim-litsom-samomu-sebe.pdf — обмен при self-transfer
    • servis-most-m2m.pdf — обзор сервиса

Робот-автотест MOEX МОСТ

  • Реализован внутренний робот-эмулятор: bj-server понимает код робота MC0012500000 и 4 тестовых сценария (1111/2001/2002/3333) через DocumentSeries.
  • Это позволяет проверить нашу логику обработки ответов до того, как у нас появится реальный ИШ + сертификат + доступ к TEST3.
  • Help-страница /admin/help/robot с полной документацией (коды ошибок M2M01-M2M09, тестовые наборы депозитариев, схема обмена).
  • Когда подключим реальный ИШ — переключение прозрачное, те же заявки пойдут на реальный TEST3.

REST-клиент ИШ НРД (готов на нашей стороне)

  • По свежей спецификации НРД (DOC/instr-ish-rest-api.pdf) реализован Go-клиент в internal/nsdadapter/igw:
    • POST /api/package/{channel}/file — отправка ZIP (Type=archive, File=base64)
    • GET /api/package/status/{id} — статус: NEW / SENT / ERROR
    • GET /api/package?channel=&type=M2MTD&... — список входящих от НРД
    • GET /api/package/{id} — скачать ZIP пакета (поддерживает и raw ZIP, и base64-в-JSON)
  • Упаковщик (pack.go): M2MTransferRequest → ZIP (XML + config.xml) по разделу 2.3 инструкции
  • Распаковщик: ZIP → DocXML + winf.xml + .sgn (отсоединённая подпись НРД)
  • Парсеры: ParseDecision, ParseResponse — из XML в Go-структуры через nsdxml.Unmarshal
  • Покрыто тестами: 10/10 PASS (httptest + zip round-trip + 4xx без ретраев + retry на 5xx)
  • Готов к переключению: как только получим живой ИШ от НРД, нужно только указать BaseURL и Channel в /admin/setup — код уже всё умеет

Полный пакет миграции на Astra Linux (новое — 14.05.2026, вечер)

Поскольку ИШ работает только на Astra Linux, инфраструктура мигрирует на эту ОС. Подготовлен набор скриптов для чистой установки с нуля в deploy/astra/:

  • install.sh — bash-установщик для свежей Astra Linux ВМ: проверка ОС, apt-зависимости, скачивание Go 1.24+, создание пользователя bj, клон репо, сборка bj-server, поднятие PostgreSQL в podman, накат миграций, systemd unit с безопасными ограничениями (NoNewPrivileges, ProtectSystem=strict, и т.п.), стартует сервис
  • install-validata.sh — установка СКЗИ Валидата CSP + АПК Валидата Клиент L через dpkg -i (когда придёт дистрибутив от НРД). С подсказкой текста письма-запроса, если дистрибутива ещё нет
  • install-ish.sh — установка ИШ через dpkg -i igate_*.deb (дистрибутив уже скачан в dist/ish/)
  • migrate-from-redos.sh — экспорт состояния со старой РЕД ОС ВМ: pg_dump БД, копия ~/.bj/setup.json, последние логи, метаинформация, тарбол /tmp/bj-migration-YYYY-MM-DD-HHMM.tar.gz для переноса на новую ВМ
  • healthcheck.sh — проверка состояния всех компонентов после установки: ОС, пользователь, бинарник, systemd, HTTP-эндпоинты, PostgreSQL, Валидата, ИШ, сетевые порты
  • README.md — пошаговая инструкция миграции (8 этапов), что НЕ переносится автоматически, как откатываться

Дистрибутив ИШ и полная документация (получены 14.05.2026)

По наводке от заказчика на странице https://www.nsd.ru/workflow/system/programs/web-service/ найдены и скачаны все официальные материалы:

  • Дистрибутив ИШ Linux: dist/ish/igate_100.0-765_amd64.deb (117 МБ, для Astra Linux)
  • Электронная подпись к дистрибутиву: dist/ish/igate_95.0-716_amd64.SGN
  • DOC/ruk_install_ish_2025_11_10.pdf (4.7 МБ) — Руководство по установке ИШ от 10.11.2025. Главное:
    • Поддерживаемые ОС: Windows 10/Server, Astra Linux SE 1.6/1.7 (РЕД ОС не упомянута)
    • СКЗИ: «Валидата CSP» + АПК «Валидата Клиент L» (НЕ КриптоПро)
    • БД: SQLite или PostgreSQL (PostgreSQL обязателен для REST API)
    • Только ГОСТ-криптография под Linux (RSA — только Windows)
    • Только сертификаты от УЦ МБ
  • DOC/ruk_pol_ish.pdf (3.5 МБ) — Руководство пользователя ИШ
  • DOC/QA_ish.pdf (2.5 МБ) — Q&A
  • DOC/test-case_ish.pdf (1.3 МБ) — Тест-кейсы для проверки работоспособности ИШ
  • DOC/instr_int_sh_01072025.pdf (0.4 МБ) — Инструкция по созданию заявки на тестирование
  • DOC/web_service_nrd_standard_soap_rest.pdf (2.2 МБ) — Техрекомендации Web-сервиса ONYX

dist/ish/.deb не коммитится в git (большой), но dist/ish/README.md содержит все ссылки на повторное скачивание.

Безопасность и надёжность

  • Баннер «🟡 РЕЖИМ ЭМУЛЯЦИИ» отображается на каждой странице админки пока не настроен ИШ или СКЗИ — оператор не сможет случайно принять mock-результат за реальный.
  • Контекстная навигация после действий (после POST возврат на ту же страницу, не в /admin/setup).
  • HTTP-клиенты для запросов на nsd.ru/cryptopro.ru идут напрямую (игнорируют корпоративный прокси), браузерный User-Agent для обхода антибот-фильтров.
  • systemd-unit deploy/systemd/bj-server.service с Environment=LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64, ProtectSystem=strict, NoNewPrivileges, и т.п.

Что в процессе и в очереди

Внешние блокеры (без них не двинемся к реальному НРД)

  1. Astra Linux ВМ для ИШ новый блокер

    • Дистрибутив ИШ — только igate_100.0-765_amd64.deb (под Astra Linux SE 1.6/1.7). РЕД ОС официально не поддерживается, RPM-версии нет.
    • Что нужно: поднять отдельную Astra Linux ВМ (10.10.10.23?) или попробовать запустить ИШ в Docker-контейнере с Astra-образом.
    • Альтернативы: Windows 10/Server (есть .exe-дистрибутив, но это шаг назад от Linux).
    • Срок: зависит от инфра-команды; ~1 день поднять ВМ + ~30 мин установить ИШ.
  2. СКЗИ «Валидата CSP» + АПК «Валидата Клиент L» новый блокер

    • ИШ требует именно Валидату, НЕ КриптоПро CSP (у нас стоит КриптоПро, придётся ставить параллельно или вместо).
    • Где взять: только по запросу — soed@nsd.ru (НРД) или pki@moex.com (МБ). Временная лицензия выдаётся.
    • Что нужно: отправить письмо с реквизитами организации и обоснованием (подключение к MOEX МОСТ M2M).
    • Срок: ~1-3 дня на ответ НРД.
  3. Сертификат подписи УЦ Московской Биржи (ca.moex.com)

    • Нужен для подписи отправляемых сообщений. Кладётся в Справочник сертификатов АПК Валидата Клиент L, экспортируется в системное хранилище.
    • Что нужно: оформить заявку в УЦ МБ от организации, получить сертификат + приватный ключ.
    • Срок: зависит от УЦ МБ.
  4. Заявка на тестирование в TEST3 НРД

    • Форма: https://www.nsd.ru/workflow/zayavka-na-testirovanie/
    • Инструкция: DOC/instr_int_sh_01072025.pdf
    • Получаем код депонента-тестера и доступ к контурам GUEST/TEST3.
  5. Сертификаты УЦ НРД (для проверки квитанций)

    • Где взять: https://www.nsd.ru/workflow/system/cryptography/ — сейчас отдаёт 404 на нашем дев-стенде (вероятно перенесено в ЛК НРД депонента).
    • В коде уже есть форма «Авто-загрузка сертификатов УЦ» в /admin/setup — как только получим прямые URL .cer, добавим их.
  6. Окно техработ TEST3: 18.05.2026 — 22.05.2026

    • Полевое тестирование в этот период невозможно. Реальные прогоны — до 18-го или после 22-го мая.
  7. Доступ к API реального ЛК ESIA Finance

    • Сейчас bj-server работает с встроенным эмулятором lk-emulator на :8083.
    • Что нужно: URL продакшен/тест ЛК, Basic-auth учётка.

Внутренние задачи (можем делать параллельно)

Задача Приоритет Эффект
Завершить сценарий 3333 робота — приёмная сторона bj-server (входящие M2MTransferRequest) средний Полное покрытие тестов с роботом
UI для импорта сертификата из контейнера КриптоПро (после копирования с флешки) низкий Сейчас делается вручную через certmgr
Уведомления: SMTP, Yandex Messenger, Telegram (плагины через единый интерфейс Notifier) средний (M3) Операторам — критичные события в мессенджеры
Расширение тестов: unit + интеграционные с mock-роботом, нагрузочные низкий Уверенность перед прод
Документация для команды Fansy (ETL): передача контракта, согласование SLA, прописывание IP в pg_hba.conf средний Запуск ETL-потока

Что после получения ИШ и сертификата (план первичного тестирования с роботом)

  1. День 0 (получили дистрибутив ИШ + сертификат + руководство)
    • Поставить ИШ на dev-ВМ.
    • Положить сертификат в ИШ-хранилище.
    • В bj-server: /admin/setup → ИШ профиль test3-gost, URL ИШ.
  2. День 1 (smoke-тест)
    • Отправить через bj-server заявку с ReceiverCode = MC0012500000, DocumentSeries = 2001, DocumentNumber = 111111 → ожидаем «принять все бумаги» от робота.
    • Проверить: квитанция от НРД, Decision от робота, callback в lk-emulator, статус в журнале → confirmed.
  3. День 2-3 (полное покрытие сценариев)
    • 1111 (отказ M2M01..M2M09) — все коды ошибок.
    • 2001 / 2002 — все депозитарии, все варианты частичного приёма.
    • 3333 — встречный перевод (когда доделаем приёмную сторону).
  4. День 4-5 (нагрузка)
    • 50-100 одновременных заявок, проверка очередей, БД, корректность статусов.
  5. День 6 (живой контрагент)
    • Согласовать с любым подключённым к НРД депозитарием тестовый обмен.
    • Это последний шаг перед присоединением к Правилам ЭДО НРД (продакшен).

Реалистичный срок от получения ИШ до готовности к продакшену: 2-3 недели (включая обкатку, fix багов, документацию).


Стоимостная сводка

Статья Сумма (руб) Статус
Лицензия КриптоПро CSP (сервер) ~30 000-50 000 Демо 3 мес. — активна
Лицензия КриптоПро CSP (рабочее место оператора, опц.) ~2 000-3 000 Не куплена
Рутокен ЭЦП 2.0 для оператора (железо, опц.) ~3 000-5 000 Не куплено
Сертификат УЦ МБ для организации по тарифам УЦ Не получен
Сэкономлено против КриптоПро JCP ~30 000-50 000 (отказ от Java-стека)

Ключевые архитектурные решения

  1. Один бинарник вместо микросервисов — рассчитано на наш объём (100-1000 сделок/день). Упрощает деплой, отладку, мониторинг. Все компоненты в одном процессе с понятными границами пакетов (internal/m2mcore, internal/nsdadapter, internal/lkgateway, ...).
  2. PKCS#11 как единый интерфейс к СКЗИ — позволяет менять провайдер (CSP/Рутокен/Валидата) без изменения кода bj-server.
  3. Двух-уровневая БД (fansy.* для входных данных, m2m_core.* для журнала сделок) — позволяет команде Fansy писать в свою схему без знания о нашем pipeline.
  4. Mock-робот внутри bj-server — даёт возможность работать без живого НРД для значительной части интеграционного тестирования.
  5. «Дружественный» UI — установка/настройка не требует SSH-доступа: всё через веб (КриптоПро, лицензии, сертификаты, контейнеры с флешки).

Готов к интеграционному тестированию с роботом на TEST3: да, как только будет ИШ + сертификат. Готов к продакшену: ориентировочно через 3-4 недели после получения всех внешних компонентов.

— Команда разработки Bridge-and-Join-s