- набор правил ruff расширен по канону rp-local-env (ANN, PTH, C90, G и др.),
в lefthook добавлен job ruff check --fix
- код приведён под новые правила: логирование через %s вместо f-строк,
os.path заменён на pathlib, run_backup_process и initialize разбиты
на функции по порогу цикломатической сложности
- список строится по backup-targets, а не только по успешным скриптам дампа,
поэтому приложения с бекапом одних данных (calibre, goatcounter, tududi,
tuwunel) больше не теряются
- отсутствие backup.sh при наличии backup-targets — штатный случай, теперь
это info, а warning остался только когда бекапить нечего вообще
- один инстанс на два сайта, gc-main и gc-photo: нужный выбирается по Host
- домены ведутся в goatcounter_sites (group_vars), оттуда же рендерятся имена в Caddyfile
- сайты и первый пользователь заводятся идемпотентно, креды из vault
- выключены ML (52 MB и тренировка k-means по 13.7k измерений каждые 3
часа), network-viewer, debugfs и ioping; storage tiers 3 → 2, то есть
максимум истории 3 месяца вместо 2 лет; apps.plugin обходит /proc раз в
30s вместо 10s, метрики групп процессов при этом сохранены
- из /proc/net/dev отфильтрованы veth*, br-* и docker0 — 462 графика на 50
интерфейсов, из которых 43 безымянные veth докера. Побочный эффект:
проверка имени в proc_net_dev.c идёт до netdev_rename_this_device(),
поэтому теряется единственный смапленный cgroup_caddyproxy.net_eth0
- postgres перестал собирать метрики индексов (205 индексов × 2 графика);
max_db_indexes задан внутри джоб, потому что на верхнем уровне файла
go.d разбирает только confgroup.Default и молча игнорирует остальное
Замер до: 13.7k метрик, 479 MiB, ~18% ядра. Ожидаемо после: ~11.8k
метрик и ~310 MiB.
- в 2.11 появился netflow-plugin, его стоковый netflow.yaml идёт с
enabled: true и слушателями на UDP 2055/6343; при дефолтном
`enable running new plugins = yes` он поднялся бы сам, поэтому отключён
явно — экспортировать потоки нам некому, а память не бесконечная
- ломающих изменений для нас нет: убранный из prometheus-коллектора
label_prefix и удалённый go-коллектор sensors мы не используем
- session cookies: inactivity 1 week, expiration 1 month, remember_me 3 months вместо дефолтных 5 минут / 1 часа / 1 месяца
- клиенту outline-app выданы scope offline_access и grant refresh_token с кастомным lifespan (refresh token 3 месяца): без них ValidateSSOAccessTask не мог продлить access token и ротацией jwtSecret убивал все сессии Outline
- consent_mode переведён в pre-configured, чтобы при повторном входе не показывался экран согласия
- с tududi 1.3.1 модель берётся из LLM_MODEL, а не захардкожена — шлём
deepseek/deepseek-v4-pro, Bifrost резолвит провайдера по префиксу
- ключ и base URL переведены на пару LLM_*, приоритетную над OPENAI_*
- routing_rules оставлен пустым массивом, а не удалён: при
source_of_truth=config.json отсутствующая секция не трогает строки в config.db
- `true` доверял всей цепочке X-Forwarded-For, что позволяло подделать IP
клиента; у нас ровно один хоп — Caddy
- tududi с 1.3.x сам приводит значение к 1 и пишет предупреждение на каждый старт
- тег образа соответствует релизу transports/vX.Y.Z, а теги 2.1.x рядом на
Docker Hub — это helm-chart
- конфиг после апдейта валидировать по config.schema.json: неизвестные ключи
Bifrost игнорирует молча, в логах ошибки не будет
- ключ лежал внутри config_store, где Bifrost его молча игнорировал — шлюз
работал в дефолтном режиме split вместо заявленного config.json
- поднят на верхний уровень, теперь providers и governance из config.json
авторитетно перезаписывают строки в config.db на старте
- плейбук зовёт роль app_image, docker_login убран
- compose тянет `transcriber:{{ app_image_tag }}` с pull_policy: never
- удалены playbook-transcriber-registry.yml и vars/transcriber.images.yml
с зашитым тегом образа
- плейбук зовёт роль app_image, docker_login и `pull: always` убраны
- compose тянет `homepage-nginx:{{ app_image_tag }}` с pull_policy: never
- удалён playbook-homepage-registry.yml и registry-переменные из vars
- плейбук зовёт роль app_image, docker_login в cr.yandex удалён
- compose тянет `{{ app_name }}:{{ app_image_tag }}` с pull_policy: never
вместо зашитого тега из реестра
- backup-targets собирается одной copy вместо lineinfile в цикле: теперь
удаление цели из списка реально убирает строку из файла (7 плейбуков)
- netdata: getent вместо grep по /etc/group, ушёл бессмысленный changed_when
и мёртвый фолбэк PGID
- исправлены копипастные имена play в wanderer и remove-user-and-app