Add docker admin bootstrap for clean release

This commit is contained in:
2026-03-13 11:41:44 +03:00
parent 1cef3f7e84
commit 36742cd20c
12 changed files with 254 additions and 25 deletions

View File

@@ -152,15 +152,15 @@ psql -U postgres -d ss_tools
```bash
cd /home/busya/dev/ss-tools
./scripts/build_offline_docker_bundle.sh v1.0.0-rc2
./scripts/build_offline_docker_bundle.sh v1.0.0-rc2-docker
```
Результат появится в `dist/docker/`:
- `backend.v1.0.0-rc2.tar`
- `frontend.v1.0.0-rc2.tar`
- `postgres.v1.0.0-rc2.tar`
- `sha256sums.v1.0.0-rc2.txt`
- `manifest.v1.0.0-rc2.txt`
- `backend.v1.0.0-rc2-docker.tar`
- `frontend.v1.0.0-rc2-docker.tar`
- `postgres.v1.0.0-rc2-docker.tar`
- `sha256sums.v1.0.0-rc2-docker.txt`
- `manifest.v1.0.0-rc2-docker.txt`
- `docker-compose.enterprise-clean.yml`
- `.env.enterprise-clean.example`
@@ -171,9 +171,9 @@ cd /home/busya/dev/ss-tools
### 3. Импорт образов
```bash
docker load -i backend.v1.0.0-rc2.tar
docker load -i frontend.v1.0.0-rc2.tar
docker load -i postgres.v1.0.0-rc2.tar
docker load -i backend.v1.0.0-rc2-docker.tar
docker load -i frontend.v1.0.0-rc2-docker.tar
docker load -i postgres.v1.0.0-rc2-docker.tar
```
### 4. Подготовка конфигурации
@@ -189,6 +189,16 @@ cp .env.enterprise-clean.example .env.enterprise-clean
- `POSTGRES_PASSWORD`
- `STORAGE_ROOT`
Для первого запуска в новом контуре дополнительно задайте:
- `INITIAL_ADMIN_CREATE=true`
- `INITIAL_ADMIN_USERNAME=<org-admin-login>`
- `INITIAL_ADMIN_PASSWORD=<temporary-strong-secret>`
- `INITIAL_ADMIN_EMAIL=<optional>`
Также проверьте, что теги образов в [`.env.enterprise-clean`](.env.enterprise-clean.example) совпадают с реально загруженными:
- `BACKEND_IMAGE=ss-tools-backend:v1.0.0-rc2-docker`
- `FRONTEND_IMAGE=ss-tools-frontend:v1.0.0-rc2-docker`
### 5. Запуск в offline-контуре
```bash
@@ -197,6 +207,21 @@ docker compose --env-file .env.enterprise-clean -f docker-compose.enterprise-cle
Compose-файл использует `pull_policy: never`, поэтому runtime не должен обращаться к внешним registry.
### 6. Bootstrap администратора в контейнере
При `INITIAL_ADMIN_CREATE=true` backend container автоматически:
1. инициализирует auth DB;
2. запускает [`create_admin.py`](../backend/src/scripts/create_admin.py) с runtime-параметрами;
3. создаёт пользователя только если его ещё нет;
4. при повторном старте не изменяет существующего администратора.
После первого успешного входа обязательно:
- смените bootstrap-пароль на постоянный организационный секрет;
- установите `INITIAL_ADMIN_CREATE=false`;
- перезапустите stack с обновлённым `.env.enterprise-clean`.
Если bootstrap завершается ошибкой, backend не стартует — это ожидаемый fail-fast режим для безопасного ввода в эксплуатацию.
## Первая настройка
### 1. Инициализация базы данных
@@ -450,6 +475,24 @@ export CLEAN_TUI_ARTIFACTS_JSON=/absolute/path/artifacts.json
}
```
Минимальный пример `artifacts.json`:
```json
{
"artifacts": [
{
"id": "artifact-backend-dist",
"path": "backend/dist/package.tar.gz",
"sha256": "deadbeef",
"size": 1024,
"category": "core",
"source_uri": "https://repo.intra.company.local/releases/backend/dist/package.tar.gz",
"source_host": "repo.intra.company.local"
}
]
}
```
### Политика источников (internal-only)
Разрешены только хосты из внутреннего реестра компании, например: