← Усі шаблони · Аналітика й моніторинг
Задеплойте Matomo в один клік
Вебаналітика з відкритим кодом — альтернатива Google Analytics, яка зберігає кожне відвідування
Альтернатива Google Analytics на вашій машині.
Що таке Matomo?
Matomo — платформа вебаналітики з відкритим кодом і найвідоміша альтернатива Google Analytics. Код відстеження на сторінках сайту записує кожне відвідування, а звіти показують відвідувачів, сторінки, сторінки входу й виходу, джерела трафіку, пошукові системи, кампанії, країни, пристрої, цілі та продажі e-commerce. Є також сегменти, примітки, звіти поштою за розкладом і HTTP API. Розділи «Журнал відвідувань» і «У реальному часі» показують відвідування наживо, дані ніколи не семплюються, а Matomo Tag Manager іде в комплекті. За словами Matomo, ним користуються понад мільйон організацій.
Цей шаблон запускає Matomo On-Premise, безкоштовну редакцію за ліцензією GPL v3, з офіційного образу разом із MariaDB. Суперкористувач і перший сайт створюються з полів ще до того, як сторінка комусь відповість, тож інсталятор Matomo ніколи не відкритий для відвідувачів. IP-адреси відвідувачів анонімізуються, як Matomo робить типово; безкоштовна база геолокації DB-IP завантажується й оновлюється щомісяця; а архіватор обробляє звіти кожні 15 хвилин, як просить «Перевірка системи» в Matomo. Платні плагіни, як-от Heatmap & Session Recording, Funnels, A/B Testing і Form Analytics, беруться з «Маркету» Matomo.
Хостинг Matomo на Pethost
- Ви входите в Pethost — з ключем доступу, через GitHub або Google. Машини ще немає? Ви обираєте тариф, і посилання чекає, доки машина не буде готова.
- Вікно «Новий проєкт» відкривається на застосунку Matomo. Ви заповнюєте те, що він просить, і натискаєте «Створити проєкт»: Ім’я користувача, Електронна пошта, Пароль адміністратора, Сайт для відстеження.
- За хвилину-дві Matomo працює за власною адресою з HTTPS. Секрети створюються випадково, а дані потрапляють у щонічний бекап.
- Це проєкт як будь-який інший: ви або ваш агент можете його змінити, відкотити або відновити.
Питання про Matomo
Matomo безкоштовний?
Так. Matomo On-Premise, який запускає цей шаблон, безкоштовний і має відкритий код за ліцензією GPL v3 або новішою. Matomo Cloud — хостинг від самих розробників, а преміум-плагіни з «Маркету» Matomo платні.
Matomo чи Google Analytics?
Обидва показують відвідування, джерела трафіку, цілі й e-commerce. Matomo зберігає кожне відвідування без семплювання у своїй базі даних там, де ви його задеплоїте, і типово анонімізує IP-адреси. Google Analytics Importer, безкоштовний плагін від Matomo, переносить історію ресурсу Google Analytics.
Чи потрібен банер про cookie з Matomo?
Залежить від того, де ваші відвідувачі й як налаштовано Matomo. Matomo вміє відстежувати без cookie, а в його FAQ перелічено умови, за яких французька CNIL дозволяє йому працювати без згоди, як-от анонімізовані IP-адреси та відмова від «Журналу відвідувань» і User ID. Деінде згода все одно може знадобитися.
Як додати Matomo на свій сайт?
Вставте код відстеження з розділу «Адміністрування → Сайти → Код відстеження» перед </head> на кожній сторінці або встановіть його через Matomo Tag Manager (у меню — «Менеджер теґів»). На сторінці інтеграцій Matomo перелічено плагіни для WordPress, Drupal, Joomla та багатьох інших платформ, які додадуть його за вас.
Чи можна використовувати свій домен для Matomo?
Так. Додайте домен до проєкту в Pethost, потім увійдіть у Matomo за адресою проєкту й додайте домен у розділі «Адміністрування → Система → Загальні налаштування → Довірені хости Matomo». Доти Matomo не дає нікому увійти на цьому домені.
Як оновити Matomo?
Змініть тег образу в compose.yaml на новішу версію Matomo й задеплойте. Під час запуску контейнер копіює новий Matomo у свій том і оновлює базу даних, а конфігурація, плагіни й дані лишаються такими, як були.
Скільки пам’яті й диска потрібно Matomo?
Matomo в спокої займає близько 250 MB пам’яті разом із MariaDB, а його база даних зростає приблизно на 1 GB на кожні 5 мільйонів переглядів сторінок — за оцінкою Matomo. На Pethost йому вистачить тарифу Starter, і поруч залишиться місце для інших застосунків.
Matomo: файл Docker Compose
Шаблон — це цей compose.yaml і змінні, які записуються в .env проєкту під час його створення. Pethost запускає файл так, як його написано.
Контейнери: matomo (matomo:5.14-apache), archiver (matomo:5.14-apache), mariadb (mariadb:11.8).
Томи, у щонічному бекапі: matomo, db.
services:
matomo:
image: matomo:5.14-apache
restart: unless-stopped
environment:
HOST: ${HOST}
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
ADMIN_USERNAME: ${ADMIN_USERNAME}
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
WEBSITE: ${WEBSITE}
# Matomo's code is kept in the volume with its config, plugins and data, as the image does.
# The image copies it there at the first start; this copies it again when the image brings a
# newer Matomo than the volume holds (Matomo's own one-click update may have put a newer one
# there already), and then updates the database.
#
# A new Matomo offers its installer, which makes the Super User, to whoever opens it first. So
# while it is not installed, the installer runs on port 8081, which nobody reaches, and is
# filled in there: the database, the Super User from the username, email and password given,
# the website to track, and Matomo's own defaults for the rest. Only then does Apache answer
# on port 80. A refusal stops it and says why in its log, and the installer is tried again at
# the next start.
command:
- sh
- -c
- |
set -e
cd /var/www/html
as_matomo() { runuser -u www-data -- "$$@"; }
version() { sed -n "s/.*const VERSION = '\(.*\)';/\1/p" "$$1/core/Version.php"; }
if php -r 'exit(version_compare($$argv[1], $$argv[2], ">") ? 0 : 1);' "$$(version /usr/src/matomo)" "$$(version .)"; then
echo "Matomo $$(version /usr/src/matomo) into the volume, over $$(version .)"
tar cf - --one-file-system -C /usr/src/matomo . | tar xf -
chown -R www-data:www-data .
fi
# MariaDB may still be starting, as after a restart of the project.
until php -r 'new PDO("mysql:host=mariadb;dbname=matomo", "matomo", getenv("MARIADB_PASSWORD"));' 2> /dev/null; do sleep 2; done
installed() {
php -r '$$c = @parse_ini_file("config/config.ini.php", true);
exit(!empty($$c["database"]["username"]) && empty($$c["General"]["installation_in_progress"]) ? 0 : 1);'
}
if ! installed; then
echo "installing Matomo on a port nobody reaches"
as_matomo php -S 127.0.0.1:8081 -t . > /tmp/installer.log 2>&1 &
installer=$$!
# Each step is sent as the project's proxy sends a visitor's request, so Matomo sets
# itself up behind it: the address, HTTPS, and the visitor's IP from X-Forwarded-For.
step() {
action=$$1
shift
curl -sS -o /tmp/step.html -w '%{http_code}' -H "Host: $$HOST" -H 'X-Forwarded-For: 127.0.0.1' -H 'X-Forwarded-Proto: https' \
"$$@" "http://127.0.0.1:8081/index.php?module=Installation&action=$$action"
}
refused() {
php -r 'preg_match("~<div class=\"alert alert-(?:warning|danger)\">(.*?)</div>~s", file_get_contents("/tmp/step.html"), $$m);
fwrite(STDERR, "Matomo refused the " . $$argv[1] . ": " . trim(preg_replace("~\s+~", " ", html_entity_decode(strip_tags($$m[1] ?? "")))) . "\n");' "$$1"
kill $$installer
exit 1
}
until curl -s -o /dev/null http://127.0.0.1:8081/; do sleep 1; done
[ "$$(step databaseSetup --data-urlencode host=mariadb --data-urlencode username=matomo --data-urlencode "password=$$MARIADB_PASSWORD" \
--data-urlencode dbname=matomo --data-urlencode tables_prefix=matomo_ --data-urlencode 'adapter=PDO\MYSQL' --data-urlencode schema=Mariadb)" = 302 ] \
|| refused database
# The tables, made new, or kept and updated where an earlier start made them.
step tablesCreation > /dev/null
step reuseTables > /dev/null
# A Super User made by an earlier start is kept, and this step skipped.
[ "$$(step setupSuperUser --data-urlencode "login=$$ADMIN_USERNAME" --data-urlencode "password=$$ADMIN_PASSWORD" \
--data-urlencode "password_bis=$$ADMIN_PASSWORD" --data-urlencode "email=$$ADMIN_EMAIL")" = 302 ] \
|| refused "Super User"
case "$$WEBSITE" in
*://*) website=$$WEBSITE ;;
*) website=https://$$WEBSITE ;;
esac
name=$${website#*://}
name=$${name%%/*}
[ "$$(step firstWebsiteSetup --data-urlencode "siteName=$$name" --data-urlencode "url=$$website" \
--data-urlencode timezone=UTC --data-urlencode ecommerce=0)" = 302 ] \
|| refused website
# Matomo's defaults: visitors' IPs anonymised, and DB-IP's free location database
# downloaded now and every month.
[ "$$(step finished --data-urlencode anonymise_ip=1 --data-urlencode setup_geoip2=1 --data-urlencode submit=1)" = 302 ] \
|| refused settings
kill $$installer
wait $$installer 2> /dev/null || true
# What Matomo's System Check asks for: HTTPS only, which the proxy always serves, and the
# reports processed by the archiver below rather than as they are opened.
as_matomo php console config:set --section=General --key=force_ssl --value=1
as_matomo php console config:set --section=General --key=enable_browser_archiving_triggering --value=0
echo "Matomo is installed, with the Super User $$ADMIN_USERNAME"
fi
as_matomo php console core:update --yes --no-interaction \
|| echo "Matomo's database update failed: its page says how to finish it" >&2
exec apache2-foreground
volumes:
- matomo:/var/www/html
depends_on:
mariadb:
condition: service_healthy
# Matomo's reports, processed in the background every 15 minutes, as Matomo advises; the Visits
# Log and Real-time show visits at once. Its own entrypoint, so the image's does not copy Matomo
# into the volume a second time.
archiver:
image: matomo:5.14-apache
restart: unless-stopped
init: true
environment:
HOST: ${HOST}
entrypoint:
- sh
- -c
- |
cd /var/www/html
while :; do
if grep -q '^\[database\]' config/config.ini.php 2>/dev/null && ! grep -q '^installation_in_progress' config/config.ini.php; then
runuser -u www-data -- php console core:archive --url="https://$$HOST/" || true
sleep 900
else
sleep 10
fi
done
volumes:
- matomo:/var/www/html
depends_on:
- matomo
mariadb:
image: mariadb:11.8
restart: unless-stopped
stop_grace_period: 15s
# Matomo asks for packets of 64 MB at least.
command: --max-allowed-packet=64M
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_DATABASE: matomo
MARIADB_USER: matomo
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
volumes:
- db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 5s
retries: 10
start_period: 30s
volumes:
matomo:
db:
Ще в категорії «Аналітика й моніторинг»
- UmamiВебаналітика для ваших сайтів, без cookie
- Uptime KumaМоніторинг доступності зі сповіщеннями та сторінками статусу
- KenerСторінка статусу з моніторами доступності та інцидентами
- BeszelЛегкий моніторинг серверів: CPU, пам’ять, диск, мережа й статистика Docker, з історією та сповіщеннями
- changedetection.ioСтежить за вебсторінками й повідомляє, коли вони змінюються: ціни, наявність товарів, новини
- CheckmateМоніторинг доступності, швидкості сторінок і серверів, зі сторінками статусу