Практика OpenClaw в 2026 году:
Vercel Deployment Hook → смоук, security headers и сводка сборки на удалённом Mac
2026-openclaw-vercel-deployment-hook-smoke-headers-summary.htmlДля кого: команды на Vercel, которым после каждого деплоя нужны реальный публичный URL, смоук в WebKit и проверка security headers, а не только зелёная сборка. Ниже — один воспроизводимый runbook на базе OpenClaw и удалённого Mac: от Deployment Hook до build_summary и обратного POST. Связанные материалы: Cloudflare Pages Hook, Netlify Deploy Hook, CSP и nonce, метрики сборки в PR. Быстрые ссылки: главная, тарифы, аренда или покупка.
Три типичных ограничения
- Синхронный HTTP хука не терпит десятиминутного Playwright: отвечайте
202 Acceptedи выносите тяжёлую работу в воркер на Mac. - Дрейф заголовков между preview и production ломает единый эталон: храните
headers_expectотдельно по окружениям. - Повторная доставка webhook спамит PR: нужен
Idempotency-Keyи дедупликация поdeploy_id.
Матрица «сигнал → действие → артефакт» фиксирует контракт без размытых формулировок:
| Сигнал | Действие на Mac | Артефакт |
|---|---|---|
| POST Deployment Hook | Проверка секрета ingress, постановка в очередь, OPENCLAW_RUN_ID |
NDJSON-строка phase=accepted в .openclaw/reports/deploy_hook.ndjson |
VERCEL_URL стабилен |
curl -fsS с backoff до маркера HTML (потолок паузы около 30 с на цикл) |
Запись http_status=200, duration_ms |
| Заголовки ответа | Сравнение с headers_expect.json, нормализация пробелов в CSP |
headers_diff.txt или пустой файл при полном совпадении |
| Смоук готов | playwright test tests/smoke --project=webkit --project=chromium |
trace при падении в .openclaw/traces/ |
01 OpenClaw и URL хука
В панели Vercel откройте Settings → Git → Deploy Hooks, создайте URL для нужной ветки и передавайте его только в ingress с HMAC или Bearer. Приёмник должен немедленно вернуть 202 Accepted, выставить OPENCLAW_RUN_ID и вызвать один входной скрипт, например ~/runners/vercel-post-deploy.sh, который лежит в репозитории как scripts/vercel/openclaw-post-deploy.sh для паритета SSH и локального запуска.
Из тела webhook или переменных окружения CI извлеките VERCEL_URL, VERCEL_DEPLOYMENT_ID и VERCEL_GIT_COMMIT_SHA; до запуска браузера проверьте, что Host совпадает с ожидаемым продакшеном или превью. Ниже — пять шагов, которые можно повторить на любом Mac с тем же репозиторием.
- Сохраните URL хука в секрет-хранилище; в логах маскируйте query и токены.
- Ingress: валидация подписи, лимит размера тела, ответ
202и постановка задачи. - Экспорт
DEPLOY_URL=https://${VERCEL_URL}с таблицей соответствия кастомных доменов по окружениям. - Блокировка по
VERCEL_DEPLOYMENT_ID, чтобы параллельные деплои не мешали друг другу. - Единая команда запуска из cron или launchd на удалённом Mac, где круглосуточно доступны WebKit и стабильный диск для отчётов.
02 Смоук и интерфейс скриптов проверки заголовков
Прогрев: цикл curl -fsS до HTTP 200 и известного маркера в HTML; при 429 или 503 используйте экспоненциальный backoff с джиттером. Заголовки: положите ожидания в config/headers_expect.json для полей вроде strict-transport-security, content-security-policy или report-only, x-frame-options; снимайте факт с помощью curl -sSI, нормализуйте переносы длинных директив CSP и пишите diff в .openclaw/reports/headers_diff.txt.
Смоук: npx playwright test tests/smoke --project=webkit --project=chromium с базой DEPLOY_URL. На Apple Silicon удалённый Mac даёт сопоставимый с пользователями Safari сигнал; каждая фаза дописывает в NDJSON поля phase, http_status, duration_ms и vercel_deployment_id для последующего разбора без доступа к дашборду Vercel.
03 Режим обратной передачи сводки при сбоях
Успешный прогон сериализуйте в build_summary/v1: git_sha, vercel_deployment_id, длительности фаз, размер headers_diff в байтах и exit_code=0. При любой ошибке заполните failed_phase, краткий текст из stderr, exit_code и путь к trace — тот же файл остаётся единым источником правды перед POST в чат или API комментария PR.
Заголовок Idempotency-Key: ${VERCEL_GIT_COMMIT_SHA}:${VERCEL_DEPLOYMENT_ID}:summary предотвращает дубли при повторной доставке хука. Bearer и URL callback не попадают в stdout; для сопоставления с метриками зафиксируйте те же поля, что и в материале про сводку метрик сборки.
04 FAQ
| Симптом | Что проверить |
|---|---|
| 401 на ingress | Рассинхрон секрета, неверная схема Authorization, устаревший Deploy Hook URL в vault. |
| Заголовки «плывут» между деплоями | Изменения vercel.json, middleware, кэш edge; храните эталон на ветку и сравнивайте по одному deployment_id. |
| Падает только WebKit | ITP, сторонние cookie, редиректы на CDN ассетов; приложите trace и идентификатор деплоя. |
| 429 на callback | Вторичные лимиты GitHub; увеличьте интервал и используйте обновление существующего комментария вместо спама новыми. |
Долгие E2E не держите в потоке HTTP хука: очередь на удалённом Mac снимает риск таймаута ingress и даёт предсказуемое время смоука.
Закрепите смоук и security headers на постоянном Mac-runner
Один и тот же сценарий OpenClaw после каждого деплоя на Vercel: прогрев URL, diff заголовков, WebKit и Chromium, затем сводка в тикет без ручного копирования логов. Тарифы и помощь открыты без обязательного входа; чтобы выделить узел под webhook и Playwright, перейдите к аренде или покупке и подключите SSH к готовой машине.