Umami Analytics: как я сделал админ-панель data-driven

Самостоятельная аналитика: как я превратил borisovai-admin в data-driven продукт
Несколько месяцев назад передо мной встала типичная для любого владельца проекта проблема: я совершенно не видел, кто и как использует мою админ-панель borisovai-admin. Google Analytics казался избыточным (и страшным с точки зрения приватности), а простой счётчик посещений — примитивным. Нужно было что-то лёгкое, приватное и полностью под своим контролем.
Выбор пал на Umami Analytics — открытую веб-аналитику, которая уважает приватность пользователей, не использует cookies и полностью GDPR-compliant. Главное же — её можно развернуть самостоятельно, прямо в своей инфраструктуре.
Четыре этапа внедрения
Первый шаг — упростить развёртывание. Стандартная Umami требует двух контейнеров (приложение + PostgreSQL), но для небольшого проекта это избыточно. Я нашёл fork maxime-j/umami-sqlite, который использует SQLite — файловую БД в одном контейнере. Экономия памяти была существенной: вместо ~300 MB получил ~100 MB. Затем написал скрипт install-umami.sh из семи шагов, который может быть запущен много раз без побочных эффектов (идемпотентный — именно это было важно для автоматизации).
Второй этап — автоматизировать через CI/CD. Создал два job’а в пайплайне: один автоматически ставит Docker (если его нет), второй — развёртывает саму Umami. Добавил health check, чтобы пайплайн не переходил к следующему шагу, пока контейнер не будет готов. Инкрементальный деплой через deploy-umami.sh позволяет обновлять конфигурацию без перезагрузки приложения.
Третий этап — дать пользователям интерфейс. Создал страницу analytics.html, где каждый новый сервис может получить код для интеграции отслеживания. Плюс добавил API endpoint GET /api/analytics/status для проверки, всё ли работает. Async-скрипт Umami весит всего ~2 KB и не блокирует рендеринг страницы — вот это я ценю.
Четвёртый этап — документировать. Написал AGENT_ANALYTICS.md с инструкциями для будущих разработчиков, обновил главный CLAUDE.md таблицей всех сервисов.
Что интересного я узнал
Оказывается, боль большинства разработчиков с традиционной аналитикой — это не функциональность, а приватность. Umami решает это элегантно: скрипт отправляет только агрегированные данные (сессии, страницы, источники трафика) без ID пользователей и истории кликов. А главное — нет необходимости в consent banner, который все равно раздражает пользователей.
Порт 3001 внутри контейнера пробросил через Traefik на HTTPS-домены analytics.borisovai.ru и analytics.borisovai.tech. Вообще, это я оценил: такая простота развёртывания чуть ли не впервые в моём опыте с self-hosted решениями. Встроенная авторизация в самой Umami (не потребовался дополнительный Authelia) — и это экономия на инфраструктуре.
Один лайфхак: чтобы скрипт аналитики не блокировался AdBlock, назвал его stats вместо стандартного umami — простой способ обойти базовые фильтры.
Итог
Теперь borisovai-admin наконец-то видит себя со стороны. Я получил данные о том, какие страницы реально используют люди, откуда они приходят и сколько времени длятся сессии. Всё это — на своём сервере, без третьих лиц и без чувства вины перед пользователями.
Следующий шаг — подключить аналитику ко всем остальным сервисам проекта. Это уже не задача месяца, а скорее вопрос пары часов на каждый сервис.
Учимся: иногда лучший инструмент — это не самый популярный, а самый честный. 😄
Метаданные
- Branch:
- main
- Dev Joke
- ArgoCD — как первая любовь: никогда не забудешь, но возвращаться не стоит.
Часть потока:
Разработка: borisovai-admin