Umami
Легкая приватная веб-аналитика на своем сервере: посещаемость, источники трафика, страницы и события без cookie-баннера. Open-source альтернатива Google Analytics. Развернули, вошли в живой дашборд и замерили потребление.
Вердикт
- нужна посещаемость без cookie-баннера и без вывоза данных за рубеж (152-ФЗ)
- минимум ресурсов и обслуживания - два контейнера, ставится за минуты
- одна инсталляция на много сайтов (мультисайт), каждому свой дашборд
- нужна продуктовая аналитика - воронки по событиям, session replay, feature flags (это PostHog)
- нужны отчеты уровня Matomo и сырой доступ к хитам
- не готовы держать даже маленький сервер - тогда облако
Что это и какую задачу решает
Umami - open-source альтернатива Google Analytics с упором на приватность. Одна строчка скрипта на сайт, и вы видите посещаемость, источники трафика, популярные страницы, страны, устройства, браузеры, UTM-метки, кастомные события и цели. Cookieless по умолчанию: в типовом случае cookie-баннер не нужен, персональные данные не собираются, данные посетителей не покидают ваш сервер.
Стек предельно простой: приложение на Next.js плюс одна база PostgreSQL - два контейнера, около двухсот мегабайт ОЗУ в простое. Одна инсталляция обслуживает много сайтов: у каждого свой website-id и свой дашборд. Лицензия MIT - весь функционал доступен в self-host бесплатно, без платных тиров и open-core-урезания.
Чем отличается от Google Analytics
Сравнение по тому, что влияет на выбор, без снисходительности к конкуренту.
| Параметр | Umami (self-hosted) | Google Analytics 4 |
|---|---|---|
| Модель | open-source, свой сервер | бесплатный SaaS, данные у Google |
| Где данные посетителей | на вашем сервере (152-ФЗ) | на серверах Google, за рубежом |
| Cookie-баннер | не нужен (cookieless) | нужен, плюс согласие |
| Ресурсы | два контейнера, ~200 МБ | не ваша забота |
| Vendor lock-in | нет, MIT, свой экспорт | экосистема Google |
Тех-стек и архитектура
Приложение - Next.js на TypeScript: и дашборд, и прием событий, и API - все в одном контейнере на Node. Хранилище - одна база PostgreSQL (в официальном compose это postgres:15-alpine): просмотры, события, сайты и пользователи лежат в ней, никаких ClickHouse, Kafka или Redis. Сбор данных - через легковесный скрипт, который шлет события на эндпоинт приложения; по умолчанию без cookie.
Важная деталь про версию. В линии 3.x проект стал postgres-only, а официальный образ публикуется только тегом latest - персональных тегов вида postgresql-v3.2.0 в реестре больше нет (мы проверяли: манифест отдает 404). Для воспроизводимости мы запинили образ по sha256-digest, а версию сверили с реальностью - package.json внутри контейнера показывает 3.2.0, что совпадает с GitHub Releases.
Минимальная конфигурация
Реальные требования против официального минимума.
| Официальный минимум RAM | ~1 GB |
| Реально в простое | ~0.2 GB (около 202 MiB на два контейнера) |
| Рекомендуем тариф | CPU2-RAM4-DISK50 |
| Тариф Fatmetal | CPU2-RAM4-DISK50 - 500 ₽/мес |
Важно: Umami реально живет на паре сотен мегабайт, так что упирается не в аналитику, а в базовые накладные расходы виртуалки. Хватает тарифа CPU2-RAM4-DISK50 за 500 руб/мес с большим запасом.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация: CPU2-RAM4-DISK50
Развертывание на Fatmetal
Базовый путь - Fatmetal Cloud Server + Ubuntu 24.04 + Docker.
Создать сервер
тариф CPU2-RAM4-DISK50, Ubuntu 24.04, приложение Docker из маркетплейса.
Поднять стек
mkdir ~/umami && cd ~/umami # docker-compose.yml: app umami (Next.js) + postgres:15-alpine # APP_SECRET и пароль Postgres - сгенерировать случайными docker compose up -dВыдать TLS
# приложение слушает 127.0.0.1:3000, наружу - Caddy с авто-TLS caddy reverse-proxy --from umami.example.com --to 127.0.0.1:3000Проверка:
curl -I https://ваш-домен/отдает200. Хелсчек приложения -/api/heartbeat.
Что измерили после запуска
Цифры со свежей установки на тарифе CPU2-RAM4-DISK50. Данные в дашборде - живые: отправили 90 просмотров и 12 кастомных событий, чтобы графики были непустыми.
| RAM в простое (всего) | ~202 MiB (umami ~172, postgres ~30) |
| Контейнеров | 2 |
| Образы на диске | ~1.68 GB |
| Старт до готовности | меньше минуты (при готовых образах) |
| Отклик корня (localhost) | ~11-22 мс |
Главное: для сравнения - PostHog в простое просит больше 12 GiB на тридцати контейнерах, Plausible около 570 МБ из-за ClickHouse. Umami с одной SQL-базой держится в пределах пары сотен мегабайт: это самая легкая аналитика из наших разборов.
Проверено на версии 3.2.0, июль 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Реальные грабли, на которые наткнулись при запуске.
Своего TLS нет. Cookieless-скрипт с https-страницы не будет слать события на http или самоподписанный бэкенд - браузер их отрежет. Нужен валидный сертификат: внешний Caddy или nginx с Let's Encrypt перед приложением.
Дефолтные креды. Первый вход - admin / umami. Сразу смените пароль (Settings, Profile, Change password). В примере APP_SECRET и пароль Postgres - плейсхолдеры, в проде генерируйте случайные.
Причина. В линии 3.x проект стал postgres-only и убрал версионные теги с префиксом (postgresql-vX.Y.Z) - в апстрим-compose стоит просто latest.
Решение. Использовать latest, а для воспроизводимости пинить по digest: ghcr.io/umami-software/umami:latest@sha256:.... Версию сверять по package.json внутри контейнера.
Безопасность и обновления
Перед продом закройте базовое: смените пароль admin и пароль Postgres, сгенерируйте случайный APP_SECRET, выставьте приложение только через проксированный HTTPS (порт 3000 - на localhost, наружу через Caddy или nginx). Обновление:
docker compose pull && docker compose up -d
Бэкап - это дамп единственной базы PostgreSQL (плюс сам том):
docker exec umami-db-1 pg_dump -U umami umami > umami-backup.sql
Связь с другими стеками
- Обратный прокси - Caddy или nginx для TLS (у Umami своего HTTPS нет).
- Бэкапы - pg_dump единственной базы плюс том в S3.
- Продуктовая аналитика рядом - если нужны воронки и session replay, ставьте PostHog отдельно, Umami оставьте на посещаемость.
Когда это НЕ ваш выбор
Нужна продуктовая аналитика
Воронки по событиям, session replay, feature flags, A/B-тесты - это PostHog или Amplitude. Umami про посещаемость, а не про поведение внутри продукта.
Нужны отчеты уровня Matomo
Сложная сегментация, сырой доступ к необработанным хитам, кастомные отчеты - здесь вы упретесь в простоту Umami. Это ее плюс и ее потолок одновременно.
Не готовы держать сервер
Если своя виртуалка не вариант - берите облако (Umami Cloud или GA). Self-host бесплатен, но требует пусть минимального, но обслуживания.
Частые вопросы
Нужен ли cookie-баннер?
В типовом случае нет: Umami cookieless по умолчанию и не собирает персональные данные. Итоговое решение - за вашим юристом, но техническая причина для баннера отпадает.
Хватит ли 2 GB RAM?
С запасом. В простое стек занимает около 202 MiB на двух контейнерах - упираетесь скорее в накладные расходы виртуалки, чем в аналитику.
Можно ли одной установкой считать много сайтов?
Да, это штатный режим. Каждому сайту - свой website-id, свой скрипт и свой дашборд в общей инсталляции.
Можно в продакшен?
Да, при внешнем TLS, смене пароля admin и случайном APP_SECRET. Порт 3000 держите на localhost, наружу - только через HTTPS-прокси.
Как обновлять и бэкапить?
Обновление - docker compose pull и up -d. Бэкап - pg_dump единственной базы PostgreSQL плюс ее том.
Какие ограничения лицензии?
MIT - весь функционал в self-host бесплатно, коммерческое использование разрешено, платного enterprise-урезания нет. Монетизация вендора - через облако Umami Cloud, а не через закрытие ядра.
Umami или Plausible?
Оба - self-host замена Google Analytics без cookie, данные остаются на вашем сервере. Umami легче: одна база PostgreSQL, около 200 МБ в простое, лицензия MIT. Plausible взрослее и лучше держит большой трафик, но тянет ClickHouse (нужно 2+ GB RAM) и распространяется под AGPL. Небольшой или средний сайт с минимумом ресурсов - Umami; высокий трафик и зрелый интерфейс - Plausible.
Итог
Umami - эталон легкости в веб-аналитике: MIT, два контейнера, около 200 МБ в простое, приватность из коробки и cookieless по умолчанию. За посещаемость без cookie-баннера и без вывоза данных за рубеж платить нечем, кроме маленькой виртуалки. Важное ограничение: это только про посещаемость, не про продуктовую аналитику - для воронок и session replay берите PostHog.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.