diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 6919be5..5c02667 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -489,3 +489,53 @@ 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. + +**Сборка:** +- `docker build --secret id=verdaccio_token,env=VERDACCIO_TOKEN -t /pilonuxt: .` +- `VERDACCIO_TOKEN` — ЖИВОЙ JWT (len ~300, 2 точки), User-env этой же машины (где `pass`). НЕ legacy-opaque (len ~196). Детали: pilonuxt `.wiki/concepts/verdaccio-token-lifecycle.md`. +- Билд ходит в сеть: `verdaccio.kzntsv.site` (пакеты) + `mssql.kzntsv.site:1433` (postinstall→schema-gen генерит `src/generated/` из CMS-БД по `config/default.json`). Если собираешь там, где CMS-БД недоступна — предгенери `yarn schema-gen` и положи `src/generated/` в контекст (schema-gen в билде тогда пропустится). +- Многостадийный, нативных модулей НЕТ (better-sqlite3 выпилен) → build-toolchain не нужен. + +**Runtime egress из контейнера:** +- `mssql.kzntsv.site:1433` — живые запросы CMS (cacheTimeout=0), обязателен. +- `smtp.yandex.ru:465` — письма форм (contacts/checkout). +- Собственный публичный origin — SSR self-call на `/snolla` через `useRequestURL().origin` (`app/plugins/snolla.ts`). Контейнер должен резолвить+достигать свой публичный домен через Traefik. До cutover домена origin-петля на боевом не замкнётся. + +**Env:** +- build: `VERDACCIO_TOKEN` (secret, НЕ ARG/ENV — иначе осядет в слоях). +- runtime (опц.): `NITRO_PORT`(деф 3000), `NITRO_HOST`(деф 0.0.0.0), `NUXT_PUBLIC_GTM_ID`(деф боевой `GTM-MNNXFJ6`; пустой → выкл), `NUXT_PUBLIC_SNOLLA_BASE_URL`(деф `/snolla`). +- Секреты (MSSQL/SMTP/imgproxy key+salt/siteId) ЗАПЕЧЕНЫ в `config/default.json` внутри образа (решение vitya — образ только в приватном registry). Env-override не настроен. + +**Контекст инфры (с твоей доски):** +- imgproxy на books-vds (стек 29/30); у фронта `/imgproxy/**` = routeRule-редирект на `imgproxy.kzntsv.site`. +- ⚠️ Известный gap: snolla-side `content-api/routes/assets.js` — пустой stub (ты флагал в `migrate-assets-originals-to-s3`); без него часть картинок может не рендериться. Проверь на smoke. +- Прод `www.pilorama98.ru` сейчас = легаси MoreThenCms. Cutover домена — решение vitya: деплой на временный поддомен (напр. `pilonuxt.vds.kzntsv.site`) для smoke ИЛИ сразу боевой — согласуй. + +**Acceptance:** +1. Образ собран и в registry. +2. Portainer-стек за Traefik, healthy. +3. Smoke: главная 200 + SSR-разметка (не 500); товары/категории из CMS; картинки рендерятся; форма contacts шлёт письмо. +4. Доклад в inbox `victor/pilonuxt`: URL, имя стека/тег образа, итог smoke. + +## Обязательные скилы — вызвать до начала +- invoke `using-tasks` — статус задачи +- invoke `project-discipline` — дисциплина коммитов/пушей +- invoke `using-vds-ops` — диагностика контейнеров VDS +- invoke `using-projects-meta` — cross-project (notify pilonuxt, чтение pilonuxt-вики) +- invoke `using-wiki` после деплоя — заингесть итог в `.admin/.wiki/concepts/` + +**TDD:** нет — ops/deploy, не код. +**Разрешения:** интерны: нет | автопуш инфра-конфигов: да +**weight:** needs-human (deploy-инфра) +**notify:** victor/pilonuxt + +**Status:** ready +**Where I stopped:** (not started) +**Next action:** Прочитать pilonuxt Dockerfile + .wiki/concepts/verdaccio-token-lifecycle.md; собрать образ с verdaccio build-secret; согласовать с vitya целевой домен (боевой www.pilorama98.ru vs временный поддомен для smoke). +**Branch:** n/a +**Notify:** victor/pilonuxt + + +---