feat(deploy): pilonuxt CUTOVER LIVE on www.pilorama98.ru — deploy-pilonuxt-vds closed

vitya флипнул DNS pilorama98.ru+www → 89.253.255.94. Перенастроил traefik
роутер на боевые хосты (apex+www+vds-subdomain, LE cert), снял smoke
GTM-override (прод-аналитика вкл), выкатил 125a3e2 (фикс Продукция→/catalog).
Финальный smoke с VDS по www.pilorama98.ru: все страницы page 200/viewModel
200, картинки 200 webp, x-powered-by Nuxt (не IIS), cert valid, битый
футер-линк убран. Форма закрыта (vitya ok + pilonuxt dev-verified).
Stack 16. Задача 🟢 closed. Follow-ups: decommission старого IIS после soak.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-15 00:09:08 +03:00
parent 2911f2b3e5
commit 9add1ac164
2 changed files with 14 additions and 7 deletions

View File

@@ -490,7 +490,7 @@ vehicles-loader (stostayer) деплоится в Docker у клиента (lite
--- ---
## 🔵 [deploy-pilonuxt-vds] — **Цель:** Собрать prod-образ нового Nuxt-фронта ПИЛОРАМА98 (`victor/pilonuxt`, master) и задеплоить на VDS как Portainer-стек за Traefik. Готово в репо: `Dockerfile` + `.dockerignore` в корне. Полный овнершип сборки и деплоя — на тебе (build → push в VDS-registry → Portainer stack), как books/stostayer. ## 🟢 [deploy-pilonuxt-vds] — closed 2026-06-15 — CUTOVER LIVE на www.pilorama98.ru (tag 125a3e2, Portainer stack 16). **Цель:** Собрать prod-образ нового Nuxt-фронта ПИЛОРАМА98 (`victor/pilonuxt`, master) и задеплоить на VDS как Portainer-стек за Traefik. Готово в репо: `Dockerfile` + `.dockerignore` в корне. Полный овнершип сборки и деплоя — на тебе (build → push в VDS-registry → Portainer stack), как books/stostayer.
**Сборка:** **Сборка:**
- `docker build --secret id=verdaccio_token,env=VERDACCIO_TOKEN -t <registry>/pilonuxt:<tag> .` - `docker build --secret id=verdaccio_token,env=VERDACCIO_TOKEN -t <registry>/pilonuxt:<tag> .`
@@ -531,7 +531,13 @@ vehicles-loader (stostayer) деплоится в Docker у клиента (lite
**weight:** needs-human (deploy-инфра) **weight:** needs-human (deploy-инфра)
**notify:** victor/pilonuxt **notify:** victor/pilonuxt
**Status:** blocked **Status:** done (closed 2026-06-15)
**Closure / coverage check:** vitya флипнул DNS pilorama98.ru+www → 89.253.255.94; я перенастроил traefik-роутер на боевые хосты (`Host(www.pilorama98.ru)||Host(pilorama98.ru)||Host(pilonuxt.vds.kzntsv.site)`, cert LE на apex+www), снял smoke GTM-override (прод-аналитика GTM-MNNXFJ6 ВКЛ), выкатил `125a3e2` (фикс «Продукция»→/catalog). Acceptance: (1) образ в registry ✓ 125a3e2; (2) Portainer stack 16 за traefik healthy ✓; (3) smoke ✓ — финальный краул с VDS по боевому www.pilorama98.ru: все страницы page 200/viewModel 200 (главная/каталог/категории/товар/услуги/контакты/оплата/доставка), картинки imgproxy 200 webp, x-powered-by Nuxt (не IIS), cert valid, футер /products битый линк убран (0 вхождений, «Продукция»→/catalog); форма contacts — закрыта (vitya «формы заебись» + pilonuxt end-to-end verified в dev, smtp egress жив); (4) доклад pilonuxt ✓. Урок применён: краулил весь меню+viewModel, не 2 роута ([[smoke-crawl-real-pages-not-two-routes]]).
**Follow-ups (не блокеры, отдельно):** DNS-propagation хвост (часть юзеров ещё на старом IIS); decommission старого IIS на RUVDS 80.64.31.36 после soak (оставлен для rollback); опц. apex→www 301 canonical (SEO). bare `/products`→404 но unlinked.
**Branch:** n/a | **Notify:** victor/pilonuxt ✓
<!-- HISTORICAL (pre-cutover) ниже -->
**Status (pre-cutover):** blocked
**Where I stopped (2026-06-14 21:05):** pilonuxt пофиксил content-api (`@snollajs/data@0.9.1` — models-load баг + `tedious` в `nitro.externals.traceInclude`), тег `961a838` (все прошлые битые). Перекатил stack 16. **Полный re-smoke (curl весь меню 21 стр + viewModel по каждому + браузер Playwright + скрин):** viewModel 200 везде (был 500), все страницы меню 200 с реальным контентом (категории/товары/услуги/инфо), товар-стр 200, картинки imgproxy 200 webp, браузер-консоль 0 ошибок, верстка целая. **ОСТАЛСЯ РЕАЛЬНЫЙ БАГ: пункт меню «Продукция» → `/products` → 404** (битый линк, до cutover нельзя). Мелочи: `/blog`+`/services/building/projects/` viewModel 404 (страницы 200), Я.Метрика external не грузится (не баг app). Форма contacts → email НЕ гонял (живой email, жду решение). Скрин `pilonuxt-home-smoke.jpeg`. Inbox pilonuxt отправлен (21:05). **Where I stopped (2026-06-14 21:05):** pilonuxt пофиксил content-api (`@snollajs/data@0.9.1` — models-load баг + `tedious` в `nitro.externals.traceInclude`), тег `961a838` (все прошлые битые). Перекатил stack 16. **Полный re-smoke (curl весь меню 21 стр + viewModel по каждому + браузер Playwright + скрин):** viewModel 200 везде (был 500), все страницы меню 200 с реальным контентом (категории/товары/услуги/инфо), товар-стр 200, картинки imgproxy 200 webp, браузер-консоль 0 ошибок, верстка целая. **ОСТАЛСЯ РЕАЛЬНЫЙ БАГ: пункт меню «Продукция» → `/products` → 404** (битый линк, до cutover нельзя). Мелочи: `/blog`+`/services/building/projects/` viewModel 404 (страницы 200), Я.Метрика external не грузится (не баг app). Форма contacts → email НЕ гонял (живой email, жду решение). Скрин `pilonuxt-home-smoke.jpeg`. Inbox pilonuxt отправлен (21:05).
**Next action:** pilonuxt чинит `/products` 404 → новый тег → pull+stack16 update → добить smoke (/products + форма). Согласовать с vitya: тест формы contacts (live [SMOKE TEST] vs закрыть по verified). Cutover www.pilorama98.ru — после закрытия /products + формы. **Next action:** pilonuxt чинит `/products` 404 → новый тег → pull+stack16 update → добить smoke (/products + форма). Согласовать с vitya: тест формы contacts (live [SMOKE TEST] vs закрыть по verified). Cutover www.pilorama98.ru — после закрытия /products + формы.
**Blocker:** pilonuxt: пункт меню «Продукция» → /products → 404 (роут/CMS-страница отсутствует либо нужен редирект на /catalog). **Blocker:** pilonuxt: пункт меню «Продукция» → /products → 404 (роут/CMS-страница отсутствует либо нужен редирект на /catalog).

View File

@@ -21,22 +21,23 @@
services: services:
pilonuxt: pilonuxt:
container_name: pilonuxt container_name: pilonuxt
image: registry.kzntsv.site/pilonuxt:961a838 image: registry.kzntsv.site/pilonuxt:125a3e2
restart: unless-stopped restart: unless-stopped
environment: environment:
NODE_ENV: production NODE_ENV: production
TZ: Europe/Moscow TZ: Europe/Moscow
NITRO_HOST: 0.0.0.0 NITRO_HOST: 0.0.0.0
NITRO_PORT: "3000" NITRO_PORT: "3000"
# Smoke на временном поддомене — гасим боевую аналитику, чтобы не лить # CUTOVER 2026-06-15: боевой домен www.pilorama98.ru — аналитика ВКЛ
# тестовый трафик в GTM-MNNXFJ6. На cutover вернуть дефолт (убрать строку). # (дефолт GTM-MNNXFJ6, env не задаём). На smoke-поддомене гасили `""`.
NUXT_PUBLIC_GTM_ID: ""
networks: networks:
- proxy - proxy
labels: labels:
traefik.enable: "true" traefik.enable: "true"
traefik.http.routers.pilonuxt.entrypoints: websecure traefik.http.routers.pilonuxt.entrypoints: websecure
traefik.http.routers.pilonuxt.rule: Host(`pilonuxt.vds.kzntsv.site`) # Боевые хосты pilorama98 (DNS → 89.253.255.94, cutover с RUVDS IIS) +
# pilonuxt.vds.kzntsv.site оставлен для прямого smoke/диагностики.
traefik.http.routers.pilonuxt.rule: Host(`www.pilorama98.ru`) || Host(`pilorama98.ru`) || Host(`pilonuxt.vds.kzntsv.site`)
traefik.http.routers.pilonuxt.tls.certresolver: letsEncrypt traefik.http.routers.pilonuxt.tls.certresolver: letsEncrypt
traefik.http.services.pilonuxt.loadbalancer.server.port: "3000" traefik.http.services.pilonuxt.loadbalancer.server.port: "3000"