Ребилд по коррекции workshop: образ tandemmebel:b02ca18 (core 0.16.2 SlugFeedPage-fix, digest f8672218) собран на VDS, стек 20 передеплоен (env 8/8, healthy). DoD-чек GREEN: gallery-грид staging==prod точно на всех 12 роутах, крошки+title наполнены (были пустые), байты 28508≈прод 28253. Предыдущий a173401 давал пустой грид — 0.16.2 закрыл. Флагнул сомнение перед сборкой (DB-дамп: /gallery = конвенционный саб-роут, не feed) — рендер-чек опроверг, фикс сработал. Cutover HELD. Прогеру не пинговал (по указанию оператора). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
61 lines
3.9 KiB
YAML
61 lines
3.9 KiB
YAML
# tandemmebel — прод-фронт tandemmebel.ru (snolla-приложение, server-side Liquid, node) на vds-kzntsv (89.253.255.94).
|
||
#
|
||
# STAGING-FIRST. Source-of-truth этого compose — admin-репо; применяется через Portainer
|
||
# API/UI (VDS-rule: стеки через Portainer, не ssh+compose).
|
||
#
|
||
# Модель: монолит @snollajs/snolla (0.34.0) / @snollajs/core (0.15.0) — читает БД-контент
|
||
# MoreThenCms (mssql.kzntsv.site) + server-side Liquid render. Ассеты из MinIO (minio.kzntsv.site).
|
||
# МЕДИА: in-process sharp (resize+data-driven watermark), delivery=serve-bytes, cache=local-variant→
|
||
# бакет variant-cache в MinIO. imgproxy ИЗ ПУТИ tandem УБРАН (сырой /imgproxy → 404 норма).
|
||
# node-config: NODE_ENV=production → default(dev,gitignored)+production.json+ENV-override.
|
||
# КОНТЕНТ+БЛОГ-ПОРТФОЛИО+category сайт, БЕЗ e-commerce каталога.
|
||
#
|
||
# Образ собирается АДМИНОМ на VDS из victor/tandemmebel.ru/deploy/Dockerfile (build-arg VERDACCIO_TOKEN,
|
||
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы tandemmebel.ru (a173401).
|
||
#
|
||
# Домен: STAGING — tandemmebel.vds.kzntsv.site (под wildcard *.vds.kzntsv.site, cert LE HTTP-01 авто).
|
||
# Cutover live tandemmebel.ru/www.tandemmebel.ru — ОТДЕЛЬНЫЙ gated шаг: бой живой на RUVDS IIS, НЕ выводить.
|
||
# DNS переключает ОПЕРАТОР. План отката = revert DNS → 80.64.31.36.
|
||
# ⚠️ Host-правило боевых хостов добавлять ТОЛЬКО ПОСЛЕ flip DNS (иначе LE HTTP-01 упадёт на RUVDS → rate-limit).
|
||
#
|
||
# Runtime egress (наружу из proxy-сети): mssql.kzntsv.site:1433, minio.kzntsv.site:443
|
||
# (оригиналы + запись вариантов в bucket variant-cache), smtp.yandex.ru:465. imgproxy НЕ нужен (sharp in-process).
|
||
#
|
||
# Секреты — env на VDS (Portainer stack env), НЕ в образ, НЕ в git. Значения ${...} инжектит Portainer
|
||
# из stack-переменных (переиспользованы verbatim из labtools stack Id 17). Контракт:
|
||
# DB_USER DB_PASSWORD IMGPROXY_KEY IMGPROXY_SALT S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY SMTP_USER SMTP_PASSWORD
|
||
# siteId=78080707-F6E0-4330-BA30-7922354C2CEF — non-secret, в production.json (не env). Culture ru-RU. siteUrl=https://www.tandemmebel.ru
|
||
|
||
services:
|
||
tandemmebel:
|
||
container_name: tandemmebel
|
||
image: registry.kzntsv.site/tandemmebel:b02ca18 # git-sha victor/tandemmebel.ru master (core 0.16.2 SlugFeedPage/gallery fix)
|
||
restart: unless-stopped
|
||
environment:
|
||
NODE_ENV: production
|
||
TZ: Europe/Moscow
|
||
# PORT не переопределяем — образ дефолтит 5000 (EXPOSE 5000, healthcheck на $PORT)
|
||
# --- runtime-секреты (значения из Portainer stack env; НЕ хранить тут) ---
|
||
DB_USER: ${DB_USER}
|
||
DB_PASSWORD: ${DB_PASSWORD}
|
||
IMGPROXY_KEY: ${IMGPROXY_KEY}
|
||
IMGPROXY_SALT: ${IMGPROXY_SALT}
|
||
S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID}
|
||
S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY}
|
||
SMTP_USER: ${SMTP_USER}
|
||
SMTP_PASSWORD: ${SMTP_PASSWORD}
|
||
networks:
|
||
- proxy
|
||
labels:
|
||
traefik.enable: "true"
|
||
traefik.http.routers.tandemmebel.entrypoints: websecure
|
||
# STAGING-RULE. Cutover: после flip DNS сменить на Host(`tandemmebel.ru`) || Host(`www.tandemmebel.ru`)
|
||
# и убрать staging-хост. RUVDS IIS 80.64.31.36 — rollback, не тронут.
|
||
traefik.http.routers.tandemmebel.rule: Host(`tandemmebel.vds.kzntsv.site`)
|
||
traefik.http.routers.tandemmebel.tls.certresolver: letsEncrypt
|
||
traefik.http.services.tandemmebel.loadbalancer.server.port: "5000"
|
||
|
||
networks:
|
||
proxy:
|
||
external: true
|