Артефактория Bridge-and-Join-s
Сервис раздачи релизов и обновлений (#18). Клиенты (bj-server auto-update, install.sh) скачивают подписанный манифест канала, проверяют подпись зашитым публичным ключом и обновляют компоненты.
Компоненты
internal/release— формат манифеста + подпись Ed25519 (sign/verify, хеши).cmd/bj-release— инструмент издателя: генерация ключей, сборка и подпись манифеста.cmd/bj-artifactory— HTTP-сервер раздачи манифеста и артефактов.deploy/artifactory/— nginx (TLS) + systemd unit.
Модель доверия
Один корневой Ed25519-ключ. Приватный (signing.priv) держит издатель в
секрете (НЕ в git). Публичный (signing.pub) зашивается в bj-server и в
install.sh. Манифест подписывается целиком — клиент проверяет подпись ДО
доверия версиям и хешам артефактов, затем сверяет sha256 каждого скачанного
файла с манифестом.
Релизный цикл (издатель)
# 1. Однократно — сгенерировать ключи подписи (приватный хранить в секрете!)
bj-release keygen -out ./keys/signing
# → keys/signing.priv (секрет), keys/signing.pub
# Публичный base64 из вывода — зашить в bj-server (auto-update, #20)
# 2. Собрать артефакты релиза в каталог
mkdir -p dist/stable
cp bj-server crypto-service.jar dist/stable/
cp deploy/linux/install-validata.sh deploy/ish/configure-ish.sql dist/stable/
# 3. Собрать + подписать манифест
bj-release build -dir dist/stable -version 1.0.0 -channel stable \
-key keys/signing.priv -keyid main -out dist/stable/manifest.json \
-notes "Первый релиз"
# 4. Выложить каталог в хранилище артефактории
rsync -a dist/stable/ server:/var/lib/bj-artifactory/releases/stable/
Сервер
bj-artifactory --addr 127.0.0.1:8090 --root /var/lib/bj-artifactory/releases
Раскладка хранилища:
releases/
stable/
manifest.json ← подписанный SignedManifest
bj-server
crypto-service.jar
install-validata.sh
configure-ish.sql
beta/
manifest.json
...
HTTP API
| Метод | Путь | Ответ |
|---|---|---|
| GET | /v1/<channel>/manifest.json |
подписанный манифест канала |
| GET | /v1/<channel>/files/<name> |
артефакт по имени |
| GET | /healthz |
ok |
За TLS-reverse-proxy (nginx.conf). Прод: updates.example.com → 127.0.0.1:8090.
Дальше
- #19 License-сервер — манифест/обновления гейтятся годовым ключом.
- #20 Auto-update в bj-server — горутина: качает манифест канала, проверяет подпись, сравнивает версии, atomic-replace бинарей, systemctl restart.