docs(runbook): stostayer prod-config mount = truth for prod; node18 ipv4first gotcha; content-api incident

This commit is contained in:
2026-08-16 21:53:44 +03:00
parent 7c5348e83d
commit cccf63ffe6

View File

@@ -89,6 +89,15 @@ grep -c "<expected-text>" /tmp/v.html
```
**Гоча verify-URL:** bare `/remont-kondicionerov` 301-редиректит на `/remont/remont-kondicionerov` (DB-driven `oldPageRedirect`/unit-slug mapping) — это CMS-контент-страница БЕЗ nuxt-компонента. Компоненты `pages/<dir>/*.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`.
### Откат