Files
admin/host-stacks/vds-kzntsv/pilonuxt.compose.yml

57 lines
3.4 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.
# pilonuxt — prod-фронт ПИЛОРАМА98 (Nuxt 4 / Nitro node-server) на vds-kzntsv (89.253.255.94).
#
# Деплой: Portainer-стек за Traefik. Source-of-truth этого compose — admin-репо;
# применяется через Portainer API/UI (VDS-rule: стеки через Portainer, не ssh+compose).
#
# Образ собирается на workstation из МОНОРЕПЫ victor/pilorama98.ru (workspace-build:
# контекст = корень монорепы, -f apps/web/Dockerfile, build secret VERDACCIO_TOKEN живой JWT).
# runner несёт @img/sharp-* нативы (sharp приехал с snolla 0.17, imageResize). Тег = git-sha
# монорепы. Push: с дома .output-слой ловит traefik-499 → docker save | ssh vds 'docker load'
# + docker push С VDS. См. apps/web/.wiki/concepts/docker-deploy.md.
#
# Домен: на smoke-фазе — временный поддомен pilonuxt.vds.kzntsv.site (под wildcard
# *.vds.kzntsv.site, cert LE HTTP-01 авто). Cutover www.pilorama98.ru — отдельным
# шагом после зелёного smoke (правка rule + DNS reg.ru).
#
# Runtime egress (наружу из proxy-сети, по умолчанию открыт):
# mssql.kzntsv.site:1433 (живые CMS-запросы, cacheTimeout=0) — обязателен;
# smtp.yandex.ru:465 (письма форм contacts/checkout);
# собственный origin https://pilonuxt.vds.kzntsv.site (SSR self-call на /snolla).
#
# Секреты (MSSQL/SMTP/imgproxy key+salt/siteId) ЗАПЕЧЕНЫ в config/default.json образа
# (решение vitya — образ только в приватном registry).
# Admin-api env (2026-08-05): JWT_SECRET / DATABASE_URL / S3_* передаются через Portainer
# stack-env. При перекате стека env ОБЯЗАТЕЛЕН (Env:[] очищает секреты — gotcha #10).
services:
pilonuxt:
container_name: pilonuxt
image: registry.kzntsv.site/pilonuxt:1b88cd5
restart: unless-stopped
environment:
NODE_ENV: production
TZ: Europe/Moscow
NITRO_HOST: 0.0.0.0
NITRO_PORT: "3000"
# Admin-api env (2026-08-05, embed в apps/web Nuxt-middleware)
JWT_SECRET: SUz56VIm96HqxLTZhR31BGhrVbAbIZC2R67prRwhzXsywCsd76Qaxlwl93vs9WC9
DATABASE_URL: "sqlserver://mssql.kzntsv.site:1433;database=MoreThenCms;user=snolla;password=fXkH4@8O%3pc;encrypt=true;trustServerCertificate=true"
S3_ACCESS_KEY_ID: AKIAJ2YJP72W6ZHCRE6Q
S3_SECRET_ACCESS_KEY: 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
# CUTOVER 2026-06-15: боевой домен www.pilorama98.ru — аналитика ВКЛ
# (дефолт GTM-MNNXFJ6, env не задаём). На smoke-поддомене гасили `""`.
networks:
- proxy
labels:
traefik.enable: "true"
traefik.http.routers.pilonuxt.entrypoints: websecure
# Боевые хосты pilorama98 (DNS → 89.253.255.94, cutover с RUVDS IIS) +
# pilonuxt.vds.kzntsv.site оставлен для прямого smoke/диагностики.
traefik.http.routers.pilonuxt.rule: Host(`www.pilorama98.ru`) || Host(`pilorama98.ru`) || Host(`pilonuxt.vds.kzntsv.site`)
traefik.http.routers.pilonuxt.tls.certresolver: letsEncrypt
traefik.http.services.pilonuxt.loadbalancer.server.port: "3000"
networks:
proxy:
external: true