Files
admin/host-stacks/vds-kzntsv/kupimknigi.compose.yml
vitya 78f23a6561 cutover(kupimknigi): LIVE на VDS — DNS reg.ru→89.253.255.94, боевой Host в стек 21, LE-серт GREEN
Оператор флипнул DNS, подтверждён на ns1+ns2.reg.ru. Боевой Host(kupimknigi.spb.ru)
в стек 21 (staging-host убран), LE-серт CN=kupimknigi.spb.ru valid Jul5→Oct3.
Live-smoke GREEN: /→200 H1, robots/тема-css 200, callback 301. RUVDS=rollback.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 10:50:35 +03:00

62 lines
4.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# kupimknigi — прод-фронт kupimknigi.spb.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.42.0) / core (0.24.0) / data (0.14.1) — читает БД-контент
# MoreThenCms (mssql.kzntsv.site) + server-side Liquid render. Ассеты из MinIO (minio.kzntsv.site)
# через imgproxy (imgproxy.kzntsv.site). ПРОСТОЙ ОДНОСТРАНИЧНИК: Pages=1 (`/`), Forms=1 (`/callback-order` POST).
# Каталога/стора/блога/фида/редиректов НЕТ. node-config: NODE_ENV=production → production.json + ENV-override.
# siteId=E924A354-0377-4E1E-80C6-2EB0194AA55F, siteUrl=https://kupimknigi.spb.ru (БЕЗ www — www мёртв) — в production.json (запечён).
#
# Образ собирается АДМИНОМ на VDS из victor/kupimknigi.spb.ru/deploy/Dockerfile (build-arg VERDACCIO_TOKEN,
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы kupimknigi.spb.ru (9608ff6).
#
# Домен: STAGING — kupimknigi.vds.kzntsv.site (под wildcard *.vds.kzntsv.site, cert LE HTTP-01 авто).
# Cutover live kupimknigi.spb.ru — ОТДЕЛЬНЫЙ gated шаг: бой сейчас на RUVDS IIS (80.64.31.36, майская iis-migration).
# DNS/порядок cutover разрешает ОПЕРАТОР отдельно. План отката = revert DNS → RUVDS. RUVDS не тронут.
# ⚠️ Боевой Host-rule добавлять ТОЛЬКО ПОСЛЕ flip DNS (иначе LE HTTP-01 упадёт на RUVDS → rate-limit).
#
# Runtime egress (наружу из proxy-сети): mssql.kzntsv.site:1433, minio.kzntsv.site:443,
# imgproxy.kzntsv.site:443, smtp.yandex.ru:465 (форма callback-order).
#
# Секреты — env на VDS (Portainer stack env), НЕ в образ, НЕ в git. Значения ${...} инжектит Portainer
# из stack-переменных (те же 8 общего snolla-тенанта, verbatim из labtools/tandemmebel). Контракт
# (custom-environment-variables.json): DB_USER DB_PASSWORD IMGPROXY_KEY IMGPROXY_SALT
# S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY SMTP_USER SMTP_PASSWORD
services:
kupimknigi:
container_name: kupimknigi
image: registry.kzntsv.site/kupimknigi:9608ff6 # git-sha victor/kupimknigi.spb.ru (snolla 0.42.0 / core 0.24.0 / data 0.14.1)
restart: unless-stopped
environment:
NODE_ENV: production
TZ: Europe/Moscow
# PORT не переопределяем — образ дефолтит 5000 (EXPOSE 5000, healthcheck на robots.txt)
# --- 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.kupimknigi.entrypoints: websecure
# CUTOVER 2026-07-05: DNS kupimknigi.spb.ru флипнут на VDS (89.253.255.94) оператором (reg.ru).
# Проверено ОБА авторитетных reg.ru-NS (ns1+ns2) согласованно → 89.253.255.94 (было 80.64.31.36 RUVDS).
# Боевой хост (БЕЗ www — мёртв). staging-хост kupimknigi.vds.kzntsv.site УБРАН post-cutover.
# RUVDS IIS 80.64.31.36 — rollback (revert DNS), не тронут.
traefik.http.routers.kupimknigi.rule: Host(`kupimknigi.spb.ru`)
traefik.http.routers.kupimknigi.tls.certresolver: letsEncrypt
traefik.http.services.kupimknigi.loadbalancer.server.port: "5000"
networks:
proxy:
external: true