Развёртывание защищённых 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.
Каталоги сервера¶
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.
Проверки перед запуском¶
- Проверить неизменяемые image ID и свободное место.
- Выполнить
docker compose config --quietдля edge, DEV и STAGE. - Проверить Caddyfile через
caddy validateвнутри закреплённого Caddy image. Одновременно черезcaddy adaptпроверить оба Product App imports, sensitive route matcher и URI/Referer filters; перенос App между доменами блокируется без переноса security contract. - Запустить DEV, проверить health и HTTPS.
- Запустить STAGE с теми же image ID, проверить изоляцию volumes/networks и HTTPS.
Перед запуском API и worker одноразовый сервис migrate применяет журналируемые Drizzle-миграции. До миграции существующей базы обязателен logical dump. Пустые Auth/email-переменные оставляют Auth выключенным; частично заданная или смешанная Gmail/Resend-конфигурация останавливает API по fail-closed правилу.
Откат¶
- Вернуть предыдущие значения image ID в env конкретной среды.
- Выполнить
docker compose up -d --waitтолько для затронутого проекта. - Если первый deploy полностью отменяется — остановить
skuaro-edge,skuaro-devиskuaro-stage; volumes не удалять. - DNS не меняется при откате, если записи уже указывают на согласованный тестовый сервер.
Удаление volumes, образов, release-каталогов или секретов в автоматический откат не входит.