deploy(emspb): b6e361a LIVE on vds-kzntsv — staging GREEN + cutover done
- image registry.kzntsv.site/emspb:b6e361a (digest 8f5ba02) built on VDS from clean git-archive - Portainer stack emspb (Id 18) traefik+LE; 8 runtime-env secrets reused verbatim from labtools stack-17 - staging smoke vs prod www.emspb.ru: 23/23 status-parity, theme CSS+image (MinIO) md5-identical, CC 86400 - cutover (operator flipped emspb.ru/www DNS -> VDS): traefik-rule Host(emspb.ru)||Host(www.emspb.ru), staging host emspb.vds.kzntsv.site removed post-cutover (-> 404), single LE cert, live smoke www.emspb.ru+emspb.ru 200 ssl_verify=0, canonical normalized, live == old-RUVDS byte-identical - RUVDS IIS 80.64.31.36 intact = rollback path - runbook .wiki/concepts/emspb-vds-deploy-runbook.md (mirror labtools) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
56
host-stacks/vds-kzntsv/emspb.compose.yml
Normal file
56
host-stacks/vds-kzntsv/emspb.compose.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
# emspb — прод-фронт emspb.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).
|
||||
#
|
||||
# Модель: НЕ pilonuxt/Nuxt-contentApi. Это монолит @snollajs/snolla — читает БД-контент 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.
|
||||
#
|
||||
# Образ собирается АДМИНОМ на VDS из victor/emspb.ru/deploy/Dockerfile (build-arg VERDACCIO_TOKEN,
|
||||
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы emspb.ru.
|
||||
#
|
||||
# Домен: STAGING — emspb.vds.kzntsv.site (под wildcard *.vds.kzntsv.site, cert LE HTTP-01 авто).
|
||||
# Cutover live www.emspb.ru — ОТДЕЛЬНЫЙ gated шаг: бой живой на текущем хостинге, НЕ выводить.
|
||||
# DNS переключает ОПЕРАТОР по сигналу «staging green». План отката = 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-переменных. Контракт (custom-environment-variables.json):
|
||||
# DB_USER DB_PASSWORD IMGPROXY_KEY IMGPROXY_SALT S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY SMTP_USER SMTP_PASSWORD
|
||||
# siteId=96EBC481-D26A-47BE-B660-13D49E7D0A61 — non-secret, в production.json (не env).
|
||||
|
||||
services:
|
||||
emspb:
|
||||
container_name: emspb
|
||||
image: registry.kzntsv.site/emspb:b6e361a # git-sha victor/emspb.ru master
|
||||
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.emspb.entrypoints: websecure
|
||||
# CUTOVER 2026-07-02: DNS emspb.ru/www флипнут на VDS (89.253.255.94) оператором. Боевые хосты.
|
||||
# staging-хост emspb.vds.kzntsv.site УБРАН post-cutover (2026-07-02). RUVDS IIS 80.64.31.36 — rollback, не тронут.
|
||||
traefik.http.routers.emspb.rule: Host(`emspb.ru`) || Host(`www.emspb.ru`)
|
||||
traefik.http.routers.emspb.tls.certresolver: letsEncrypt
|
||||
traefik.http.services.emspb.loadbalancer.server.port: "5000"
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
Reference in New Issue
Block a user