**Language / Язык:** [English](../operations.md) | [Русский](operations.md) # Эксплуатация ## Команды day-2 ```bash make up # запуск стека make down # остановка стека make restart make logs make dev # foreground-workflow, ориентированный на reload make db-migrate # идемпотентные миграции make seed # атомарный reseed (SEED_VSPHERE_PROFILE=large по умолчанию) make shell # интерактивный контейнер с инструментами ``` ## Миграции Упорядоченные SQL-файлы применяются транзакционно и записывают контрольные суммы SHA-256. Повторный запуск `make db-migrate` безопасен. Изменение уже применённой миграции отклоняется. `/health/ready` остаётся недоступным, пока не появится последняя упакованная миграция. ## Reseed ```bash make seed # large (по умолчанию) VSPHERE_PROFILE=small make seed VSPHERE_PROFILE=demo-cluster make seed ``` Reseed атомарно заменяет инвентарь в PostgreSQL. Состояние внешней автоматизации (файлы состояния Terraform, стеки Pulumi, инвентари Ansible, кодирующие MOID/имена ВМ) может после этого разойтись — обновите или пересоздайте эти внешние каналы. См. [Профили seed](seed-profiles.md). ## Восстановление workers CIS task workers используют аренды PostgreSQL (`FOR UPDATE SKIP LOCKED`). После сбоя или перезапуска просроченные аренды переиспользуются, и незавершённая работа безопасно возобновляется. Настраиваемые параметры: `TASK_WORKER_CONCURRENCY`, `TASK_LEASE_SECONDS`, `SIMULATION_TIME_SCALE`. ## Изменение мажора каталога по умолчанию 1. Мажор каталога по умолчанию — **9** (поверхность 8.0 U2 / Automation 9.1) при холодном старте; это не ограничивает таблицу маршрутов runtime (см. [Версии API](api-versions.md)). 2. Используйте «Apply as runtime» в Web UI или `POST /ui/api/contract/apply?major=N`, чтобы переключить мажор каталога локально для процесса, для целей просмотра/evidence. ## Резервное копирование состояния лаборатории PostgreSQL — это система записи (system of record). Используйте обычные backup/restore для Postgres (`pg_dump` / снимки томов), если нужно сохранить seeded-лабораторию. Контейнеры приложения одноразовые, пока сохраняется том базы данных. ## Публикация в Docker Hub `make release` собирает образ **runtime** (build target `runtime`, а не локальный bind-mounted образ `dev`) и публикует его в Docker Hub: ```bash docker login # один раз; учётная запись должна владеть или иметь права push в DOCKERHUB_USER make release ``` Значения по умолчанию: | Переменная | По умолчанию | Значение | |---|---|---| | `DOCKERHUB_USER` | `inecs` | Namespace/организация Docker Hub | | `IMAGE_NAME` | `vmware-api-simulator` | Имя репозитория | | `VERSION` | из `pyproject.toml` | Тег образа | | `PUSH_LATEST` | `1` | Также помечать/публиковать `:latest` | Примеры: ```bash make release make release VERSION=0.2.0 make release DOCKERHUB_USER=myorg PUSH_LATEST=0 make release-build # локальная сборка/тегирование без публикации ``` Опубликованные теги: - `inecs/vmware-api-simulator:` - `inecs/vmware-api-simulator:latest` (если не задано `PUSH_LATEST=0`) ## Быстрый старт с опубликованным compose-файлом [`docker-compose.release.yml`](../../docker-compose.release.yml) скачивает runtime-образ из Hub и запускает PostgreSQL + migrate + симулятор + HTTPS gateway: ```bash docker compose -f docker-compose.release.yml up -d docker compose -f docker-compose.release.yml run --rm --entrypoint python \ simulator -m app.simulation.seed_cli curl -sk https://localhost/health/ready open https://localhost/ ``` Вспомогательные команды из git checkout: ```bash make release-up make release-seed PROFILE=small make release-down ``` Полезные переопределения: | Переменная | По умолчанию | Значение | |---|---|---| | `DOCKER_IMAGE` | `inecs/vmware-api-simulator` | Репозиторий образа | | `IMAGE_TAG` | `latest` | Тег для скачивания | | `HTTP_PORT` | `80` | Порт хоста для HTTP | | `HTTPS_PORT` | `443` | Порт хоста для HTTPS | | `POSTGRES_PORT` | `127.0.0.1:5434` | Bind хоста для Postgres | | `TICKET_SIGNING_KEY` | лабораторное значение по умолчанию | Меняйте вне игрушечных лабораторий | | `POSTGRES_PASSWORD` | `vmware` | Пароль БД | Для Kubernetes с публичным TLS (cert-manager / Let's Encrypt) используйте Helm-чарт — см. [Kubernetes / Helm](kubernetes.md). ## Обновления 1. Скачайте / пересоберите образы (`make install` / `make docker-build` по ситуации). 2. Выполните миграции (`make db-migrate`). 3. Убедитесь, что `/health/ready` отвечает нормально. 4. Перепроверьте `/ui/api/compatibility?major=9` и `/api/appliance/system/version`. 5. При необходимости заново запустите `make test-vsphere` / `make vsphere-matrix` / `make pulumi-tests`, если проверяете поверхность после обновления. Последние зафиксированные lab-цифры: [Совместимость — Последний lab-прогон](compatibility.md#последний-lab-прогон-2026-07-18). ## Сброс лаборатории ```bash make seed PROFILE=small # или через UI: unload demo → small, затем снова seed ``` Для жёсткого сброса базы данных используйте `make db-reset` (деструктивно — см. справку Makefile).