From cccf63ffe63fdde130aaebc545b127049293b669 Mon Sep 17 00:00:00 2001 From: vitya Date: Sun, 16 Aug 2026 21:53:44 +0300 Subject: [PATCH] docs(runbook): stostayer prod-config mount = truth for prod; node18 ipv4first gotcha; content-api incident --- .wiki/concepts/stostayer-web-deploy-runbook.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.wiki/concepts/stostayer-web-deploy-runbook.md b/.wiki/concepts/stostayer-web-deploy-runbook.md index 5e61e94..a01fd4b 100644 --- a/.wiki/concepts/stostayer-web-deploy-runbook.md +++ b/.wiki/concepts/stostayer-web-deploy-runbook.md @@ -89,6 +89,15 @@ grep -c "" /tmp/v.html ``` **Гоча verify-URL:** bare `/remont-kondicionerov` 301-редиректит на `/remont/remont-kondicionerov` (DB-driven `oldPageRedirect`/unit-slug mapping) — это CMS-контент-страница БЕЗ nuxt-компонента. Компоненты `pages//*.vue` реально live на своих nuxt-маршрутах (напр. `/remont-kondicionerov/{zapravka,diagnostika}-kondicionera`) — верифицируй по ним, не по bare-URL. +**Прод-дрейф mount-конфига (2026-08-16, инцидент content-api):** хост монтирует +`/var/docker/stostayer-web/config` → `/usr/src/app/packages/web/config` — это **источник истины +для прод-конфига**. node-config читает из cwd (`packages/web/config`), т.е. репо-правки +`packages/*/config/default.json` (напр. c43d168: `s3.region local → us-west-1`) на прод **не +влияют** — образ подхватывает mount. После деплоя, меняющего конфиг: синхронизировать +хост-конфиг (или осознанно задокументировать mount как truth). Нюанс node18: `localhost` → +`::1` (IPv6-first) — в образе `NODE_OPTIONS=--dns-result-order=ipv4first` (MariaDB/MSSQL на +хосте IPv4-only). + **Гоча локального smoke-контейнера:** `packages/web/config/default.json` содержит **прод-БД** (`www.stostayer.ru:3306` MariaDB + `:1433` MSSQL), и `www.stostayer.ru` резолвится в публичный IP хоста → smoke-контейнер без env-overrides **подключается к prod-БД клиента по интернету** (read-only SSR, без writes, но всё равно нежелательно). Для чистого локального smoke — переопределяй `data.sequelize.*.host` env'ом на localhost/заглушку, либо глуши контейнер сразу после `Server Listening`. ### Откат