Vercel · Deployment Hook · OpenClaw · Удалённый Mac · 2026

Практика OpenClaw в 2026 году:
Vercel Deployment Hook → смоук, security headers и сводка сборки на удалённом Mac

17.04.2026 Фронтенд и релизная автоматизация 9 мин чтения
Постоянный slug: 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. Быстрые ссылки: главная, тарифы, аренда или покупка.

Три типичных ограничения

  1. Синхронный HTTP хука не терпит десятиминутного Playwright: отвечайте 202 Accepted и выносите тяжёлую работу в воркер на Mac.
  2. Дрейф заголовков между preview и production ломает единый эталон: храните headers_expect отдельно по окружениям.
  3. Повторная доставка 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 с тем же репозиторием.

  1. Сохраните URL хука в секрет-хранилище; в логах маскируйте query и токены.
  2. Ingress: валидация подписи, лимит размера тела, ответ 202 и постановка задачи.
  3. Экспорт DEPLOY_URL=https://${VERCEL_URL} с таблицей соответствия кастомных доменов по окружениям.
  4. Блокировка по VERCEL_DEPLOYMENT_ID, чтобы параллельные деплои не мешали друг другу.
  5. Единая команда запуска из 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 и даёт предсказуемое время смоука.

Удалённый Mac 7×24 · Vercel Hook и браузерная приёмка

Закрепите смоук и security headers на постоянном Mac-runner

Один и тот же сценарий OpenClaw после каждого деплоя на Vercel: прогрев URL, diff заголовков, WebKit и Chromium, затем сводка в тикет без ручного копирования логов. Тарифы и помощь открыты без обязательного входа; чтобы выделить узел под webhook и Playwright, перейдите к аренде или покупке и подключите SSH к готовой машине.

Security headers WebKit build_summary
Mac под Vercel Hook QA