fix(caddy): закрыть генерацию архивов Forgejo — она съедала диск (#3534)
Some checks failed
Deploy Infra Host / sync-infra-host (push) Successful in 8s
Deploy / changes (push) Successful in 14s
Deploy / build-backend (push) Has been skipped
Deploy / build-worker (push) Has been skipped
Deploy / build-frontend (push) Has been skipped
Deploy / deploy (push) Has been skipped
Deploy / deploy-caddy (push) Successful in 5s
Deploy / deploy-status (push) Successful in 1s
Deploy Metrics / server (push) Successful in 46s
Deploy Metrics / agent-apps (push) Failing after 14s
Deploy Metrics / agent-infra (push) Successful in 24s
Deploy / perimeter-smoke (push) Successful in 1m41s

This commit is contained in:
lekss361 2026-09-16 14:22:18 +00:00
parent 6da7de06a4
commit 1bd5283aa6

View file

@ -56,6 +56,28 @@ errors.gendsgn.ru {
git.gendsgn.ru { git.gendsgn.ru {
encode zstd gzip encode zstd gzip
# Генерация архивов закрыта — она съедала диск (16.09.2026).
#
# Forgejo на КАЖДЫЙ GET /<owner>/<repo>/archive/<ref>.{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 это НЕ влияет: смарт-протокол
# ходит по /<owner>/<repo>/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 reverse_proxy forgejo:3000
log { log {