docs: document Nexus registry migration #18
Docs security / security (push) Successful in 9s
Docs verify / verify (push) Successful in 11s
Docs security / security (pull_request) Successful in 13s
Docs verify / verify (pull_request) Successful in 12s
Conventional commits / commits (pull_request) Failing after 10s
Docs security / security (push) Successful in 9s
Docs verify / verify (push) Successful in 11s
Docs security / security (pull_request) Successful in 13s
Docs verify / verify (pull_request) Successful in 12s
Conventional commits / commits (pull_request) Failing after 10s
This commit is contained in:
@@ -12,12 +12,17 @@ Development дополнительно требует checkout `frontend/` и `b
|
|||||||
доступ к registry и достаточно свободного диска для non-root UID 1000.
|
доступ к registry и достаточно свободного диска для non-root UID 1000.
|
||||||
Локально проверены Engine 29.8.0, Compose 5.5.1, Linux arm64.
|
Локально проверены Engine 29.8.0, Compose 5.5.1, Linux arm64.
|
||||||
Другую архитектуру проверяют отдельно; multi-platform images не обещаны.
|
Другую архитектуру проверяют отдельно; multi-platform images не обещаны.
|
||||||
- Gitea Container Registry; проверяемая версия сервера — 1.27.3.
|
- Nexus Docker hosted repository `docker-hosted`, доступный через
|
||||||
|
`https://nexus.ksv741.keenetic.pro/v2/`. Docker Bearer Token Realm включён;
|
||||||
|
reverse proxy передаёт исходные host и HTTPS scheme. Адрес token realm
|
||||||
|
в `WWW-Authenticate` также должен начинаться с `https://`.
|
||||||
|
Deployment policy запрещает redeploy существующих release tags.
|
||||||
Runner label — `ubuntu-latest`, runner должен иметь Docker CLI, buildx и daemon.
|
Runner label — `ubuntu-latest`, runner должен иметь Docker CLI, buildx и daemon.
|
||||||
Наличие label само по себе не доказывает Docker capability.
|
Наличие label само по себе не доказывает Docker capability.
|
||||||
- В Actions каждого component repo нужны `REGISTRY_USERNAME` и
|
- В Actions каждого component repo нужны `NEXUS_USERNAME` и
|
||||||
`REGISTRY_TOKEN` отдельной identity с package write permission. Server
|
`NEXUS_PASSWORD` отдельной Nexus identity с правами browse/read/add/edit
|
||||||
использует другую identity только с package read permission. Built-in
|
только на `docker-hosted`, без delete и административных прав. Server
|
||||||
|
использует другую identity только с browse/read на этот repository. Built-in
|
||||||
workflow token не заменяет эту настройку.
|
workflow token не заменяет эту настройку.
|
||||||
- На сервере Caddy уже завершает TLS и передаёт весь домен на
|
- На сервере Caddy уже завершает TLS и передаёт весь домен на
|
||||||
`127.0.0.1:8080` (или выбранный frontend port). Отдельного `/api` upstream нет.
|
`127.0.0.1:8080` (или выбранный frontend port). Отдельного `/api` upstream нет.
|
||||||
@@ -63,7 +68,7 @@ Project `wealthledger-dev` хранит SQLite в `development-data`. Обычн
|
|||||||
version, затем выполняет `npm ci`, `npm run verify`; backend дополнительно
|
version, затем выполняет `npm ci`, `npm run verify`; backend дополнительно
|
||||||
выполняет `npm run test:e2e`. У каждого image OCI version/revision labels.
|
выполняет `npm run test:e2e`. У каждого image OCI version/revision labels.
|
||||||
|
|
||||||
Images публикуются как `git.personal.ksv741.ru/wealthledger/frontend:X.Y.Z`
|
Images публикуются как `nexus.ksv741.keenetic.pro/wealthledger/frontend:X.Y.Z`
|
||||||
и `.../backend:X.Y.Z`. `latest` не создаётся.
|
и `.../backend:X.Y.Z`. `latest` не создаётся.
|
||||||
Workflow отказывается перезаписывать существующие release tags;
|
Workflow отказывается перезаписывать существующие release tags;
|
||||||
защита release tags и запрет параллельных publishers обязательны. Если одна
|
защита release tags и запрет параллельных publishers обязательны. Если одна
|
||||||
@@ -73,9 +78,45 @@ Workflow отказывается перезаписывать существу
|
|||||||
Выберите опубликованные version tags, выполните pull и сравните OCI revision
|
Выберите опубликованные version tags, выполните pull и сравните OCI revision
|
||||||
с release commit. Выполните smoke с disposable data/config до первого server
|
с release commit. Выполните smoke с disposable data/config до первого server
|
||||||
rollout. В production env хранится пара полных image references, например
|
rollout. В production env хранится пара полных image references, например
|
||||||
`git.personal.ksv741.ru/wealthledger/frontend:0.1.0`. Сохраните versions/revisions
|
`nexus.ksv741.keenetic.pro/wealthledger/frontend:0.2.0`. Сохраните versions/revisions
|
||||||
в deployment record. Release tags не должны переназначаться другим images.
|
в deployment record. Release tags не должны переназначаться другим images.
|
||||||
|
|
||||||
|
## Перенос существующих images из Gitea
|
||||||
|
|
||||||
|
До переключения CI и server references проверьте HTTPS token realm и настройте
|
||||||
|
Nexus identities. В Actions добавьте `NEXUS_USERNAME`/`NEXUS_PASSWORD`; прежние
|
||||||
|
`REGISTRY_USERNAME`/`REGISTRY_TOKEN` сохраните для отката старого workflow.
|
||||||
|
Пароли вводятся интерактивно или через `--password-stdin`, не через аргументы.
|
||||||
|
|
||||||
|
Скопируйте каждый опубликованный release без пересборки. Например, для `0.2.0`
|
||||||
|
с установленным Skopeo и доступом чтения Gitea/записи Nexus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
skopeo login git.personal.ksv741.ru
|
||||||
|
skopeo login nexus.ksv741.keenetic.pro
|
||||||
|
for component in frontend backend; do
|
||||||
|
skopeo copy --all --preserve-digests \
|
||||||
|
"docker://git.personal.ksv741.ru/wealthledger/$component:0.2.0" \
|
||||||
|
"docker://nexus.ksv741.keenetic.pro/wealthledger/$component:0.2.0" || exit 1
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
`--all` переносит весь image index, включая платформы и вложенные attestation
|
||||||
|
manifests; `--preserve-digests` прерывает перенос при изменении digest.
|
||||||
|
До копирования проверьте наличие destination tag: если он уже существует,
|
||||||
|
сравните исходный и целевой index digest и вложенные manifests. Совпадающий
|
||||||
|
artifact повторно не публикуйте; несовпадение требует расследования, не удаления
|
||||||
|
или перезаписи tag. Частичный перенос не считается завершённым.
|
||||||
|
|
||||||
|
После копирования сравните digests через `skopeo inspect --raw` и SHA-256,
|
||||||
|
выполните `docker pull` обоих images отдельной server read-only identity,
|
||||||
|
проверьте OCI revision и container smoke на disposable data.
|
||||||
|
Только после этого меняйте production image references и запускайте обычную
|
||||||
|
последовательность обновления ниже. Старые Gitea packages и references сохраните:
|
||||||
|
откат registry возвращает прежние адреса тех же artifacts, не восстанавливает
|
||||||
|
SQLite и не меняет encryption keys. Не переносите Git release tags и не
|
||||||
|
запускайте заново старый tag workflow для копирования существующего image.
|
||||||
|
|
||||||
## Первая установка
|
## Первая установка
|
||||||
|
|
||||||
Создайте restricted environment file и data directory:
|
Создайте restricted environment file и data directory:
|
||||||
@@ -106,7 +147,7 @@ backup directory и Docker. Заполните env локальным защищ
|
|||||||
Войдите в registry server identity без помещения token в командную строку:
|
Войдите в registry server identity без помещения token в командную строку:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker login git.personal.ksv741.ru --username SERVER_PULL_USER
|
docker login nexus.ksv741.keenetic.pro --username SERVER_PULL_USER
|
||||||
export COMPOSE_FILE=compose.yaml
|
export COMPOSE_FILE=compose.yaml
|
||||||
export COMPOSE_PROJECT_NAME=wealthledger
|
export COMPOSE_PROJECT_NAME=wealthledger
|
||||||
export COMPOSE_ENV_FILES=/srv/wealthledger/production.env
|
export COMPOSE_ENV_FILES=/srv/wealthledger/production.env
|
||||||
|
|||||||
Reference in New Issue
Block a user