DNS reg.ru on.snolla.com A -> 89.253.255.94 (operator flip, authoritative NS verified). Traefik rule swapped staging->Host(on.snolla.com), LE cert issued (CN=on.snolla.com, YR1, until 2026-10-18). Live-smoke GREEN, homepage byte-identical prod-HTML, sitemap 3/3 parity. RUVDS IIS untouched (rollback = revert DNS). - compose source-of-truth updated to LIVE rule. - runbook .wiki/concepts/on-snolla-vds-deploy-runbook.md (cutover as-built + gotchas: snolla robotsTxt crash on undefined app.locals.domain, no Liquid form-tag, /c dead-link parity, Portainer JWT re-auth before PUT). Co-Authored-By: Claude <noreply@anthropic.com>
61 lines
4.2 KiB
YAML
61 lines
4.2 KiB
YAML
# on-snolla — посадочная on.snolla.com (snolla-app, 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.1) / core / liquid / data — читает БД-контент MoreThenCms
|
||
# (mssql.kzntsv.site) + server-side Liquid render. Ассеты из MinIO (minio.kzntsv.site). In-process sharp,
|
||
# delivery=serve-bytes, cache=local-variant. imgproxy в путях нет (как tandemmebel — сырой /imgproxy -> 404 норма).
|
||
# node-config: NODE_ENV=production -> default(dev,gitignored)+production.json+ENV-override.
|
||
# ЛЕНДИНГ (1 Page / + 2 StaticPages), БЕЗ блога/каталога/e-commerce.
|
||
#
|
||
# Образ собирается АДМИНОМ на VDS из victor/on.snolla.com/deploy/Dockerfile (build-arg VERDACCIO_TOKEN,
|
||
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha репо on.snolla.com (текущий 473923e494db).
|
||
# Homepage render byte-identical прод-HTML (verified direct diff + completeness-gate 3/3 loc parity 2026-07-20).
|
||
#
|
||
# Домен: LIVE — on.snolla.com (cert LE HTTP-01, CN=on.snolla.com, issued 2026-07-20, until 2026-10-18).
|
||
# Cutover завершён 2026-07-20: DNS reg.ru on.snolla.com A 80.64.31.36 -> 89.253.255.94 (operator flip,
|
||
# авторит. NS ns1/ns2.reg.ru verified -> VDS), traefik rule staging->боевой (LE-порядок соблюдён),
|
||
# LE-серт issued on first hit. Live-smoke GREEN, homepage byte-identical прод-HTML, sitemap 3/3 parity.
|
||
# Предыстория: жил на RUVDS IIS (80.64.31.36) до 2026-07-20. RUVDS IIS не тронут (rollback = revert DNS).
|
||
# План отката = revert DNS reg.ru -> 80.64.31.36 (RUVDS IIS жив) ИЛИ PUT стека 22 назад на тег (пока
|
||
# единственный тег 473923e494db = :latest — первый deploy; образных rollback-тегов пока нет).
|
||
#
|
||
# Runtime egress: mssql.kzntsv.site:1433, minio.kzntsv.site:443 (оригиналы + variant-cache), smtp.yandex.ru:465.
|
||
#
|
||
# Секреты — env на VDS (Portainer stack env), НЕ в образ, НЕ в git. Значения ${...} инжектит Portainer
|
||
# из stack-переменных (переиспользованы verbatim из tandemmebel стека 20 — общая snolla-инфра). Контракт:
|
||
# DB_USER DB_PASSWORD IMGPROXY_KEY IMGPROXY_SALT S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY SMTP_USER SMTP_PASSWORD
|
||
# siteId=B9ECDB50-2B93-4CE5-B238-A9918B3F9CF7 — non-secret, в production.json (не env). Culture en. siteUrl=https://on.snolla.com
|
||
|
||
services:
|
||
on-snolla:
|
||
container_name: on-snolla
|
||
image: registry.kzntsv.site/on-snolla:473923e494db # git-sha victor/on.snolla.com master 473923e494db (snolla 0.42.1). rollback-теги в registry: 473923e494db (:latest он же — первый deploy, отката пока нет, revert DNS -> RUVDS).
|
||
restart: unless-stopped
|
||
mem_limit: 512m # guardrail: snolla baseline ~100-200M; OOM -> restart. standalone-compose -> mem_limit (НЕ deploy.resources, swarm-only).
|
||
environment:
|
||
NODE_ENV: production
|
||
TZ: Europe/Moscow
|
||
# --- 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.on-snolla.entrypoints: websecure
|
||
# LIVE (cutover 2026-07-20). Rollback = Host(`on-snolla.vds.kzntsv.site`) + revert DNS -> 80.64.31.36.
|
||
traefik.http.routers.on-snolla.rule: Host(`on.snolla.com`)
|
||
traefik.http.routers.on-snolla.tls.certresolver: letsEncrypt
|
||
traefik.http.services.on-snolla.loadbalancer.server.port: "5000"
|
||
|
||
networks:
|
||
proxy:
|
||
external: true |