Rebuilt pilonuxt from monorepo master c4e34d4 (workspace Dockerfile, sharp @img baked, live VERDACCIO_TOKEN). Canon delivery: build here (425MB) -> docker save | ssh vds load -> push FROM vds -> Portainer stack 16 pullImage:true (tag 6c6d52d->c4e34d4, fresh registry pull). Acceptance MET (in-container smoke on VDS + prod smoke via curl --resolve, bypassing LAN-DNS): 3 product pages 200, leading <meta itemprop="name"> inside schema.org/Product = product title (was only Brand 'Пилорама 98' before). 10 nav routes 200, no regression. Compose SOT -> c4e34d4. Inbox victor/pilorama98.ru sent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
50 lines
2.8 KiB
YAML
50 lines
2.8 KiB
YAML
# pilonuxt — prod-фронт ПИЛОРАМА98 (Nuxt 4 / Nitro node-server) на vds-kzntsv (89.253.255.94).
|
||
#
|
||
# Деплой: Portainer-стек за Traefik. Source-of-truth этого compose — admin-репо;
|
||
# применяется через Portainer API/UI (VDS-rule: стеки через Portainer, не ssh+compose).
|
||
#
|
||
# Образ собирается на workstation из МОНОРЕПЫ victor/pilorama98.ru (workspace-build:
|
||
# контекст = корень монорепы, -f apps/web/Dockerfile, build secret VERDACCIO_TOKEN живой JWT).
|
||
# runner несёт @img/sharp-* нативы (sharp приехал с snolla 0.17, imageResize). Тег = git-sha
|
||
# монорепы. Push: с дома .output-слой ловит traefik-499 → docker save | ssh vds 'docker load'
|
||
# + docker push С VDS. См. apps/web/.wiki/concepts/docker-deploy.md.
|
||
#
|
||
# Домен: на smoke-фазе — временный поддомен pilonuxt.vds.kzntsv.site (под wildcard
|
||
# *.vds.kzntsv.site, cert LE HTTP-01 авто). Cutover www.pilorama98.ru — отдельным
|
||
# шагом после зелёного smoke (правка rule + DNS reg.ru).
|
||
#
|
||
# Runtime egress (наружу из proxy-сети, по умолчанию открыт):
|
||
# mssql.kzntsv.site:1433 (живые CMS-запросы, cacheTimeout=0) — обязателен;
|
||
# smtp.yandex.ru:465 (письма форм contacts/checkout);
|
||
# собственный origin https://pilonuxt.vds.kzntsv.site (SSR self-call на /snolla).
|
||
#
|
||
# Секреты (MSSQL/SMTP/imgproxy key+salt/siteId) ЗАПЕЧЕНЫ в config/default.json образа
|
||
# (решение vitya — образ только в приватном registry). Env-override не настраивали.
|
||
|
||
services:
|
||
pilonuxt:
|
||
container_name: pilonuxt
|
||
image: registry.kzntsv.site/pilonuxt:c4e34d4
|
||
restart: unless-stopped
|
||
environment:
|
||
NODE_ENV: production
|
||
TZ: Europe/Moscow
|
||
NITRO_HOST: 0.0.0.0
|
||
NITRO_PORT: "3000"
|
||
# CUTOVER 2026-06-15: боевой домен www.pilorama98.ru — аналитика ВКЛ
|
||
# (дефолт GTM-MNNXFJ6, env не задаём). На smoke-поддомене гасили `""`.
|
||
networks:
|
||
- proxy
|
||
labels:
|
||
traefik.enable: "true"
|
||
traefik.http.routers.pilonuxt.entrypoints: websecure
|
||
# Боевые хосты 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.services.pilonuxt.loadbalancer.server.port: "3000"
|
||
|
||
networks:
|
||
proxy:
|
||
external: true
|