# Orchestrator Deploy Hook `scripts/orchestrator-deploy-hook.sh` — хост-скрипт деплоя orchestrator с health-чеком и авто-rollback. ## Как работает ### Режим `--deploy` (по умолчанию) 1. **Захват текущего образа** — до рестарта записывает ID образа работающего контейнера в `$PREV_IMAGE_FILE` (best-effort, не падает если сервис не запущен). 2. **git pull** — обновляет код репозитория. 2b. **Build-once retag** (ORCH-036, BR-6) — если задан `$SOURCE_IMAGE`, хук ретегает его на `$TARGET_IMAGE` (`docker tag $SOURCE_IMAGE $TARGET_IMAGE`) и поднимает контейнер на этом образе через `up -d --no-build`. Это деплой РОВНО того образа, что прошёл staging, **без `docker build`**. Если `$SOURCE_IMAGE` не задан (дефолт) — шаг пропускается (обратная совместимость). 3. **Рестарт контейнера** — `docker compose --profile $COMPOSE_PROFILE up -d --no-build $TARGET_SERVICE`. 4. **Health-цикл** — 10 попыток × 6с = до 60с. Критерий: HTTP 200 + тело содержит `"status":"ok"`. - **Успех** → `exit 0`, лог "Deploy SUCCESS". - **Провал** → авто-rollback (шаг 5). 5. **Авто-rollback** — восстанавливает образ из `$PREV_IMAGE_FILE`, рестарт, повторный health 5×3с. - Если восстановился → `exit 1` (деплой провалился, откат успешен). - Если и откат не помог → `exit 2` (критично). ### Режим `--rollback` Вручную откатывает сервис на предыдущий образ из `$PREV_IMAGE_FILE`. ## Переменные окружения | Переменная | Дефолт | Описание | |------------------|-----------------------------------|-----------------------------------------------| | `TARGET_SERVICE` | `orchestrator-staging` | Имя docker-compose сервиса | | `TARGET_PORT` | `8501` | Порт health-check | | `TARGET_IMAGE` | `orchestrator-orchestrator-staging` | Имя образа для retag при rollback | | `COMPOSE_PROFILE`| `staging` | Docker compose profile (пусто = без профиля) | | `PREV_IMAGE_FILE`| `$REPO/.deploy-prev-image-staging`| Файл для сохранения предыдущего образа | | `SOURCE_IMAGE` | _(unset)_ | Build-once (ORCH-036): провалидированный образ для retag на `$TARGET_IMAGE` перед рестартом (без rebuild). Не задан → шаг пропущен. | | `LOG` | `/var/log/orchestrator/deploy-hook.log` | Лог-файл (fallback: `$REPO/deploy-hook.log`) | > ⚠️ **Дефолт — всегда STAGING**. Прод активируется только явным переопределением env. ## Примеры запуска ### Staging (дефолт, безопасно) ```bash cd /home/slin/repos/orchestrator bash scripts/orchestrator-deploy-hook.sh --deploy # или просто: bash scripts/orchestrator-deploy-hook.sh ``` ### Прод (осознанный шаг, Этап 5) ```bash TARGET_SERVICE=orchestrator \ TARGET_PORT=8500 \ TARGET_IMAGE=orchestrator-orchestrator \ COMPOSE_PROFILE="" \ PREV_IMAGE_FILE=/home/slin/repos/orchestrator/.deploy-prev-image-prod \ bash scripts/orchestrator-deploy-hook.sh --deploy ``` ### Прод build-once (ORCH-036) — ретег staging-образа, без rebuild Так прод-деплой запускается **автоматически** исполняемым самодеплоем (Фаза B: `ssh + setsid`, см. `INFRA.md`). Ключевое отличие — `SOURCE_IMAGE` указывает на провалидированный staging-образ, который ретегается на прод-тег: ```bash SOURCE_IMAGE=orchestrator-orchestrator-staging \ TARGET_SERVICE=orchestrator \ TARGET_PORT=8500 \ TARGET_IMAGE=orchestrator-orchestrator \ COMPOSE_PROFILE="" \ PREV_IMAGE_FILE=/home/slin/repos/orchestrator/.deploy-prev-image-prod \ bash scripts/orchestrator-deploy-hook.sh --deploy ``` ### Ручной rollback staging ```bash bash scripts/orchestrator-deploy-hook.sh --rollback ``` ## Коды выхода | Код | Значение | |-----|------------------------------------------------------| | `0` | Деплой успешен, сервис здоров | | `1` | Деплой провалился; откат выполнен (или пропущен) | | `2` | Деплой провалился И откат тоже провалился (критично) | ## Логи ``` /var/log/orchestrator/deploy-hook.log ``` Каждая строка с UTC-таймстампом в формате `[2026-06-05T06:30:00Z]`. ## Разница с enduro-deploy-hook.sh | Функция | enduro-deploy-hook.sh | orchestrator-deploy-hook.sh | |----------------------|-----------------------|-----------------------------| | Захват PREV_IMG | ✅ | ✅ | | git pull | ✅ | ✅ | | Рестарт | ✅ | ✅ | | Health-цикл (60с) | ❌ | ✅ 10×6с | | Авто-rollback | ❌ | ✅ | | Параметризация (env) | ❌ хардкод | ✅ дефолт=staging | | Compose profile | ❌ | ✅ --profile staging |