# Секреты приложений через `*_FILE`, а не inline `environment:` **Приоритет:** средний miniflux сделан правильно — роль `secrets` кладёт каждую переменную vault в отдельный файл, каталог монтируется `:ro`, а compose ссылается на `*_FILE` (`files/miniflux/docker-compose.template.yml`). Остальные держат секреты прямыми значениями в `environment:`: - **outline** — пароль postgres, `SECRET_KEY`, `UTILS_SECRET`, секрет OIDC, SMTP - **tududi** — session secret, секрет OIDC, ключ LLM, SMTP - **wakapi** — salt паролей, секрет OIDC, SMTP - **wanderer** — мастер-ключ meilisearch, ключ шифрования pocketbase - **gramps** — `gramps_secret_key`, SMTP - **gitea** — только SMTP (`postbox_pass`) tuwunel из списка убран: в его compose секретов нет (сверено 2026-07-25). memos и calibre тоже чистые. Такие переменные читает любой член группы `docker`, любой процесс с доступом к `/proc//environ`, и они попадают в `docker inspect`. Где приложение умеет `*_FILE` или конфиг-файл — постепенно перевести по образцу miniflux. Второй мотив, найденный позже: пока секрет стоит прямым значением в шаблоне, `ansible-playbook --diff` печатает его в терминал при каждом изменении файла. Вынос в отдельный файл чинит это структурно — дифф compose остаётся читаемым, а секретный файл рендерит роль `secrets` под `no_log`. Но покрывает только `environment:`; конфиги (authelia, bifrost, backups, remembos) и общий запрет на вывод — в [no-secrets-in-playbook-output](no-secrets-in-playbook-output.md), и она идёт первой: там дёшево и закрывает всё сразу. Из sec-ревью (fable, 2026-07-13). Связка с [service-users-docker-group](service-users-docker-group.md). Связано: files/outline, files/wakapi, files/tududi, files/wanderer, files/gramps, files/gitea, files/miniflux (образец), roles/secrets.