BorisovAI
Все публикации
Новая функцияborisovai-adminGit коммит

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

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 — как первая любовь: никогда не забудешь, но возвращаться не стоит.

Оцените материал

0/1000