Files
admin/host-stacks/vds-kzntsv/on-snolla.compose.yml
vitya 9705468ef4 feat(on-snolla): Portainer stack 22 source-of-truth (staging Host, mem_limit 512m, 8 env secrets)
on.snolla.com snolla-app live behind traefik on staging Host on-snolla.vds.kzntsv.site.
Image registry.kzntsv.site/on-snolla:473923e494db (snolla 0.42.1). Pending DNS cutover
(reg.ru on.snolla.com A 80.64.31.36 -> 89.253.255.94, then PUT rule -> Host(on.snolla.com)).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-20 13:17:59 +03:00

57 lines
3.7 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.
# 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).
#
# Домен: STAGING-Host on-snolla.vds.kzntsv.site (wildcard -> VDS). Cutover: flip DNS reg.ru -> 89.253.255.94,
# затем PUT rule -> Host(`on.snolla.com`), LE-серт issued on first hit. Прод-оракул до cutover = RUVDS IIS
# (80.64.31.36), жив, не тронут. Rollback = revert DNS -> 80.64.31.36 ИЛИ PUT стека назад на тег.
#
# 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
# STAGING-RULE. Cutover: после flip DNS reg.ru -> 89.253.255.94 (verify авторит. NS) сменить на Host(`on.snolla.com`).
traefik.http.routers.on-snolla.rule: Host(`on-snolla.vds.kzntsv.site`)
traefik.http.routers.on-snolla.tls.certresolver: letsEncrypt
traefik.http.services.on-snolla.loadbalancer.server.port: "5000"
networks:
proxy:
external: true