Установка и настройка Umami Analytics на VPS: легкая и приватная альтернатива Google Analytics
TL;DR
В этом руководстве мы разберем процесс развертывания Umami Analytics — современного, легковесного и ориентированного на приватность инструмента веб-аналитики, который не требует использования cookie-баннеров и полностью соответствует GDPR. Мы пройдем путь от выбора конфигурации сервера до настройки автоматических бэкапов и оптимизации производительности на стеке Docker, PostgreSQL и Nginx.
- Приватность: Полное владение данными без передачи третьим лицам.
- Производительность: Скрипт весит менее 2 КБ, что не замедляет загрузку сайта.
- Простота: Установка через Docker Compose за 15 минут.
- Экономия: Работает на минимальных VPS-планах с 1-2 ГБ RAM.
- Современность: Поддержка PostgreSQL 18 и Node.js 24 в реалиях 2026 года.
1. Что мы настраиваем и зачем
К 2026 году ландшафт веб-аналитики претерпел значительные изменения. Усиление законодательства о защите данных (GDPR в Европе, CCPA в США и аналогичные законы в других регионах) сделало использование Google Analytics 4 (GA4) сложным и зачастую рискованным процессом. Постоянные уведомления о файлах cookie раздражают пользователей и снижают конверсию. Именно здесь на сцену выходит Umami Analytics.
Umami — это open-source решение, которое собирает только необходимые метрики (просмотры, источники, устройства, страны, события) без сбора персонально идентифицируемой информации (PII). Это позволяет легально отказаться от назойливых cookie-баннеров, так как сервис не отслеживает пользователей между сайтами и не создает их цифровой профиль для рекламных сетей.
Что вы получите в итоге:
- Собственную панель аналитики на вашем домене (например, stats.yourdomain.com).
- Полный контроль над базой данных — никто, кроме вас, не имеет доступа к статистике.
- Высокую скорость работы: Umami написан на Next.js и оптимизирован для быстрой обработки миллионов событий.
- Возможность обхода блокировщиков рекламы (AdBlock), так как скрипт загружается с вашего собственного поддомена.
Выбор self-hosted решения на базе VPS — это единственный способ гарантировать 100% суверенитет данных. Облачные версии Umami удобны, но они снова возвращают нас к вопросу доверия данных третьей стороне. Собственный сервер снимает этот вопрос раз и навсегда.
2. Какой VPS-конфиг нужен под эту задачу
Umami Analytics крайне нетребователен к ресурсам на начальном этапе, но его аппетиты растут вместе с объемом трафика на ваших проектах. Основная нагрузка ложится на базу данных PostgreSQL при выполнении аналитических запросов за длительные периоды.
| Параметр | Минимальный (до 100к хитов/мес) | Рекомендуемый (до 1 млн хитов/мес) | Enterprise (5 млн+ хитов/мес) |
|---|---|---|---|
| vCPU | 1 Core (Shared) | 2 Cores (Dedicated) | 4+ Cores |
| RAM | 1 GB | 2-4 GB | 8 GB+ |
| Диск (NVMe) | 10 GB | 40 GB | 100 GB+ |
| ОС | Ubuntu 24.04 / 26.04 | Ubuntu 26.04 LTS | Debian 13 / RHEL |
Для стабильной работы системы, особенно если вы планируете отслеживать несколько сайтов, лучше всего взять VPS с 2 ГБ оперативной памяти. Это обеспечит достаточный кэш для PostgreSQL и предотвратит срабатывание OOM Killer (Out of Memory) при генерации сложных отчетов.
Когда стоит задуматься о Dedicated сервере? Если ваш трафик превышает 10-15 миллионов событий в месяц, или если вы используете Umami как часть аналитического хаба для десятков крупных клиентов. В остальных случаях виртуализации (KVM) более чем достаточно.
Локация: Выбирайте локацию сервера максимально близко к вашей основной аудитории. Несмотря на то, что скрипт Umami асинхронный, быстрая передача пакетов (low latency) уменьшает вероятность потери данных при уходе пользователя со страницы до завершения запроса аналитики.
3. Подготовка сервера
Прежде чем приступать к установке Umami, необходимо обеспечить безопасность и актуальность нашей среды. Мы будем использовать Ubuntu 26.04 LTS (или актуальную на текущий момент 24.04).
Первым делом обновим список пакетов и саму систему:
sudo apt update && sudo apt upgrade -y
Создадим отдельного пользователя с правами sudo, чтобы не работать под root:
# Создаем пользователя
adduser umamiadmin
# Добавляем в группу sudo
usermod -aG sudo umamiadmin
# Переключаемся на пользователя
su - umamiadmin
Настроим базовый файрвол (UFW). Нам понадобятся порты 22 (SSH), 80 (HTTP) и 443 (HTTPS):
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Для защиты от брутфорс-атак установим fail2ban:
sudo apt install fail2ban -y
Базовая конфигурация fail2ban уже защищает SSH "из коробки", что критически важно для любого публичного VPS.
4. Установка Docker и вспомогательного ПО
В 2026 году Docker остается стандартом де-факто для развертывания self-hosted приложений. Это изолирует зависимости Umami от системных библиотек и упрощает процесс обновления.
Установим необходимые пакеты для работы с репозиториями через HTTPS:
sudo apt install ca-certificates curl gnupg lsb-release -y
Добавим официальный GPG-ключ Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Подключим репозиторий:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/apt/sources.list.d/docker.list > /dev/null
Установим Docker Engine и Docker Compose:
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Добавим нашего пользователя в группу docker, чтобы запускать контейнеры без sudo:
sudo usermod -aG docker $USER
Внимание: Чтобы изменения вступили в силу, нужно выйти из системы и зайти снова (logout/login).
5. Развертывание Umami Analytics через Docker Compose
Мы будем использовать официальный образ Umami и базу данных PostgreSQL 18. Это наиболее стабильная и производительная связка.
Создадим рабочую директорию:
mkdir ~/umami && cd ~/umami
Создадим файл docker-compose.yml. Мы будем использовать современный синтаксис:
nano docker-compose.yml
Вставьте следующее содержимое:
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
restart: always
environment:
DATABASE_URL: postgresql://umami_user:strong_password@db:5432/umami_db
APP_SECRET: $(openssl rand -base64 32)
ports:
- "3000:3000"
depends_on:
db:
condition: service_healthy
networks:
- umami-net
db:
image: postgres:18-alpine
restart: always
environment:
POSTGRES_USER: umami_user
POSTGRES_PASSWORD: strong_password
POSTGRES_DB: umami_db
volumes:
- ./sql_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U umami_user -d umami_db"]
interval: 5s
timeout: 5s
retries: 5
networks:
- umami-net
networks:
umami-net:
driver: bridge
Важно: Замените strong_password на действительно сложный пароль. Параметр APP_SECRET используется для шифрования сессий — вы можете сгенерировать его командой openssl rand -base64 32 и вставить вручную вместо переменной.
Теперь запустим нашу инфраструктуру:
docker compose up -d
Проверим статус контейнеров:
docker compose ps
Если в колонке STATUS указано "Up (healthy)", значит база данных готова, а приложение запущено на порту 3000.
6. Настройка Reverse Proxy (Nginx) и SSL (Certbot)
Запускать Umami напрямую на порту 3000 в открытый интернет — плохая практика. Нам нужен Nginx в качестве обратного прокси для обработки SSL-сертификатов и обеспечения безопасности.
Установим Nginx:
sudo apt install nginx -y
Создадим конфигурационный файл для нашего домена (например, stats.example.com):
sudo nano /etc/nginx/sites-available/umami
Добавьте следующую конфигурацию:
server {
listen 80;
server_name stats.example.com; # Замените на ваш домен
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Активируем конфиг и перезапустим Nginx:
sudo ln -s /etc/nginx/sites-available/umami /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Теперь защитим соединение с помощью Let's Encrypt:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d stats.example.com
Certbot автоматически изменит конфигурацию Nginx, добавит SSL-сертификаты и настроит редирект с HTTP на HTTPS.
7. Тонкая настройка и интеграция трекера
После установки перейдите по адресу https://stats.example.com. Данные для первого входа по умолчанию:
- Username: admin
- Password: umami
Первым делом смените пароль администратора в настройках профиля!
Добавление сайта
- Перейдите в раздел Settings -> Websites.
- Нажмите Add Website.
- Введите название и домен вашего сайта.
- Нажмите Save.
После сохранения вы увидите кнопку Get tracking code. Код будет выглядеть примерно так:
<script async src="https://stats.example.com/script.js" data-website-id="your-unique-id"></script>
Этот скрипт нужно вставить в секцию <head> вашего сайта. Обратите внимание на атрибут async — он гарантирует, что загрузка аналитики не будет блокировать отрисовку основного контента страницы.
Обход блокировщиков (Pro-tip)
Многие блокировщики рекламы ищут слово "script.js" или запросы к доменам со словом "stats". В настройках Umami в Docker Compose можно изменить имя скрипта через переменную окружения:
TRACKER_SCRIPT_NAME: custom-analytics
После этого ваш скрипт будет доступен по адресу /custom-analytics.js, что значительно повысит точность сбора данных среди технически подкованной аудитории.
8. Бэкапы и обслуживание
Данные аналитики накапливаются, и их потеря может быть болезненной. Самый важный элемент для бэкапа — база данных PostgreSQL.
Создадим простой скрипт для ежедневного бэкапа:
mkdir ~/backups && nano ~/backups/backup.sh
#!/bin/bash
# Настройки
BACKUP_DIR="$HOME/backups/data"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
CONTAINER_NAME="umami-db-1" # Проверьте имя через docker ps
DB_USER="umami_user"
DB_NAME="umami_db"
# Создаем папку если нет
mkdir -p $BACKUP_DIR
# Делаем дамп
docker exec $CONTAINER_NAME pg_dump -U $DB_USER $DB_NAME > $BACKUP_DIR/umami_backup_$TIMESTAMP.sql
# Удаляем бэкапы старше 30 дней
find $BACKUP_DIR -type f -mtime +30 -name ".sql" -delete
Сделайте скрипт исполняемым и добавьте его в crontab:
chmod +x ~/backups/backup.sh
crontab -e
# Добавьте строку для запуска в 3 часа ночи ежедневно:
0 3 /home/umamiadmin/backups/backup.sh
Обновление Umami: Благодаря Docker, обновление до последней версии происходит в три команды:
cd ~/umami
docker compose pull
docker compose up -d
Umami автоматически выполнит миграции базы данных при запуске новой версии.
9. Troubleshooting + FAQ
Ошибка "Database connection failed" при запуске
Чаще всего это происходит, когда контейнер с Umami пытается подключиться к базе данных до того, как PostgreSQL полностью инициализировался. В нашем docker-compose.yml мы добавили healthcheck, который решает эту проблему. Если ошибка сохраняется, проверьте правильность DATABASE_URL и соответствие паролей в обоих сервисах.
Скрипт аналитики не загружается (404 Not Found)
Проверьте настройки Nginx. Убедитесь, что proxy_pass указывает на правильный порт (3000). Также убедитесь, что вы не используете Cloudflare в режиме "Under Attack Mode", который может блокировать JS-запросы к новым поддоменам.
Какой VPS-конфиг минимально подойдет?
Для небольшого блога с посещаемостью до 500 человек в день достаточно 1 vCPU и 1 GB RAM. Однако для комфортной работы панели управления (dashboard), которая строит графики "на лету", мы рекомендуем 2 GB RAM. Это позволит базе данных PostgreSQL держать индексы в памяти.
Что выбрать — VPS или dedicated для этой задачи?
В 95% случаев VPS — лучший выбор. Он позволяет легко масштабировать ресурсы (CPU/RAM) по мере роста вашего проекта. Выделенный сервер (dedicated) имеет смысл только если вы агрегируете данные сотен высоконагруженных сайтов и упираетесь в производительность дисковой подсистемы (I/O) или если вам требуются специфические настройки безопасности на уровне железа.
Как перенести данные с Google Analytics?
На текущий момент прямой импорт истории из GA4 в Umami затруднен из-за разной структуры данных. Большинство пользователей начинают сбор "с чистого листа", параллельно запуская оба счетчика на переходный период в 1-2 месяца.
Влияет ли Umami на SEO?
Да, положительно. Поскольку скрипт Umami весит в 20-30 раз меньше, чем тяжелый бандл Google Analytics, показатели Core Web Vitals (особенно LCP и TBT) улучшаются. Быстрые сайты ранжируются выше.
10. Выводы и следующие шаги
Мы успешно развернули собственную систему аналитики, которая полностью принадлежит вам. Вы больше не зависите от причуд корпораций, не боитесь блокировок аккаунтов и обеспечиваете своим пользователям максимальный уровень приватности.
Что делать дальше:
- Настройте события (Events): В Umami можно отслеживать клики по кнопкам, отправку форм и загрузку файлов. Это делается через простые
data-umami-eventатрибуты в HTML. - Настройте уведомления: Интегрируйте алерты (через кастомные скрипты), если трафик на сайте резко упал или вырос.
- Оптимизируйте PostgreSQL: При достижении миллионов записей стоит изучить тюнинг параметров
shared_buffersиwork_memв конфигурации БД для ускорения тяжелых отчетов.
Self-hosting — это путь к свободе в цифровом пространстве. Имея правильно настроенный VPS и современное ПО вроде Umami, вы создаете надежный фундамент для своих проектов.