From 42a9402d622dcd23df87602a387f0816a48e6c9e Mon Sep 17 00:00:00 2001 From: bot-backend Date: Wed, 16 Sep 2026 17:21:00 +0300 Subject: [PATCH] =?UTF-8?q?fix(caddy):=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B0=D1=80=D1=85=D0=B8=D0=B2=D0=BE=D0=B2=20Forgejo?= =?UTF-8?q?=20=E2=80=94=20=D0=BE=D0=BD=D0=B0=20=D1=81=D1=8A=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0=20=D0=B4=D0=B8=D1=81=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Внешний обходчик дёргал ///archive/ для каждого коммита, Forgejo на каждый запрос пересобирал снапшот репозитория (20-30 МБ) и клал в кэш repo-archive. Штатная уборка идёт раз в сутки, генерация — около ста файлов в час. Кэш вырос до 55 ГБ при диске 145 ГБ и ел 2 ГБ/ч (замерено контрольным df за 120 с); до нуля свободного места оставалось ~12 часов. 73 из 78 обращений к архивам за шесть часов пришли с одного адреса. Отказ, а не rate limit: даже один запрос в минуту даёт 30 МБ/мин новых файлов при суточной уборке. На git clone/fetch и на CI не влияет — смарт- протокол ходит другими путями. Цена: анонимная кнопка «скачать архив» в вебе перестаёт работать. `caddy validate` — Valid configuration. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG --- caddy/sites/infra.caddy | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/caddy/sites/infra.caddy b/caddy/sites/infra.caddy index fe523795..31bd67ef 100644 --- a/caddy/sites/infra.caddy +++ b/caddy/sites/infra.caddy @@ -56,6 +56,28 @@ errors.gendsgn.ru { git.gendsgn.ru { encode zstd gzip + # Генерация архивов закрыта — она съедала диск (16.09.2026). + # + # Forgejo на КАЖДЫЙ GET ///archive/.{zip,tar.gz,bundle} + # собирает снапшот репозитория заново (20-30 МБ, несколько секунд CPU) и + # кладёт результат в кэш repo-archive. Штатная уборка archive_cleanup + # работает, но раз в сутки — а внешний обходчик (73 из 78 обращений за 6ч + # с одного адреса 216.73.216.17) дёргал архив для каждого коммита и держал + # генерацию на ~100 файлах в час. Кэш вырос до 55 ГБ при диске 145 ГБ и ел + # 2 ГБ/ч: до нуля оставалось ~12 часов. + # + # Ограничение скорости тут не лечит: даже один запрос в минуту — это + # 30 МБ/мин новых файлов при суточной уборке. Нужен именно отказ. + # На `git clone`, `git fetch` и работу CI это НЕ влияет: смарт-протокол + # ходит по ///info/refs и /git-upload-pack, другие пути. + # Цена: анонимная кнопка «скачать архив» в вебе больше не работает — + # сознательный размен, вернуть можно снятием этих двух правил. + @repo_archive path_regexp repo_archive ^/[^/]+/[^/]+/archive/.+$ + respond @repo_archive "Архивы отключены: используйте git clone" 403 + + @api_archive path_regexp api_archive ^/api/v1/repos/[^/]+/[^/]+/archive/.+$ + respond @api_archive "Архивы отключены: используйте git clone" 403 + reverse_proxy forgejo:3000 log {