Files
admin/host-stacks/vds-kzntsv/labtools-pro.compose.yml
vitya c3c79b996a feat(labtools.pro): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)
4-й сайт тиража v3 (on-snolla, kupimknigi, labtools.ru, labtools.pro — 4/6 GREEN).
Stack 19 image 0610432→a106622, env 8/8 preserved, mem_limit 512m.

Staging :5081 parity-gate GREEN: theme lato.css 200 9994B md5-identical
(v3 aws-sdk v3 S3-direct read из vds MinIO 2025), sitemap 7 детей == live,
order-parity press-forms 12 изделий, / 4-байт diff = og:url/og:image
request-host (benign). Live smoke GREEN, TLS CN=labtools.pro не тронут.
Rollback = labtools-pro:0610432 (0.42.1, жив в registry).

Compose source-of-truth + runbook v3 секция + handoff обновлены.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-30 17:36:36 +03:00

61 lines
3.9 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.
# labtools-pro — прод-фронт labtools.pro (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).
#
# Модель: НЕ pilonuxt/Nuxt-contentApi. Это монолит @snollajs/snolla (0.28.7) — читает БД-контент
# MoreThenCms (mssql.kzntsv.site) + server-side Liquid render. Ассеты из MinIO (minio.kzntsv.site)
# через imgproxy (imgproxy.kzntsv.site). node-config: NODE_ENV=production → default(dev,gitignored)+
# production.json+ENV-override. КАТАЛОЖНЫЙ сайт (secции /products/*, редиректы).
#
# Образ собирается АДМИНОМ на VDS из victor/labtools.pro/deploy/Dockerfile (build-arg VERDACCIO_TOKEN,
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы labtools.pro.
# ⚠️ Имя образа labtools-pro (НЕ labtools — тот у labtools.ru).
#
# Домен: STAGING — labtools-pro.vds.kzntsv.site (под wildcard *.vds.kzntsv.site, cert LE HTTP-01 авто).
# Cutover live labtools.pro/www.labtools.pro — ОТДЕЛЬНЫЙ gated шаг: бой живой на RUVDS IIS, НЕ выводить.
# DNS переключает ОПЕРАТОР. ⚠️ НЕ путать с labtools.ru — тот флипается отдельно. План отката = revert DNS.
#
# Runtime egress (наружу из proxy-сети): mssql.kzntsv.site:1433, minio.kzntsv.site:443,
# imgproxy.kzntsv.site:443, smtp.yandex.ru:465.
#
# Секреты — 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=663F9410-A6CC-4651-9A5C-62844A313957 — non-secret, в production.json (не env).
services:
labtools-pro:
container_name: labtools-pro
image: registry.kzntsv.site/labtools-pro:a106622 # git-sha victor/labtools.pro master (snolla 0.43.2 v3 aws-sdk v2→v3, bump 2026-07-30; prev 0610432=0.42.1=rollback)
restart: unless-stopped
mem_limit: 512m # guardrail от runaway: snolla baseline ~100-200M; OOM в контейнере → restart:unless-stopped поднимет. standalone-compose → mem_limit (НЕ deploy.resources — то swarm-only).
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.labtools-pro.entrypoints: websecure
# CUTOVER 2026-07-02: DNS labtools.pro/www флипнут на VDS (89.253.255.94) оператором.
# Проверено авторитетным ns1.reg.ru + 8.8.8.8 → 89.253.255.94 (НЕ labtools.ru!). Боевые хосты.
# staging-хост labtools-pro.vds.kzntsv.site УБРАН post-cutover. RUVDS IIS 80.64.31.36 — rollback, не тронут.
traefik.http.routers.labtools-pro.rule: Host(`labtools.pro`) || Host(`www.labtools.pro`)
traefik.http.routers.labtools-pro.tls.certresolver: letsEncrypt
traefik.http.services.labtools-pro.loadbalancer.server.port: "5000"
networks:
proxy:
external: true