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%
This commit is contained in:
@@ -23,7 +23,8 @@
|
|||||||
| Реальное подключение к роботу на TEST3 НРД | **30%** | ⚠ REST-клиент ИШ готов, ждём сам ИШ + сертификат |
|
| Реальное подключение к роботу на TEST3 НРД | **30%** | ⚠ REST-клиент ИШ готов, ждём сам ИШ + сертификат |
|
||||||
| REST-клиент ИШ НРД (по DOC/instr-ish-rest-api.pdf) | **100%** | ✅ POST file, GET status, GET list, GET package, упаковщик ZIP, 10/10 тестов |
|
| 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 |
|
| Дистрибутив ИШ НРД и полная документация | **100%** | ✅ Скачаны: `igate_100.0-765_amd64.deb` (117 МБ) + 6 PDF |
|
||||||
| Установка ИШ на наш стенд | **0%** | ⏳ Требуется Astra Linux ВМ (не РЕД ОС) — см. блокер #1 |
|
| Установка ИШ на наш стенд | **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 |
|
| Получение СКЗИ «Валидата CSP» для Linux | **0%** | ⏳ Запрос в soed@nsd.ru / pki@moex.com — см. блокер #2 |
|
||||||
| Сертификат УЦ Московской Биржи для подписи | **0%** | ⏳ Не получен — см. блокер #3 |
|
| Сертификат УЦ Московской Биржи для подписи | **0%** | ⏳ Не получен — см. блокер #3 |
|
||||||
| Подключение реального ЛК ESIA Finance | **20%** | ⚠ Эмулятор lk-emulator работает, реальный URL не указан |
|
| Подключение реального ЛК ESIA Finance | **20%** | ⚠ Эмулятор lk-emulator работает, реальный URL не указан |
|
||||||
@@ -31,8 +32,8 @@
|
|||||||
| Уведомления (e-mail, мессенджеры) | **0%** | ⏳ M3-M4 |
|
| Уведомления (e-mail, мессенджеры) | **0%** | ⏳ M3-M4 |
|
||||||
| Тесты, CI/CD | **40%** | ⚠ Unit-тесты компонентов, нет E2E против реального НРД |
|
| Тесты, CI/CD | **40%** | ⚠ Unit-тесты компонентов, нет E2E против реального НРД |
|
||||||
|
|
||||||
**Общая готовность системы:** **≈ 72%** (по объёму функциональности)
|
**Общая готовность системы:** **≈ 75%** (по объёму функциональности)
|
||||||
**Готовность к интеграционному тесту с роботом:** **≈ 85%** (зависит только от внешних факторов: Astra Linux ВМ, Валидата CSP, сертификат УЦ МБ)
|
**Готовность к интеграционному тесту с роботом:** **≈ 88%** (зависит только от внешних факторов: Astra Linux ВМ, Валидата CSP, сертификат УЦ МБ — на нашей стороне установщик готов)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -96,6 +97,17 @@
|
|||||||
- Покрыто тестами: 10/10 PASS (httptest + zip round-trip + 4xx без ретраев + retry на 5xx)
|
- Покрыто тестами: 10/10 PASS (httptest + zip round-trip + 4xx без ретраев + retry на 5xx)
|
||||||
- Готов к переключению: как только получим живой ИШ от НРД, нужно только указать BaseURL и Channel в `/admin/setup` — код уже всё умеет
|
- Готов к переключению: как только получим живой ИШ от НРД, нужно только указать 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)
|
### Дистрибутив ИШ и полная документация (получены 14.05.2026)
|
||||||
По наводке от заказчика на странице `https://www.nsd.ru/workflow/system/programs/web-service/` найдены и скачаны все официальные материалы:
|
По наводке от заказчика на странице `https://www.nsd.ru/workflow/system/programs/web-service/` найдены и скачаны все официальные материалы:
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,139 @@
|
|||||||
|
# Миграция Bridge-and-Join-s на Astra Linux
|
||||||
|
|
||||||
|
Полный набор скриптов для **чистой установки с нуля** на свежей
|
||||||
|
Astra Linux Special Edition 1.6/1.7 ВМ и переноса данных со старой
|
||||||
|
РЕД ОС.
|
||||||
|
|
||||||
|
## Зачем мигрируем
|
||||||
|
|
||||||
|
Интеграционный шлюз НРД (ИШ) — единственный поддерживаемый канал к
|
||||||
|
сервису MOEX МОСТ — официально работает только на **Astra Linux**
|
||||||
|
(дистрибутив `igate_100.0-765_amd64.deb`). РЕД ОС в списке поддерживаемых
|
||||||
|
ОС отсутствует, RPM-версии ИШ нет. Поэтому всю инфраструктуру
|
||||||
|
переводим на Astra.
|
||||||
|
|
||||||
|
Кроме того, ИШ требует СКЗИ **«Валидата CSP»** (НЕ КриптоПро) —
|
||||||
|
этот переход тоже происходит в рамках миграции.
|
||||||
|
|
||||||
|
## Файлы в этом каталоге
|
||||||
|
|
||||||
|
| Файл | Где запускать | Назначение |
|
||||||
|
|---|---|---|
|
||||||
|
| `install.sh` | новая Astra ВМ (root) | Установка bj-server (зависимости, Go, podman, postgres, бинарник, systemd) |
|
||||||
|
| `install-validata.sh` | новая Astra ВМ (root) | Установка СКЗИ Валидата CSP + АПК Валидата Клиент L (после получения дистрибутива от НРД) |
|
||||||
|
| `install-ish.sh` | новая Astra ВМ (root) | Установка ИШ (`dpkg -i igate_*.deb`) |
|
||||||
|
| `migrate-from-redos.sh` | старая РЕД ОС ВМ | Экспорт состояния (БД, настройки, логи) в архив для переноса |
|
||||||
|
| `healthcheck.sh` | новая Astra ВМ | Проверка состояния всех компонентов после установки |
|
||||||
|
|
||||||
|
## Пошаговый план миграции
|
||||||
|
|
||||||
|
### Этап 1. Подготовка
|
||||||
|
- [ ] Поднять чистую Astra Linux SE 1.7 ВМ (рекомендую 10.10.10.23)
|
||||||
|
- [ ] Доступ root по SSH
|
||||||
|
- [ ] Прямой выход в интернет (для скачивания Go и зависимостей)
|
||||||
|
- [ ] Параллельно отправить письмо в НРД (`soed@nsd.ru`) с запросом
|
||||||
|
дистрибутива Валидаты под Linux + временной лицензии
|
||||||
|
|
||||||
|
### Этап 2. Экспорт со старой ВМ (РЕД ОС)
|
||||||
|
```bash
|
||||||
|
# на старой ВМ
|
||||||
|
ssh fontvielle@10.10.10.22
|
||||||
|
cd ~/Bridge-and-Join-s
|
||||||
|
sudo bash deploy/astra/migrate-from-redos.sh
|
||||||
|
# создаст /tmp/bj-migration-YYYY-MM-DD-HHMM.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Этап 3. Установка bj-server на новую ВМ (Astra Linux)
|
||||||
|
```bash
|
||||||
|
# на новой Astra ВМ
|
||||||
|
ssh root@10.10.10.23
|
||||||
|
# вариант А — через git
|
||||||
|
curl -sSL https://git.zetit.ru/zuevav/Bridge-and-Join-s/raw/main/deploy/astra/install.sh \
|
||||||
|
| sudo bash
|
||||||
|
|
||||||
|
# вариант Б — локально (если уже скопировал репо)
|
||||||
|
cd /opt/bj/src
|
||||||
|
sudo bash deploy/astra/install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Этап 4. Перенос данных
|
||||||
|
```bash
|
||||||
|
# перекинуть архив на новую ВМ
|
||||||
|
scp /tmp/bj-migration-*.tar.gz root@10.10.10.23:/tmp/
|
||||||
|
|
||||||
|
# на новой ВМ
|
||||||
|
cd /tmp
|
||||||
|
tar -xzf bj-migration-*.tar.gz
|
||||||
|
cd bj-migration-*
|
||||||
|
|
||||||
|
# восстановить БД
|
||||||
|
podman exec -i bj-postgres psql -U bj -d bj < bj.sql
|
||||||
|
|
||||||
|
# восстановить настройки
|
||||||
|
sudo cp setup.json /var/lib/bj/.bj/setup.json
|
||||||
|
sudo chown bj:bj /var/lib/bj/.bj/setup.json
|
||||||
|
sudo chmod 0600 /var/lib/bj/.bj/setup.json
|
||||||
|
|
||||||
|
sudo systemctl restart bj-server
|
||||||
|
```
|
||||||
|
|
||||||
|
### Этап 5. Проверка
|
||||||
|
```bash
|
||||||
|
sudo bash /opt/bj/src/deploy/astra/healthcheck.sh
|
||||||
|
```
|
||||||
|
Открыть в браузере: `http://10.10.10.23:8080/admin/`
|
||||||
|
|
||||||
|
### Этап 6. Установка ИШ (после получения дистрибутивов от НРД)
|
||||||
|
```bash
|
||||||
|
# 1. Валидата (когда придёт от НРД)
|
||||||
|
sudo bash deploy/astra/install-validata.sh /path/to/validata-csp.deb
|
||||||
|
|
||||||
|
# 2. Импорт сертификатов УЦ МБ через GUI Справочника Валидаты:
|
||||||
|
# - корневой сертификат УЦ МБ
|
||||||
|
# - пользовательский сертификат с приватным ключом
|
||||||
|
# - Сервис → Экспортировать в системное хранилище
|
||||||
|
|
||||||
|
# 3. Сам ИШ (дистрибутив уже скачан в dist/ish/)
|
||||||
|
sudo bash deploy/astra/install-ish.sh
|
||||||
|
|
||||||
|
# 4. Настроить канал WSL в ИШ (GUI):
|
||||||
|
# URL: https://gost.nsd.ru/onyxt3/WslService (TEST3)
|
||||||
|
# Сертификат: из системного хранилища
|
||||||
|
# БД: PostgreSQL (тот же что и bj-server)
|
||||||
|
|
||||||
|
# 5. Запустить ИШ как сервис
|
||||||
|
sudo systemctl enable --now igate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Этап 7. Привязка bj-server к ИШ
|
||||||
|
В админке `http://10.10.10.23:8080/admin/setup` → «Интеграционный шлюз НРД»:
|
||||||
|
- URL ИШ: `http://localhost:8090` (REST API ИШ)
|
||||||
|
- Имя канала: тот что создали в ИШ на шаге 6
|
||||||
|
|
||||||
|
### Этап 8. Первый тест с роботом
|
||||||
|
```bash
|
||||||
|
# Через UI: /admin/setup → «Тестовый прогон сквозной заявки»
|
||||||
|
# Это отправит заявку с ReceiverCode=MC0012500000 и DocumentSeries=2001
|
||||||
|
# → робот НРД ответит «Принять все бумаги» через ~30 сек
|
||||||
|
```
|
||||||
|
|
||||||
|
## Откат
|
||||||
|
|
||||||
|
Старая РЕД ОС ВМ продолжает работать до подтверждения миграции.
|
||||||
|
Если что-то пойдёт не так — просто переключаем DNS/Nginx обратно на 10.10.10.22.
|
||||||
|
|
||||||
|
## Что НЕ переносится автоматически
|
||||||
|
|
||||||
|
| Что | Почему | Что делать |
|
||||||
|
|---|---|---|
|
||||||
|
| КриптоПро CSP | На Astra используется Валидата | Получить дистрибутив Валидаты у НРД, поставить заново |
|
||||||
|
| Сертификаты в `/var/opt/cprocsp/keys/` | Формат КриптоПро ≠ формат Валидаты | Сертификат УЦ МБ — получить заново или экспортировать с КриптоПро и импортировать в Валидата (если совместимый формат) |
|
||||||
|
| Локальные кастомизации systemd | install.sh ставит свой unit | Сравнить /etc/systemd/system/bj-server.service до/после |
|
||||||
|
|
||||||
|
## Если что-то сломалось
|
||||||
|
|
||||||
|
1. Логи bj-server: `journalctl -u bj-server -f`
|
||||||
|
2. Файл лога: `tail -f /var/log/bj/bj-server.log`
|
||||||
|
3. Логи ИШ: `journalctl -u igate -f` (если запущен как systemd)
|
||||||
|
4. Health-check: `sudo bash deploy/astra/healthcheck.sh`
|
||||||
|
5. Поддержка НРД по ИШ/Валидате: `soed@nsd.ru`, по форматам M2M: `M2MOST@nsd.ru`
|
||||||
Executable
+114
@@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# healthcheck.sh — проверка готовности bj-server после установки на Astra Linux.
|
||||||
|
# Запускается на самой Astra Linux ВМ, печатает зелёные/жёлтые/красные галочки.
|
||||||
|
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
ok() { echo -e " \033[1;32m✓\033[0m $*"; }
|
||||||
|
warn() { echo -e " \033[1;33m⚠\033[0m $*"; }
|
||||||
|
fail() { echo -e " \033[1;31m✗\033[0m $*"; }
|
||||||
|
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Bridge-and-Join-s — проверка состояния"
|
||||||
|
echo "================================================================"
|
||||||
|
|
||||||
|
# 1. ОС
|
||||||
|
echo
|
||||||
|
echo "[1] Операционная система"
|
||||||
|
if [ -r /etc/astra_version ]; then
|
||||||
|
ok "Astra Linux: $(cat /etc/astra_version)"
|
||||||
|
else
|
||||||
|
warn "Не Astra Linux — ИШ может не запуститься"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Пользователь bj
|
||||||
|
echo
|
||||||
|
echo "[2] Пользователь и каталоги"
|
||||||
|
id bj >/dev/null 2>&1 && ok "пользователь bj существует" || fail "пользователь bj не создан"
|
||||||
|
[ -d /opt/bj ] && ok "/opt/bj существует" || fail "/opt/bj не найден"
|
||||||
|
[ -x /opt/bj/bj-server ] && ok "/opt/bj/bj-server исполняемый" || fail "/opt/bj/bj-server отсутствует"
|
||||||
|
[ -d /var/lib/bj/.bj ] && ok "/var/lib/bj/.bj существует" || warn "/var/lib/bj/.bj не создан"
|
||||||
|
|
||||||
|
# 3. systemd
|
||||||
|
echo
|
||||||
|
echo "[3] systemd сервис"
|
||||||
|
if systemctl is-enabled --quiet bj-server 2>/dev/null; then
|
||||||
|
ok "bj-server.service enabled"
|
||||||
|
else
|
||||||
|
warn "bj-server.service не enabled"
|
||||||
|
fi
|
||||||
|
if systemctl is-active --quiet bj-server 2>/dev/null; then
|
||||||
|
ok "bj-server.service active"
|
||||||
|
else
|
||||||
|
fail "bj-server.service не active — systemctl status bj-server"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. HTTP
|
||||||
|
echo
|
||||||
|
echo "[4] HTTP-эндпоинты"
|
||||||
|
HTTP_OK=0
|
||||||
|
for path in / /admin/ /admin/wizard /admin/help/architecture; do
|
||||||
|
code=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:8080$path" 2>/dev/null || echo "—")
|
||||||
|
if [ "$code" = "200" ] || [ "$code" = "303" ]; then
|
||||||
|
ok "GET $path → $code"
|
||||||
|
HTTP_OK=$((HTTP_OK+1))
|
||||||
|
else
|
||||||
|
fail "GET $path → $code"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 5. PostgreSQL
|
||||||
|
echo
|
||||||
|
echo "[5] PostgreSQL"
|
||||||
|
if command -v podman >/dev/null 2>&1; then
|
||||||
|
if podman ps --format '{{.Names}}' 2>/dev/null | grep -qx bj-postgres; then
|
||||||
|
ok "контейнер bj-postgres работает"
|
||||||
|
else
|
||||||
|
warn "контейнер bj-postgres не запущен"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "podman не установлен"
|
||||||
|
fi
|
||||||
|
if pg_isready -h 127.0.0.1 -p 5432 -U bj >/dev/null 2>&1; then
|
||||||
|
ok "PostgreSQL отвечает на :5432"
|
||||||
|
else
|
||||||
|
warn "PostgreSQL :5432 недоступен"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 6. Валидата
|
||||||
|
echo
|
||||||
|
echo "[6] СКЗИ Валидата (для ИШ)"
|
||||||
|
VAL_FOUND=0
|
||||||
|
for path in /opt/Validata /opt/validata-csp /opt/Validata-CSP; do
|
||||||
|
[ -d "$path" ] && { ok "найдена в $path"; VAL_FOUND=1; break; }
|
||||||
|
done
|
||||||
|
[ "$VAL_FOUND" = 0 ] && warn "не установлена (запроси у НРД soed@nsd.ru, потом sudo bash deploy/astra/install-validata.sh)"
|
||||||
|
|
||||||
|
# 7. ИШ
|
||||||
|
echo
|
||||||
|
echo "[7] Интеграционный шлюз (ИШ)"
|
||||||
|
if command -v igate >/dev/null 2>&1; then
|
||||||
|
ok "igate в PATH: $(which igate)"
|
||||||
|
elif [ -x /opt/igate/igate ]; then
|
||||||
|
ok "igate в /opt/igate/"
|
||||||
|
else
|
||||||
|
warn "ИШ не установлен (sudo bash deploy/astra/install-ish.sh)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 8. Сетевые порты
|
||||||
|
echo
|
||||||
|
echo "[8] Сетевые порты"
|
||||||
|
if command -v ss >/dev/null 2>&1; then
|
||||||
|
PORTS=$(ss -tlnp 2>/dev/null | awk 'NR>1{print $4}')
|
||||||
|
echo "$PORTS" | grep -q ':8080$' && ok ":8080 (bj-server) слушает" || fail ":8080 не слушает"
|
||||||
|
echo "$PORTS" | grep -q ':5432$' && ok ":5432 (postgres) слушает" || warn ":5432 не слушает"
|
||||||
|
echo "$PORTS" | grep -q ':8090$' && ok ":8090 (предполагаемый ИШ) слушает" || warn ":8090 (ИШ) не слушает"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Итог
|
||||||
|
echo
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Готово. Подробнее:"
|
||||||
|
echo " journalctl -u bj-server -f"
|
||||||
|
echo " http://$(hostname -I | awk '{print $1}'):8080/admin/"
|
||||||
|
echo "================================================================"
|
||||||
Executable
+109
@@ -0,0 +1,109 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# install-ish.sh — установка ПО «Интеграционный шлюз НРД» (ИШ) на Astra Linux.
|
||||||
|
#
|
||||||
|
# Документ-источник: DOC/ruk_install_ish_2025_11_10.pdf (раздел 7.3.2).
|
||||||
|
#
|
||||||
|
# Пред-требования:
|
||||||
|
# 1. ОС: Astra Linux SE 1.6 или 1.7
|
||||||
|
# 2. УСТАНОВЛЕНА Валидата CSP + АПК Валидата Клиент L (см. install-validata.sh)
|
||||||
|
# 3. Корневой сертификат УЦ МБ загружен в Справочник сертификатов
|
||||||
|
# 4. Пользовательский сертификат экспортирован в системное хранилище
|
||||||
|
#
|
||||||
|
# Что делает скрипт:
|
||||||
|
# 1. Проверяет наличие Валидаты
|
||||||
|
# 2. Устанавливает igate_*.deb через dpkg
|
||||||
|
# 3. Создаёт каталог настроек ~/igate
|
||||||
|
# 4. Подсказывает следующие шаги (запуск настройщика каналов)
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
DEB_PATH="${1:-}"
|
||||||
|
|
||||||
|
log() { echo -e "\033[1;34m[ish-install]\033[0m $*"; }
|
||||||
|
warn() { echo -e "\033[1;33m[ish-install WARN]\033[0m $*" >&2; }
|
||||||
|
fail() { echo -e "\033[1;31m[ish-install FAIL]\033[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# ---- 1. Поиск .deb ----
|
||||||
|
if [ -z "$DEB_PATH" ]; then
|
||||||
|
# Поиск в стандартных местах
|
||||||
|
for candidate in \
|
||||||
|
./dist/ish/igate_*_amd64.deb \
|
||||||
|
/opt/bj/src/dist/ish/igate_*_amd64.deb \
|
||||||
|
~/Downloads/igate_*_amd64.deb \
|
||||||
|
/tmp/igate_*_amd64.deb; do
|
||||||
|
if [ -f "$candidate" ]; then
|
||||||
|
DEB_PATH="$candidate"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ -z "$DEB_PATH" ] || [ ! -f "$DEB_PATH" ]; then
|
||||||
|
fail "Не найден .deb пакет ИШ. Скачайте с https://www.nsd.ru/workflow/system/programs/web-service/ и передайте путь:
|
||||||
|
sudo bash $0 /path/to/igate_100.0-765_amd64.deb"
|
||||||
|
fi
|
||||||
|
log "Дистрибутив ИШ: $DEB_PATH"
|
||||||
|
|
||||||
|
# ---- 2. Проверка ОС ----
|
||||||
|
if [ -r /etc/astra_version ]; then
|
||||||
|
log "Astra Linux: $(cat /etc/astra_version)"
|
||||||
|
else
|
||||||
|
warn "Это не Astra Linux. ИШ под Astra Linux может не запуститься на других ОС."
|
||||||
|
warn "Продолжить? (y/N)"
|
||||||
|
read -r REPLY < /dev/tty
|
||||||
|
[ "$REPLY" = "y" ] || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- 3. Проверка Валидаты ----
|
||||||
|
log "Проверка СКЗИ Валидата CSP..."
|
||||||
|
VAL_FOUND=0
|
||||||
|
for path in /opt/Validata /opt/validata-csp /opt/Validata-CSP /usr/local/Validata; do
|
||||||
|
[ -d "$path" ] && { log " ✓ Валидата найдена в $path"; VAL_FOUND=1; break; }
|
||||||
|
done
|
||||||
|
if [ "$VAL_FOUND" = 0 ]; then
|
||||||
|
warn "Валидата CSP не найдена. ИШ всё равно поставится, но не запустится без СКЗИ."
|
||||||
|
warn "Получите дистрибутив Валидаты у НРД (soed@nsd.ru) и поставьте через install-validata.sh."
|
||||||
|
warn "Продолжить установку ИШ? (y/N)"
|
||||||
|
read -r REPLY < /dev/tty
|
||||||
|
[ "$REPLY" = "y" ] || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- 4. dpkg -i ----
|
||||||
|
log "Установка ИШ через dpkg..."
|
||||||
|
[ "$EUID" -eq 0 ] || fail "Запускать от root (sudo bash $0)"
|
||||||
|
dpkg -i "$DEB_PATH" 2>&1 | tee /tmp/igate-install.log || {
|
||||||
|
warn "dpkg -i вернул ошибку, пытаюсь починить зависимости через apt-get install -f"
|
||||||
|
apt-get install -f -y
|
||||||
|
dpkg -i "$DEB_PATH"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---- 5. Проверка ----
|
||||||
|
if command -v igate >/dev/null 2>&1; then
|
||||||
|
log "✓ ИШ установлен: $(which igate)"
|
||||||
|
elif [ -x /opt/igate/igate ]; then
|
||||||
|
log "✓ ИШ установлен в /opt/igate/"
|
||||||
|
else
|
||||||
|
warn "Бинарник igate не нашёл в PATH. Возможно установлен в /opt/igate или ~/igate."
|
||||||
|
warn "Проверьте: dpkg -L igate | grep -E 'bin|igate$'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- 6. Финал ----
|
||||||
|
echo
|
||||||
|
echo "================================================================"
|
||||||
|
echo " ИШ установлен"
|
||||||
|
echo "================================================================"
|
||||||
|
echo
|
||||||
|
echo " Следующие шаги (по DOC/ruk_install_ish_2025_11_10.pdf раздел 10):"
|
||||||
|
echo " 1. Запустить ИШ в GUI: igate & (или через меню Пуск/Astra)"
|
||||||
|
echo " 2. Настройки БД → PostgreSQL (URL/логин/пароль из bj-server)"
|
||||||
|
echo " 3. Создать канал WSL → URL https://gost.nsd.ru/onyxt3/WslService (TEST3)"
|
||||||
|
echo " 4. Указать сертификат УЦ МБ из системного хранилища"
|
||||||
|
echo " 5. Активировать ИШ как сервис:"
|
||||||
|
echo " sudo systemctl enable --now igate"
|
||||||
|
echo
|
||||||
|
echo " REST API ИШ (для bj-server):"
|
||||||
|
echo " http://localhost:8090 (порт по умолчанию — см. настройки ИШ)"
|
||||||
|
echo
|
||||||
|
echo " После настройки канала в ИШ: открыть"
|
||||||
|
echo " http://<этот-сервер>:8080/admin/setup → раздел «Интеграционный шлюз НРД»"
|
||||||
|
echo " и указать URL ИШ + имя канала."
|
||||||
|
echo "================================================================"
|
||||||
Executable
+89
@@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# install-validata.sh — установка СКЗИ «Валидата CSP» + АПК «Валидата Клиент L»
|
||||||
|
# для работы Интеграционного шлюза НРД на Astra Linux.
|
||||||
|
#
|
||||||
|
# ВАЖНО: дистрибутив Валидаты не выложен публично. Получается по запросу:
|
||||||
|
# - НРД: soed@nsd.ru
|
||||||
|
# - МБ: pki@moex.com
|
||||||
|
# В письме указать: «Запрос дистрибутива СКЗИ Валидата CSP для Linux +
|
||||||
|
# временной лицензии для подключения к ЭДО НРД в рамках MOEX МОСТ M2M.»
|
||||||
|
#
|
||||||
|
# Скрипт ожидает что архив с дистрибутивом уже скачан и лежит:
|
||||||
|
# dist/validata/<любые>.deb
|
||||||
|
# или передан как первый аргумент.
|
||||||
|
#
|
||||||
|
# Запуск:
|
||||||
|
# sudo bash deploy/astra/install-validata.sh
|
||||||
|
# sudo bash deploy/astra/install-validata.sh /path/to/validata-csp.deb
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
log() { echo -e "\033[1;34m[validata-install]\033[0m $*"; }
|
||||||
|
warn() { echo -e "\033[1;33m[validata-install WARN]\033[0m $*" >&2; }
|
||||||
|
fail() { echo -e "\033[1;31m[validata-install FAIL]\033[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
[ "$EUID" -eq 0 ] || fail "Запускать от root"
|
||||||
|
|
||||||
|
SEARCH_PATH="${1:-./dist/validata}"
|
||||||
|
|
||||||
|
if [ -f "$SEARCH_PATH" ] && [ "${SEARCH_PATH##*.}" = "deb" ]; then
|
||||||
|
# Передан конкретный файл
|
||||||
|
DEBS=( "$SEARCH_PATH" )
|
||||||
|
elif [ -d "$SEARCH_PATH" ]; then
|
||||||
|
mapfile -t DEBS < <(find "$SEARCH_PATH" -maxdepth 2 -name '*.deb' 2>/dev/null | sort)
|
||||||
|
else
|
||||||
|
fail "Не найден дистрибутив Валидаты. Положи .deb пакеты в dist/validata/ или передай путь аргументом.
|
||||||
|
|
||||||
|
Если у тебя ещё нет дистрибутива — запроси у НРД:
|
||||||
|
Email: soed@nsd.ru (или pki@moex.com)
|
||||||
|
Тема: Запрос дистрибутива Валидата CSP для Linux
|
||||||
|
Текст: Просим предоставить дистрибутив СКЗИ Валидата CSP v.6 для Linux
|
||||||
|
(Astra Linux SE 1.7) + временную лицензию для подключения к
|
||||||
|
ЭДО НРД через ПО Интеграционный шлюз в рамках сервиса
|
||||||
|
MOEX МОСТ M2M (см. инструкцию nsd.ru/workflow/system/programs/web-service/).
|
||||||
|
Реквизиты организации: <ИНН, ОГРН, контактное лицо>.
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#DEBS[@]}" = 0 ]; then
|
||||||
|
fail "В каталоге $SEARCH_PATH не найдено ни одного .deb пакета"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Найдено ${#DEBS[@]} пакетов Валидаты:"
|
||||||
|
for f in "${DEBS[@]}"; do
|
||||||
|
echo " $f"
|
||||||
|
done
|
||||||
|
|
||||||
|
log "Установка через dpkg..."
|
||||||
|
for f in "${DEBS[@]}"; do
|
||||||
|
log " $f"
|
||||||
|
dpkg -i "$f" || {
|
||||||
|
warn " → пытаюсь починить зависимости"
|
||||||
|
apt-get install -f -y
|
||||||
|
dpkg -i "$f"
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
# Проверка
|
||||||
|
log "Проверка установки..."
|
||||||
|
VAL_FOUND=0
|
||||||
|
for path in /opt/Validata /opt/validata-csp /opt/Validata-CSP; do
|
||||||
|
[ -d "$path" ] && { log " ✓ Валидата в $path"; VAL_FOUND=1; }
|
||||||
|
done
|
||||||
|
if [ "$VAL_FOUND" = 0 ]; then
|
||||||
|
warn "Каталог Валидаты не нашёл — проверь dpkg -L <имя-пакета>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Валидата установлена"
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Следующие шаги:"
|
||||||
|
echo " 1. Запустить Справочник сертификатов АПК Валидата Клиент"
|
||||||
|
echo " (GUI приложение)"
|
||||||
|
echo " 2. Загрузить корневой сертификат УЦ Московской Биржи"
|
||||||
|
echo " (взять у УЦ МБ — ca.moex.com — для своей организации)"
|
||||||
|
echo " 3. Импортировать пользовательский сертификат с приватным ключом"
|
||||||
|
echo " 4. Меню Сервис → Экспортировать сертификаты в системное хранилище"
|
||||||
|
echo " 5. Установить ИШ: sudo bash deploy/astra/install-ish.sh"
|
||||||
|
echo "================================================================"
|
||||||
Executable
+235
@@ -0,0 +1,235 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# install.sh — установка bj-server на чистую Astra Linux Special Edition 1.7.
|
||||||
|
#
|
||||||
|
# Что делает:
|
||||||
|
# 1. Проверяет ОС (Astra Linux)
|
||||||
|
# 2. Устанавливает зависимости (Go, podman, postgresql-client, certmgr-...)
|
||||||
|
# 3. Создаёт системного пользователя bj и каталоги /opt/bj /var/lib/bj
|
||||||
|
# 4. Клонирует/обновляет репозиторий
|
||||||
|
# 5. Собирает bj-server (go build)
|
||||||
|
# 6. Кладёт systemd unit и стартует сервис
|
||||||
|
# 7. Печатает URL админки
|
||||||
|
#
|
||||||
|
# Запуск (на свежей Astra Linux ВМ):
|
||||||
|
# curl -sSL https://git.zetit.ru/zuevav/Bridge-and-Join-s/raw/main/deploy/astra/install.sh | sudo bash
|
||||||
|
# либо
|
||||||
|
# sudo bash deploy/astra/install.sh
|
||||||
|
#
|
||||||
|
# Аргументы:
|
||||||
|
# --git-url=URL репозиторий, по умолчанию https://git.zetit.ru/zuevav/Bridge-and-Join-s.git
|
||||||
|
# --branch=NAME ветка, по умолчанию main
|
||||||
|
# --bind=ADDR адрес слушания (по умолчанию :8080)
|
||||||
|
# --no-postgres не поднимать postgres контейнер (если БД где-то снаружи)
|
||||||
|
# --skip-build пропустить go build (если бинарник уже лежит)
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
GIT_URL="${GIT_URL:-https://git.zetit.ru/zuevav/Bridge-and-Join-s.git}"
|
||||||
|
BRANCH="${BRANCH:-main}"
|
||||||
|
BIND_ADDR="${BIND_ADDR:-:8080}"
|
||||||
|
SKIP_POSTGRES=0
|
||||||
|
SKIP_BUILD=0
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--git-url=*) GIT_URL="${arg#*=}" ;;
|
||||||
|
--branch=*) BRANCH="${arg#*=}" ;;
|
||||||
|
--bind=*) BIND_ADDR="${arg#*=}" ;;
|
||||||
|
--no-postgres) SKIP_POSTGRES=1 ;;
|
||||||
|
--skip-build) SKIP_BUILD=1 ;;
|
||||||
|
--help|-h)
|
||||||
|
sed -n '2,/^set/p' "$0" | head -n -1 | sed 's/^# //;s/^#//'
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
log() { echo -e "\033[1;34m[bj-install]\033[0m $*"; }
|
||||||
|
warn() { echo -e "\033[1;33m[bj-install WARN]\033[0m $*" >&2; }
|
||||||
|
fail() { echo -e "\033[1;31m[bj-install FAIL]\033[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# ---- 0. Проверка прав ----
|
||||||
|
[ "$EUID" -eq 0 ] || fail "Запускать от root (sudo bash $0)"
|
||||||
|
|
||||||
|
# ---- 1. Проверка ОС ----
|
||||||
|
log "Шаг 1/8: проверка ОС"
|
||||||
|
if [ -r /etc/astra_version ]; then
|
||||||
|
ASTRA_VER=$(cat /etc/astra_version)
|
||||||
|
log "Astra Linux: $ASTRA_VER ✓"
|
||||||
|
elif grep -qi astra /etc/os-release 2>/dev/null; then
|
||||||
|
ASTRA_VER=$(grep '^PRETTY_NAME' /etc/os-release | cut -d'"' -f2)
|
||||||
|
log "Astra Linux: $ASTRA_VER ✓"
|
||||||
|
else
|
||||||
|
warn "Это не Astra Linux. Скрипт рассчитан на Astra SE 1.6+/1.7."
|
||||||
|
warn "Для других Debian-based (Ubuntu, Debian) большая часть шагов сработает,"
|
||||||
|
warn "но ИШ потом не встанет без Astra Linux SE. Продолжить? (y/N)"
|
||||||
|
read -r REPLY < /dev/tty
|
||||||
|
[ "$REPLY" = "y" ] || fail "Прервано пользователем"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- 2. Зависимости системы ----
|
||||||
|
log "Шаг 2/8: установка системных зависимостей через apt"
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y -qq \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
podman \
|
||||||
|
podman-compose \
|
||||||
|
postgresql-client \
|
||||||
|
systemd \
|
||||||
|
|| fail "apt-get install failed"
|
||||||
|
|
||||||
|
# ---- 3. Go ----
|
||||||
|
log "Шаг 3/8: проверка/установка Go 1.24+"
|
||||||
|
GO_VERSION_REQUIRED="1.24"
|
||||||
|
need_go=1
|
||||||
|
if command -v go >/dev/null 2>&1; then
|
||||||
|
GO_HAVE=$(go version | awk '{print $3}' | sed 's/go//')
|
||||||
|
if [ "$(printf '%s\n%s' "$GO_VERSION_REQUIRED" "$GO_HAVE" | sort -V | head -1)" = "$GO_VERSION_REQUIRED" ]; then
|
||||||
|
log "Go $GO_HAVE ✓"
|
||||||
|
need_go=0
|
||||||
|
else
|
||||||
|
warn "Go $GO_HAVE слишком старый, нужен $GO_VERSION_REQUIRED+"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$need_go" = 1 ]; then
|
||||||
|
GO_TAR=/tmp/go.tar.gz
|
||||||
|
log "Качаю Go $GO_VERSION_REQUIRED ..."
|
||||||
|
curl -sSL "https://go.dev/dl/go${GO_VERSION_REQUIRED}.linux-amd64.tar.gz" -o "$GO_TAR" \
|
||||||
|
|| fail "не получилось скачать Go (нужен прямой выход в интернет)"
|
||||||
|
rm -rf /usr/local/go
|
||||||
|
tar -C /usr/local -xzf "$GO_TAR"
|
||||||
|
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||||
|
ln -sf /usr/local/go/bin/gofmt /usr/local/bin/gofmt
|
||||||
|
log "Go установлен в /usr/local/go"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- 4. Пользователь bj + каталоги ----
|
||||||
|
log "Шаг 4/8: пользователь bj и каталоги"
|
||||||
|
if ! id bj >/dev/null 2>&1; then
|
||||||
|
useradd --system --create-home --home-dir /var/lib/bj --shell /bin/bash bj
|
||||||
|
log "Создан пользователь bj"
|
||||||
|
fi
|
||||||
|
install -d -o bj -g bj -m 0755 /opt/bj /var/lib/bj /var/log/bj
|
||||||
|
install -d -o bj -g bj -m 0700 /var/lib/bj/.bj # ~/.bj для setup.json
|
||||||
|
|
||||||
|
# ---- 5. Клон/обновление репо ----
|
||||||
|
SRC_DIR=/opt/bj/src
|
||||||
|
log "Шаг 5/8: исходники в $SRC_DIR"
|
||||||
|
if [ -d "$SRC_DIR/.git" ]; then
|
||||||
|
log "Репо уже есть, обновляю до origin/$BRANCH"
|
||||||
|
git -C "$SRC_DIR" fetch --quiet origin
|
||||||
|
git -C "$SRC_DIR" checkout --quiet "$BRANCH"
|
||||||
|
git -C "$SRC_DIR" reset --hard --quiet "origin/$BRANCH"
|
||||||
|
else
|
||||||
|
git clone --quiet --branch "$BRANCH" "$GIT_URL" "$SRC_DIR" \
|
||||||
|
|| fail "git clone failed (проверь GIT_URL и сеть)"
|
||||||
|
fi
|
||||||
|
chown -R bj:bj "$SRC_DIR"
|
||||||
|
|
||||||
|
# ---- 6. Сборка bj-server ----
|
||||||
|
log "Шаг 6/8: сборка bj-server"
|
||||||
|
if [ "$SKIP_BUILD" = "1" ]; then
|
||||||
|
log "пропущено (--skip-build)"
|
||||||
|
else
|
||||||
|
sudo -u bj -H bash -c "cd $SRC_DIR && /usr/local/bin/go build -o /opt/bj/bj-server ./cmd/bj-server" \
|
||||||
|
|| fail "go build failed"
|
||||||
|
chown bj:bj /opt/bj/bj-server
|
||||||
|
chmod 0755 /opt/bj/bj-server
|
||||||
|
log "Бинарник: /opt/bj/bj-server ($(du -h /opt/bj/bj-server | awk '{print $1}'))"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Web-templates встроены через go:embed — отдельно копировать не нужно.
|
||||||
|
|
||||||
|
# ---- 7. PostgreSQL ----
|
||||||
|
if [ "$SKIP_POSTGRES" = "1" ]; then
|
||||||
|
log "Шаг 7/8: PostgreSQL пропущен (--no-postgres)"
|
||||||
|
else
|
||||||
|
log "Шаг 7/8: PostgreSQL в podman-контейнере"
|
||||||
|
cd "$SRC_DIR"
|
||||||
|
if podman ps --format '{{.Names}}' | grep -qx bj-postgres; then
|
||||||
|
log "Контейнер bj-postgres уже запущен"
|
||||||
|
else
|
||||||
|
sudo -u bj -H podman-compose -f deploy/docker-compose/docker-compose.yml up -d postgres \
|
||||||
|
|| warn "podman-compose не сработал — БД нужно поднять руками"
|
||||||
|
sleep 3
|
||||||
|
fi
|
||||||
|
# Накат миграций
|
||||||
|
for mig in migrations/fansy-store/*.sql migrations/m2m-core/*.sql; do
|
||||||
|
log " миграция: $(basename "$mig")"
|
||||||
|
sudo -u bj -H podman exec -i bj-postgres psql -U bj -d bj < "$mig" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- 8. systemd unit ----
|
||||||
|
log "Шаг 8/8: systemd unit"
|
||||||
|
cat > /etc/systemd/system/bj-server.service <<EOF
|
||||||
|
[Unit]
|
||||||
|
Description=Bridge-and-Join-s — единый сервис M2M-переводов
|
||||||
|
Documentation=$GIT_URL
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=bj
|
||||||
|
Group=bj
|
||||||
|
WorkingDirectory=/opt/bj/src
|
||||||
|
ExecStart=/opt/bj/bj-server
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
Environment=BJ_HTTP_ADDR=$BIND_ADDR
|
||||||
|
Environment=BJ_SETUP_PATH=/var/lib/bj/.bj/setup.json
|
||||||
|
Environment=BJ_M2M_SENDER=MC0079200000
|
||||||
|
Environment=BJ_M2M_RECEIVER=MC0010300000
|
||||||
|
|
||||||
|
# Безопасность
|
||||||
|
NoNewPrivileges=true
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectHome=true
|
||||||
|
ReadWritePaths=/var/lib/bj /var/log/bj
|
||||||
|
PrivateTmp=true
|
||||||
|
ProtectKernelTunables=true
|
||||||
|
ProtectKernelModules=true
|
||||||
|
ProtectControlGroups=true
|
||||||
|
|
||||||
|
StandardOutput=append:/var/log/bj/bj-server.log
|
||||||
|
StandardError=append:/var/log/bj/bj-server.err
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable bj-server >/dev/null 2>&1
|
||||||
|
systemctl restart bj-server
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
if systemctl is-active --quiet bj-server; then
|
||||||
|
log "✓ bj-server запущен"
|
||||||
|
else
|
||||||
|
warn "bj-server не стартанул, см. journalctl -u bj-server"
|
||||||
|
systemctl status bj-server --no-pager | tail -10
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- Финал ----
|
||||||
|
IP=$(hostname -I | awk '{print $1}')
|
||||||
|
echo
|
||||||
|
echo "================================================================"
|
||||||
|
echo " bj-server установлен"
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Web-админка: http://$IP$BIND_ADDR/admin/"
|
||||||
|
echo " Wizard: http://$IP$BIND_ADDR/admin/wizard"
|
||||||
|
echo " Архитектура: http://$IP$BIND_ADDR/admin/help/architecture"
|
||||||
|
echo " Логи: journalctl -u bj-server -f"
|
||||||
|
echo " tail -f /var/log/bj/bj-server.log"
|
||||||
|
echo " Сервис: systemctl status bj-server"
|
||||||
|
echo
|
||||||
|
echo " Следующие шаги:"
|
||||||
|
echo " 1. Установить Валидата CSP — sudo bash deploy/astra/install-validata.sh"
|
||||||
|
echo " 2. Установить ИШ — sudo bash deploy/astra/install-ish.sh"
|
||||||
|
echo " 3. Открыть /admin/wizard и пройти настройку"
|
||||||
|
echo "================================================================"
|
||||||
Executable
+134
@@ -0,0 +1,134 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# migrate-from-redos.sh — экспорт состояния со старой ВМ (РЕД ОС 10.10.10.22)
|
||||||
|
# для переноса на новую Astra Linux ВМ.
|
||||||
|
#
|
||||||
|
# Запускать на СТАРОЙ ВМ (РЕД ОС). Создаст архив /tmp/bj-migration-YYYY-MM-DD.tar.gz
|
||||||
|
# с:
|
||||||
|
# - дампом БД (pg_dump на оба схема: fansy.* и m2m_core.*)
|
||||||
|
# - содержимым ~bj/.bj/setup.json (или ~/.bj/setup.json для dev)
|
||||||
|
# - логами /var/log/bj/ (за последние 7 дней)
|
||||||
|
# - списком установленных пакетов (для справки)
|
||||||
|
#
|
||||||
|
# Архив надо перенести на новую ВМ (scp/rsync), там распаковать и натравить
|
||||||
|
# на install-astra.sh с флагом --import=/path/to/archive.tar.gz (TODO).
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
OUT_DIR="/tmp/bj-migration-$(date +%Y-%m-%d-%H%M)"
|
||||||
|
OUT_TAR="${OUT_DIR}.tar.gz"
|
||||||
|
mkdir -p "$OUT_DIR"
|
||||||
|
|
||||||
|
log() { echo -e "\033[1;34m[migrate-export]\033[0m $*"; }
|
||||||
|
warn() { echo -e "\033[1;33m[migrate-export WARN]\033[0m $*" >&2; }
|
||||||
|
|
||||||
|
# ---- 1. Дамп БД ----
|
||||||
|
log "1/5: дамп PostgreSQL"
|
||||||
|
DSN="${BJ_PG_DSN:-postgres://bj:bj_dev@127.0.0.1:5432/bj?sslmode=disable}"
|
||||||
|
if podman ps --format '{{.Names}}' 2>/dev/null | grep -qx bj-postgres; then
|
||||||
|
log " через podman exec bj-postgres"
|
||||||
|
podman exec bj-postgres pg_dump -U bj -d bj --clean --if-exists > "$OUT_DIR/bj.sql" \
|
||||||
|
|| warn " pg_dump упал — проверь контейнер bj-postgres"
|
||||||
|
else
|
||||||
|
log " напрямую pg_dump"
|
||||||
|
pg_dump "$DSN" --clean --if-exists > "$OUT_DIR/bj.sql" \
|
||||||
|
|| warn " pg_dump упал — проверь DSN"
|
||||||
|
fi
|
||||||
|
[ -f "$OUT_DIR/bj.sql" ] && log " размер дампа: $(du -h "$OUT_DIR/bj.sql" | awk '{print $1}')"
|
||||||
|
|
||||||
|
# ---- 2. Конфигурация ----
|
||||||
|
log "2/5: ~/.bj/setup.json"
|
||||||
|
for candidate in /var/lib/bj/.bj/setup.json ~/.bj/setup.json /root/.bj/setup.json; do
|
||||||
|
if [ -f "$candidate" ]; then
|
||||||
|
cp "$candidate" "$OUT_DIR/setup.json"
|
||||||
|
log " скопировано из $candidate"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# ---- 3. Логи ----
|
||||||
|
log "3/5: логи за 7 дней"
|
||||||
|
mkdir -p "$OUT_DIR/logs"
|
||||||
|
if [ -d /var/log/bj ]; then
|
||||||
|
find /var/log/bj -type f -mtime -7 -exec cp {} "$OUT_DIR/logs/" \; 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
journalctl -u bj-server --since "7 days ago" --no-pager > "$OUT_DIR/logs/journal.log" 2>/dev/null || true
|
||||||
|
|
||||||
|
# ---- 4. Пакеты, версии (для справки) ----
|
||||||
|
log "4/5: метаинформация"
|
||||||
|
{
|
||||||
|
echo "=== ОС ==="
|
||||||
|
cat /etc/os-release 2>/dev/null || echo "no os-release"
|
||||||
|
echo
|
||||||
|
echo "=== uname ==="
|
||||||
|
uname -a
|
||||||
|
echo
|
||||||
|
echo "=== Установленные RPM (только наши пакеты) ==="
|
||||||
|
rpm -qa 2>/dev/null | grep -iE "cprocsp|crypto|postgresql|podman|go" || true
|
||||||
|
echo
|
||||||
|
echo "=== Версия bj-server ==="
|
||||||
|
/opt/bj/bj-server --version 2>/dev/null || echo "не определена"
|
||||||
|
echo
|
||||||
|
echo "=== Дата создания дампа ==="
|
||||||
|
date
|
||||||
|
} > "$OUT_DIR/meta.txt"
|
||||||
|
|
||||||
|
# ---- 5. README ----
|
||||||
|
cat > "$OUT_DIR/README.md" <<EOF
|
||||||
|
# Миграция bj-server с РЕД ОС на Astra Linux
|
||||||
|
|
||||||
|
Дамп создан: $(date)
|
||||||
|
Источник: $(hostname) ($(hostname -I | awk '{print $1}'))
|
||||||
|
|
||||||
|
## Файлы
|
||||||
|
|
||||||
|
- \`bj.sql\` — дамп PostgreSQL базы bj (схемы fansy + m2m_core)
|
||||||
|
- \`setup.json\` — настройки bj-server (DSN, IGW URL, и т.п.)
|
||||||
|
- \`logs/\` — последние логи bj-server
|
||||||
|
- \`meta.txt\` — версии ОС, пакетов
|
||||||
|
|
||||||
|
## Восстановление на Astra Linux
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
# 1. На новой ВМ — ставим bj-server
|
||||||
|
sudo bash deploy/astra/install.sh
|
||||||
|
|
||||||
|
# 2. Восстанавливаем БД
|
||||||
|
podman exec -i bj-postgres psql -U bj -d bj < bj.sql
|
||||||
|
|
||||||
|
# 3. Восстанавливаем настройки
|
||||||
|
sudo cp setup.json /var/lib/bj/.bj/setup.json
|
||||||
|
sudo chown bj:bj /var/lib/bj/.bj/setup.json
|
||||||
|
sudo chmod 0600 /var/lib/bj/.bj/setup.json
|
||||||
|
|
||||||
|
# 4. Перезапуск
|
||||||
|
sudo systemctl restart bj-server
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Что НЕ переносится автоматически
|
||||||
|
|
||||||
|
- Сертификаты КриптоПро CSP (\`/var/opt/cprocsp/keys/$USER/\`)
|
||||||
|
— это нормально, на Astra Linux будет другая СКЗИ (Валидата CSP)
|
||||||
|
- \`/opt/cprocsp/\` (КриптоПро CSP)
|
||||||
|
— на Astra нужна Валидата вместо КриптоПро
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# ---- Финал ----
|
||||||
|
log "5/5: создание архива $OUT_TAR"
|
||||||
|
tar -czf "$OUT_TAR" -C "$(dirname "$OUT_DIR")" "$(basename "$OUT_DIR")"
|
||||||
|
rm -rf "$OUT_DIR"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Экспорт готов"
|
||||||
|
echo "================================================================"
|
||||||
|
echo " Архив: $OUT_TAR"
|
||||||
|
echo " Размер: $(du -h "$OUT_TAR" | awk '{print $1}')"
|
||||||
|
echo
|
||||||
|
echo " Перенести на новую Astra Linux ВМ:"
|
||||||
|
echo " scp $OUT_TAR user@<astra-ip>:/tmp/"
|
||||||
|
echo
|
||||||
|
echo " На Astra Linux распаковать и читать README.md:"
|
||||||
|
echo " cd /tmp"
|
||||||
|
echo " tar -xzf $(basename "$OUT_TAR")"
|
||||||
|
echo " cat $(basename "$OUT_DIR")/README.md"
|
||||||
|
echo "================================================================"
|
||||||
Reference in New Issue
Block a user