Перейти к содержанию

Развёртывание защищённых DEV и STAGE

Контур предназначен только для демонстрационного прототипа без реальных клиентских данных.

Фактически действующая конфигурация пока публикует STAGE приложения на skuaro.top. Решение 0019 приняло новую целевую схему: Site — skuaro.top, App — lk.skuaro.top, user docs — doc.skuaro.top, developer docs — dev-doc.skuaro.top. До отдельного изменения DNS, Caddy и Compose этот runbook описывает существующий runtime, а не выполненную миграцию.

Схема

  • При продвижении релиза skuaro-dev и skuaro-stage используют один и тот же набор image ID без пересборки между средами. Во время активной разработки допускается обновлять только DEV по явному решению владельца.
  • У каждой среды отдельные PostgreSQL volume, credentials, networks, runtime config и loopback web-порт.
  • Единственный внешний ingress — Caddy на портах 80/443.
  • Публичные Auth-маршруты dev.skuaro.top открыты без общего Basic Auth; /settings, /today, /admin/* защищает SKUARO Auth и backend effective access.
  • DEV API reference, STAGE Product, Site и Docs открываются без Basic Auth. Серверный пароль может появиться только по отдельному прямому запросу владельца.
  • Все тестовые домены сохраняют заголовок X-Robots-Tag: noindex.
  • Все Product App runtime применяют единый Auth security contract решения 0026: глобальный Referrer-Policy: no-referrer, исключение sensitive verification/reset routes из edge access log и URI/Referer redaction в edge/app process logs.
  • Фактический skuaro.top импортирует этот contract только пока обслуживает legacy STAGE App. При миграции решения 0019 import снимается с Site и переносится на lk.skuaro.top; будущий lk.skuaro.com применяет эквивалентный PROD App contract.
  • API остаётся same-origin; frontend проксирует /api/* в API своей среды.
  • Server image собирает composition roots вместе с modules/, platform/ и integrations/; API запускается из apps/api/dist/apps/api/src/server.js, куда TypeScript включает текущие platform/integration sources.

Каталоги сервера

/opt/skuaro/
├── releases/<artifact-id>/
├── dev/
├── stage/
├── edge/
└── backups/

Remote .env и runtime config создаются с правами 600. Неиспользуемые исторические Basic Auth credentials не подключаются к runtime; значения секретов не хранятся в Git.

STAGE не обязан быть очищен до runtime-only состава. Checkout, .git, исходники, тесты, миграции, внутренние инструкции и инструменты допустимы, если они нужны выбранному процессу проверки или deploy. Это не отменяет запрет на секреты в Git, реальные клиентские данные и смешивание сред.

Для PostgreSQL DEV и STAGE подготовлен ежедневный logical dump через skuaro-backup.timer; timer включается только отдельным решением. Автоматическое удаление старых копий не выполняется до отдельного решения о retention.

Проверки перед запуском

  1. Проверить неизменяемые image ID и свободное место.
  2. Выполнить docker compose config --quiet для edge, DEV и STAGE.
  3. Проверить Caddyfile через caddy validate внутри закреплённого Caddy image. Одновременно через caddy adapt проверить оба Product App imports, sensitive route matcher и URI/Referer filters; перенос App между доменами блокируется без переноса security contract.
  4. Запустить DEV, проверить health и HTTPS.
  5. Запустить STAGE с теми же image ID, проверить изоляцию volumes/networks и HTTPS.

Перед запуском API и worker одноразовый сервис migrate применяет журналируемые Drizzle-миграции. До миграции существующей базы обязателен logical dump. Пустые Auth/email-переменные оставляют Auth выключенным; частично заданная или смешанная Gmail/Resend-конфигурация останавливает API по fail-closed правилу.

Откат

  1. Вернуть предыдущие значения image ID в env конкретной среды.
  2. Выполнить docker compose up -d --wait только для затронутого проекта.
  3. Если первый deploy полностью отменяется — остановить skuaro-edge, skuaro-dev и skuaro-stage; volumes не удалять.
  4. DNS не меняется при откате, если записи уже указывают на согласованный тестовый сервер.

Удаление volumes, образов, release-каталогов или секретов в автоматический откат не входит.