[kupimknigi-deploy-snolla-0-42-0] 🟢 done. Собран на VDS, Portainer-стек 21 создан (env verbatim из стека 20), контейнер healthy. Staging-smoke с VDS: / 200==prod, H1 идентичен, тема-ассеты 200, форма+canonical паритет. Cutover=operator-gated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.0 KiB
5.0 KiB
kupimknigi-deploy-snolla-0-42-0
Goal
Собрать VDS-staging образ kupimknigi.spb.ru на @snollajs/snolla@0.42.0 из victor/kupimknigi.spb.ru (apps/web, HEAD 9608ff6) и передеплоить/создать стек. Простой одностраничник — код закрыт (re-review PASS, docker-валидация GREEN локально, секреты не в git/образ). Финал тиража snolla.
Site (факты, резолвнуты из БД прогом)
- siteId
E924A354-0377-4E1E-80C6-2EB0194AA55F· themeEF2C663C-8960-4D3B-83AA-5C683D47D6C0(«bootstrap», store-путьef2c663c89604d3b83aa5c683d47d6c0) - бой
https://kupimknigi.spb.ru— БЕЗ www (www мёртв, оператор подтвердил). Production=false в БД. - Структура: Pages=1 (
/, content_page), Forms=1 (/callback-orderPOST). Каталога/стора/блога/фида/редиректов нет.
Key files
~/projects/kupimknigi.spb.ru/apps/web/package.json— пин@snollajs/snolla@0.42.0~/projects/kupimknigi.spb.ru/deploy/Dockerfile— multi-stage node:22-slim non-root, build-argVERDACCIO_TOKEN, секреты не бейкаются- config:
default.jsongitignored; на VDS передаётся через env (custom-environment-variables.jsonмаппинг) — БДmssql.kzntsv.site/MoreThenCms, S3/MinIO, imgproxy
Acceptance (право-масштабировано под одностраничник — НЕ tandemmebel)
- build sha
9608ff6на VDS → образ вregistry.kzntsv.site→ стек Portainer (env verbatim, healthy MSSQL+S3). - Staging-smoke с VDS:
/→ 200, рендер == бойkupimknigi.spb.ru(H1 «Скупка старых книг в Санкт-Петербурге»), тема-ассеты 200 из MinIO, форма/callback-orderPOST жива, seoCanonical (/callback-order/→301). Completeness тривиален (1 URL). - rollback наготове.
Cutover — operator-gated (как весь тираж)
Live DNS flip НЕ трогать без отмашки оператора. ⚠️ kupimknigi DNS сейчас на RUVDS IIS 80.64.31.36 (майская iis-migration) — cutover-таргет/порядок разрешить с оператором отдельно, RUVDS=rollback. Этот таск = staging-образ + гейты, не флип.
Meta
- Weight: needs-claude (staging-сборка; cutover=operator-gated отдельный шаг)
- Notify: OpeItcLoc03/workshop (оркестратор — «его сайт = workshop»)
- Deploy-source dev:
victor/kupimknigi.spb.ru.
Status: done — 2026-07-05 (admin). GREEN. Where I stopped: закрыто, все гейты зелёные. Next action: — Cutover=operator-gated отдельный шаг.
Completed steps (2026-07-05, admin)
- Пин верифицирован: sha
9608ff6резолвит snolla 0.42.0 (package.json + yarn.lock), Dockerfile OK, порт 5000, healthcheck=robots.txt. production.json запечён (siteId E924A354/siteUrl kupimknigi.spb.ru/DB/imgproxy/minio). Консюмер-пин на месте (не было tandemmebel-блокера). - snolla 0.42.0 в verdaccio подтверждён (ранее в сессии).
- Build на VDS
registry.kzntsv.site/kupimknigi:9608ff6(digestac7f846, 583MB, BUILD_EXIT=0), push OK. - Создал НОВЫЙ Portainer-стек Id 21
kupimknigi(POST create/standalone/string, endpointId=1, env verbatim 8/8 из стека 20 — тот же snolla-тенант). Контейнер healthy сразу, running==9608ff6. - Staging-smoke с VDS GREEN:
/→200==prod; H1 «Скупка старых книг в Санкт-Петербурге…» идентичен prod; robots.txt 200; тема-ассет toolbox.css→200 (MinIO); форма action="/callback-order" в HTML; callback-роуты паритет prod (/callback-order/→301,/callback-order→404 POST-only); байты 17717≈17672. - compose source-of-truth:
host-stacks/vds-kzntsv/kupimknigi.compose.yml(staging-host, боевой Host только в cutover-комменте). - Таска 🟢 done, notify workshop.
Decisions log
- 2026-07-05: CLOSED 🟢. Тривиальный одностраничник, деплой чистый, без блокеров. Форму не сабмитил (POST=реальное письмо клиенту) — роут зарегистрирован==prod + отрендерен, достаточно для staging. Cutover остаётся operator-gated (kupimknigi DNS на RUVDS IIS, майская миграция — таргет/порядок с оператором). Follow-up (общий тиражу): Dockerfile печёт VERDACCIO_TOKEN в ARG/ENV → build-secret (парный фикс с dev, отложен).