Matomo на Ubuntu 24.04: пошаговая установка
Google Analytics бесплатен, но взамен отдаёт данные о ваших посетителях третьей стороне, а в некоторых юрисдикциях его использование само по себе создаёт юридические риски по GDPR. Matomo (бывший Piwik) — открытая аналитика с той же глубиной отчётов, но данные остаются на вашем сервере и никуда не утекают. Ниже — рабочая установка Matomo на чистой Ubuntu 24.04 со своим стеком Nginx + PHP-FPM + MariaDB, без готовых образов и магии.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Matomo и зачем self-hosted аналитика
Matomo — это PHP-приложение с собственной базой данных, которое собирает и обрабатывает трафик так же, как Google Analytics: счётчик на страницах, отчёты о посетителях, источниках, конверсиях, картах кликов. Разница в модели данных — весь сырой трафик и весь агрегированный отчёт лежат в вашей MariaDB, а не на серверах стороннего сервиса. Это снимает сразу три вопроса: куда уходят персональные данные посетителей, кто может их анализировать помимо вас, и что произойдёт с историей, если поставщик аналитики однажды изменит условия или заблокирует аккаунт.
Второй практический довод — блокировщики рекламы и трекеров. Скрипты Google Analytics узнаваемы по домену google-analytics.com и вырезаются большинством adblock-листов, из-за чего реальная посещаемость в отчётах занижается на заметную долю. Счётчик Matomo раздаётся с вашего собственного домена под собственным именем файла, поэтому попадает под блокировки заметно реже — хотя полностью от них не застрахован.
Минус честный: Matomo — не облачный SaaS, а приложение, которое нужно администрировать самому. На сервере с посещаемостью в десятки тысяч визитов в сутки таблицы log_visit и log_link_visit_action растут быстро, и без настроенной архивации отчётов (об этом ниже) интерфейс начинает тормозить. Для установки хватит 2 vCPU и 2-4 ГБ RAM — этого достаточно для сайта с посещаемостью в несколько тысяч визитов в день; для более тяжёлой нагрузки закладывайте больше памяти под MariaDB.
Подготовка сервера и зависимости
Работаем на чистой Ubuntu 24.04 с доступом по SSH и уже настроенным пользователем с sudo (если ещё не делали — см. статью про подключение по SSH-ключу). Понадобится домен или поддомен, указывающий A-записью на IP сервера, например analytics.example.com.
Обновите систему и поставьте базовые утилиты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl unzip wget gnupg2 software-properties-common
Если у сервера ещё нет настроенного файрвола, откройте только необходимое (подробности — в статье про UFW):
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка PHP-FPM и MariaDB
Ubuntu 24.04 несёт PHP 8.3 в штатных репозиториях — этого достаточно для актуальных веток Matomo. Ставим PHP-FPM с нужными расширениями:
sudo apt install -y php-fpm php-mysql php-xml php-gd php-curl \
php-mbstring php-zip php-bcmath php-intl php-cli
Проверьте версию модуля FPM, чтобы дальше подставить правильный путь к сокету:
php -v
ls /var/run/php/
Обычно это /var/run/php/php8.3-fpm.sock — подставьте свою версию, если отличается.
Ставим MariaDB и создаём базу под Matomo:
sudo apt install -y mariadb-server
sudo mysql_secure_installation
Ответьте на вопросы мастера настройки (задать пароль root, отключить анонимных пользователей, запретить удалённый вход под root, удалить тестовую базу). Дальше создайте базу и пользователя (подробный разбор установки — в статье про MariaDB на Ubuntu 24.04):
sudo mysql -u root -p
CREATE DATABASE matomo CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'matomo_user'@'localhost' IDENTIFIED BY 'замените-на-свой-пароль';
GRANT ALL PRIVILEGES ON matomo.* TO 'matomo_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Загрузка и распаковка Matomo
Скачивайте архив только с официального сайта — на нём же указан текущий стабильный релиз:
cd /tmp
wget https://builds.matomo.org/matomo.zip
sudo mkdir -p /var/www/matomo
sudo unzip matomo.zip -d /var/www/
Отдайте файлы веб-серверу:
sudo chown -R www-data:www-data /var/www/matomo
sudo find /var/www/matomo -type d -exec chmod 755 {} \;
sudo find /var/www/matomo -type f -exec chmod 644 {} \;
Каталогам tmp/ и config/ внутри Matomo нужны права на запись от имени www-data — это уже покрывается командой выше, поскольку владелец всего дерева — www-data. Отдельно проверять их не нужно, если предыдущий шаг выполнен.
Настройка Nginx и SSL
Создайте конфиг виртуального хоста, подставив свой домен и версию PHP-FPM (общий шаблон разобран в статье про Nginx как обратный прокси, здесь — вариант под классический PHP-FPM без прокси на бэкенд):
server {
listen 80;
server_name analytics.example.com;
root /var/www/matomo;
index index.php;
client_max_body_size 64M;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
location ~ ^/(config|tmp|core|lang)/ {
deny all;
return 403;
}
location ~ \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 30d;
access_log off;
}
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }
}
Блок с deny all для config, tmp, core и lang — не опция, а обязательная защита: в config/config.ini.php лежат данные подключения к базе, и без явного запрета Nginx с готовностью отдаст этот файл на прямой запрос.
Включите сайт и получите сертификат (подробнее — в статье про Let's Encrypt):
sudo ln -s /etc/nginx/sites-available/matomo /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d analytics.example.com
Certbot сам допишет в конфиг блок listen 443 ssl и редирект с 80 на 443.
Мастер установки и первая настройка
Откройте https://analytics.example.com/ в браузере — запустится веб-мастер Matomo. Он последовательно проверит системные требования (расширения PHP, права на запись), попросит данные подключения к базе (хост localhost, имя базы matomo, пользователь и пароль, созданные выше), создаст таблицы и предложит завести первый сайт для отслеживания и учётную запись суперпользователя.
На последнем шаге мастер покажет JavaScript-код счётчика — вставьте его перед закрывающим тегом </head> на всех страницах сайта, который хотите отслеживать:
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u = "https://analytics.example.com/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '1']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
</script>
Для сайтов на WordPress проще поставить официальный плагин Matomo Analytics, который сам вставит код и синхронизирует список сайтов через API — ручная правка шаблонов тогда не нужна.
Cron-архивация отчётов
По умолчанию Matomo считает отчёты «на лету» при каждом открытии дашборда — на небольшом трафике это незаметно, но при росте посещаемости обработка сырых логов на каждый визит в интерфейс становится всё медленнее. Решение — вынести агрегацию в cron и отключить архивацию по браузерным запросам.
Добавьте задачу в crontab пользователя www-data (общий разбор синтаксиса cron — в статье про cron-задачи):
sudo crontab -u www-data -e
5 * * * * /usr/bin/php /var/www/matomo/console core:archive --url=https://analytics.example.com/ > /var/log/matomo-archive.log 2>&1
Задача раз в час пересчитывает свежие отчёты в фоне. После того как cron заработал стабильно (проверьте лог через пару часов), отключите архивацию по запросу браузера в config/config.ini.php:
[General]
enable_browser_archiving_triggering = 0
Это разгружает интерфейс: дашборд просто читает уже посчитанные данные, вместо того чтобы пересчитывать их в момент, когда администратор открыл вкладку с отчётами.
Приватность и защита данных
Раз вы вообще ставите self-hosted аналитику, имеет смысл настроить её так, чтобы данные посетителей действительно не собирались избыточно. В разделе «Администрирование → Приватность» включите:
- анонимизацию IP-адресов (обычно достаточно маскировать последний октет — этого хватает, чтобы не хранить точный IP, но сохранить геолокацию до города);
- уважение заголовка Do Not Track браузера;
- автоматическое удаление старых сырых логов посетителей (например, старше 180 дней) с сохранением агрегированных отчётов — это единственный практичный способ не дать базе расти бесконечно.
Отдельно ограничьте доступ к самому интерфейсу Matomo — это административная панель с полной историей трафика, и она не должна быть открыта произвольным IP. Если аналитику смотрит только команда из офиса или через VPN, добавьте allowlist по IP прямо в блоке server в Nginx (allow/deny) или заведите Basic Auth поверх формы логина Matomo как дополнительный слой.
Регулярно проверяйте обновления — Matomo, как и любое веб-приложение с публичной формой логина, время от времени получает патчи безопасности, а сам мастер обновления встроен в админку и обычно проходит без ручной правки конфигов.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Чем Matomo отличается от Google Analytics по функциям?
Базовый набор — посетители, источники трафика, конверсии, воронки — сопоставим. У Matomo есть встроенные тепловые карты и запись сессий (Heatmap & Session Recording) без отдельной подписки, но нет готовой интеграции с рекламными кабинетами Google на уровне автоматической синхронизации аудиторий — это придётся настраивать отдельно через API, если вообще нужно.
Нужен ли отдельный сервер под Matomo или можно на тот же, где сайт?
Технически можно держать Matomo на том же сервере, что и сайт, если ресурсов хватает с запасом. Но для сайта с заметным трафиком лучше разносить: аналитика с cron-архивацией и растущей базой не должна конкурировать за CPU и I/O с обслуживанием живых посетителей сайта.
Matomo считает ботов и парсеры в статистике?
Есть встроенный фильтр по спискам известных user-agent ботов, включаемый в настройках сайта, но он не идеален — часть новых или маскирующихся ботов всё равно попадёт в отчёты. Точный процент "грязного" трафика зависит от конкретного сайта, ориентируйтесь на свои логи, а не на усреднённые цифры.
Можно ли перенести историю из Google Analytics?
Прямого «one-click» переноса нет — форматы данных разные. Есть сторонние плагины импорта логов и GA-экспортов, но полный точный перенос исторических данных обычно нецелесообразен: проще запустить Matomo с чистого листа и параллельно оставить GA на переходный период, если нужна сравнимость периодов.
Что будет, если забыть про cron-архивацию на растущем трафике?
Дашборд начнёт открываться заметно дольше, потому что каждый визит в отчёты триггерит пересчёт сырых логов на лету. Данные при этом не теряются — проблема чисто в скорости интерфейса, и решается ровно настройкой cron, описанной выше.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →