Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚪 Gate

🏠 Главное

🚪 Единственный вход машины. Держит 80 и 443, владеет сертификатом и знает карту: какой порт — чей сосед.

🧭 Вход ничей. Он не часть продукта и никогда ею не станет: продуктов за ним несколько, они живут в своих репозиториях и переезжают порознь. Отдай вход одному из них — и остальные окажутся его гостями, а их доступность станет его заботой.

🎯 Смысл границы: за входом можно менять что угодно, не трогая вход, и наоборот. Соседи друг о друге не знают вовсе — знает только карта, и она здесь одна.

🧩 Анатомия

Часть Назначение
compose.yaml nginx с картой и клиент за сертификатом — больше ничего
nginx/templates/00-tls сертификат и общие для всех соседей заголовки
nginx/templates/01-entry 80 порт: проверка сертификата и переезд на https
nginx/templates/30-neurobox-console сосед на 443 и 8443 — пульт бокса
nginx/templates/40-presets сосед на 9787 — служба пресетов зоны скинов, без авторизации

➕ Добавить соседа — положить рядом один файл: порт, имя сети, имя контейнера, и опубликовать порт в compose.yaml. Всё, что вход знает о соседе, помещается в эти строки, и это не бедность описания, а его граница.

🔀 Почему соседи разведены портами, а не путями

Сосед сейчас один и стоит на главном порту (и на 8443 заодно — адрес остался от короткого соседства с витриной). Правило записано заранее, до второго соседа, и не зря.

Браузер считает два места разными, только если у них различается схема, имя или порт. Пути он не различает вовсе. Поселив соседей на общий порт по разным путям, мы получили бы для браузера одно место: общее хранилище, общие права, общий доступ к чужому API от имени вошедшего. Дыра в одном стала бы дырой в другом — при том что у продуктов нет ни строчки общего кода.

⚠️ Что порты не чинят: куки портами не разделяются. Кука, поставленная на одном порту, уедет и на соседний. Поэтому сосед, которому важна изоляция, кук не использует — это его забота, а не входа.

🏁 Правильный конец истории — домен: поддомены разводят соседей по-настоящему, и все живут на 443. Тогда из карты уходят порты и появляются имена; больше здесь не меняется ничего.

🔐 Сертификат

Выписан на машину, а не на продукт: соседей несколько, и свой сертификат каждому означал бы выдачу на каждого новосёла.

Выдача — разовым шагом в обычном подъёме, до nginx: без сертификата nginx не стартует, а уже поднятый занял бы порт, нужный проверке. Повторный запуск при живом сертификате не делает ничего, поэтому шаг и стоит в подъёме, а не в инструкции, которую забудут выполнить.

Продление — через файл на диске у живого nginx, не занимая порт. Обычный способ (занять порт на время проверки) требует остановить вход, а сертификат здесь живёт неделю: сайт исчезал бы на минуту раз в несколько дней.

Когда продлевать, решает сам удостоверяющий центр: клиент спрашивает его об этом и следует ответу. Своя формула на коротком сертификате промахивается легко, а промах виден только просроченным замком у посетителя.

⚠️ Клиент здесь lego, а не certbot, и это вынужденно. На голый АДРЕС (в отличие от домена) certbot выписывать отказывается сам, у себя, ещё до обращения к центру — и в контейнере, и поставленный на машину, одинаково. Центр при этом такой сертификат выдаёт спокойно: lego его получает с первой попытки. Пока у машины нет домена, выбор клиента предопределён этим.

🚀 Использование

cp .env.example .env
docker compose up -d

Сети соседей должны существовать: вход к ним подключается, но не заводит их. Это названо ценой прямо — карта, ведущая в место, которого нет, не работает по определению.

Проверить карту, не поднимая:

docker compose config -q

🔌 ИО

📥 На входе — запросы из сети и файлы сертификата. 📤 На выходе — те же запросы соседям по внутренним сетям докера, уже без TLS.

🚦 Упал сосед — вход отдаёт 502 и живёт дальше. Упал вход — снаружи не видно никого: это его единственная настоящая ответственность, и других он на себя не берёт.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages