- vars/vars.yml → group_vars/all/main.yml, vars/secrets.yml → group_vars/all/secrets.yml; boilerplate vars_files убран из всех плейбуков - имя secrets.yml сохранено намеренно: pre-commit-хук и .crushignore ищут слово secret(s) в имени файла - host_vars инвентаря теперь имеют приоритет над общими переменными
7.3 KiB
Беклог
Единый список будущих задач по серверу: то, что уже решили сделать, и идеи,
которые ещё надо обдумать. Это источник истины по беклогу — одна задача =
один файл в этом каталоге. Не план реализации: детальные проработки живут в
docs/drafts (беклог даёт сводку и ссылку), а реализованное
переезжает в ADR/спеку и пункт беклога удаляется.
Приоритет — грубая оценка «ценность / стоимость», не обязательство к порядку.
Источники пунктов помечены:
(ансибл-ревью) — ревью плейбуков docs/drafts/ansible-review.md (2026-05-25);
(tududi) — перенос из инбокса задач tududi (проект Pet Project Server);
(sec-ревью) — три независимых security-ревью на модели fable (2026-07-13).
Драфты timeweb.md и timeweb-migration-log.md — исторические логи уже
завершённой миграции в Timeweb (cutover 2026-05-23), в беклог не входят.
Высокий
- Закрыть admin API Caddy —
admin :2019слушает всю docker-сеть; любой контейнер может переписать маршрутизацию и снять forward_auth (sec-ревью) - Убрать группу
dockerу сервисных пользователей —docker= root на хосте; ~все app-аккаунты фактически root, изоляция «юзер на сервис» обнуляется (sec-ревью) - Изолировать/запаролить сессионный redis Authelia — стор сессий SSO в общей сети без пароля; запись в него = hijack SSO всех сервисов (sec-ревью)
- Алерты на проблемные контейнеры — wakapi крутился в restart-loop несколько дней незамеченным; healthcheck в compose + алерты Netdata
- Рестарт контейнеров через handlers —
state: restartedвыполняется безусловно на каждом прогоне (лишний downtime), нет ни одного handler (ансибл-ревью)
Средний
- Секреты через
*_FILE, а не inlineenvironment:— outline/wakapi/tududi/gitea/gramps/tuwunel держат секреты в env; видны вdocker inspectи/proc(sec-ревью) - Захардить мониторинг-стек — netdata/dozzle: лишние привилегии + docker.sock + доверие Remote-User в общей сети; socket-proxy + monitoring_network (sec-ревью)
- Ограничить
/metricsMiniflux —METRICS_ALLOWED_NETWORKS=0.0.0.0/0+ прокси без ограничения пути отдаёт метрики публично (sec-ревью) - Закрыть calibre-web forward-auth — домен без forward_auth, защита на встроенной авторизации с дефолтом
admin/admin123(sec-ревью) - Понизить log level Authelia до info —
debugв проде утекает детали аутентификации и OIDC черезdocker logs/dozzle (sec-ревью) - Включить автообновления безопасности — патчи openssh/libssl только вручную; окна в недели между CVE и фиксом (sec-ревью)
- Запретить SSH-вход под root —
PermitRootLogin yesпускает root по ключу; наименьшие привилегии + defense-in-depth (пароль уже off) (sec-ревью) - Убрать устаревший инвентарь после миграции —
production.ymlуказывает на мёртвый YC-хост, живой —timeweb.yml; имена инвертированы - Gitea runner on-demand в Yandex Cloud — раннер активен только во время сборки; webhook→Cloud Function стартует ВМ, probe/decide гасят по idle; экономия ~95%
- Синхронизация общих Ansible-ролей —
owner/eget/secretsдублируются между репозиториями и дрейфуют; канон в ansible-shared + rsync-таски invoke - Уведомления о размере приложений и диске — алерты на заполнение диска и аномальный рост data-томов; сервер ресурсно ограничен (tududi)
- Composable-роль
backup— бэкап — самый чистый шов для extraction (одинаков у всех, различается только список targets) (ансибл-ревью) - Точечные фиксы идемпотентности и баг имени play — быстрые правки: имя play в wanderer,
changed_whenв netdata/eget, backup-targets через template (ансибл-ревью)
Низкий
- Мелкий хардненинг Caddy — HSTS-заголовок, убрать лишний
NET_ADMIN, убрать leftover-листенер:29999(sec-ревью) - Мелкий хардненинг контейнеров —
no-new-privileges, non-rootuser:, homepage off:latest, соглашение о127.0.0.1:портах (sec-ревью) - Унифицировать ACL техпанелей Authelia — rssbridge (SSRF) и dashboard за
one_factorбез subject; свести кgroup:admins+two_factor(sec-ревью) - Причесать роль
ownerпод конвенции —assertвместоfail+when,loopвместоwith_*, добавитьmeta/README (ансибл-ревью) - Инвентарь:
host_vars, группы, точечныйbecome— хост-специфику вhost_vars/server.yml, хост в именованную группу, глобальный root → точечный become (ансибл-ревью) - Фоновая зачистка стиля и конфигурации — sudoers.d, профиль ansible-lint,
ansible.cfg, кавычки,cache_valid_time(ансибл-ревью) - Logrotate для логов бэкапов — логи
backup-all.py/restic копятся без ротации (tududi)