---
title: "Matomo: Docker Compose і хостинг в один клік"
description: "Matomo — вебаналітика з відкритим кодом, альтернатива Google Analytics. Self-hosted Matomo On-Premise з MariaDB і HTTPS в один клік."
---

[← Усі шаблони](https://pethost.dev/uk/templates/) · [Аналітика й моніторинг](https://pethost.dev/uk/templates/monitoring/)

# Задеплойте Matomo в один клік

Вебаналітика з відкритим кодом — альтернатива Google Analytics, яка зберігає кожне відвідування

Альтернатива Google Analytics на вашій машині.

[Задеплоїти на Pethost](https://console.pethost.dev/?template=matomo)

## Що таке 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

1. Ви входите в Pethost — з ключем доступу, через GitHub або Google. Машини ще немає? Ви обираєте тариф, і посилання чекає, доки машина не буде готова.
2. Вікно «Новий проєкт» відкривається на застосунку Matomo. Ви заповнюєте те, що він просить, і натискаєте «Створити проєкт»: **Ім’я користувача**, **Електронна пошта**, **Пароль адміністратора**, **Сайт для відстеження**.
3. За хвилину-дві Matomo працює за власною адресою з HTTPS. Секрети створюються випадково, а дані потрапляють у щонічний бекап.
4. Це проєкт як будь-який інший: ви або ваш агент можете його змінити, відкотити або відновити.

## Питання про 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:
```

[compose.yaml](https://pethost.dev/templates/matomo/compose.yaml)[Відкрити на GitHub](https://github.com/pethost-dev/templates/tree/main/matomo)

## [Ще в категорії «Аналітика й моніторинг»](https://pethost.dev/uk/templates/monitoring/)

- [**Umami**Вебаналітика для ваших сайтів, без cookie](https://pethost.dev/uk/templates/umami/)
- [**Uptime Kuma**Моніторинг доступності зі сповіщеннями та сторінками статусу](https://pethost.dev/uk/templates/uptime-kuma/)
- [**Kener**Сторінка статусу з моніторами доступності та інцидентами](https://pethost.dev/uk/templates/kener/)
- [**Beszel**Легкий моніторинг серверів: CPU, пам’ять, диск, мережа й статистика Docker, з історією та сповіщеннями](https://pethost.dev/uk/templates/beszel/)
- [**changedetection.io**Стежить за вебсторінками й повідомляє, коли вони змінюються: ціни, наявність товарів, новини](https://pethost.dev/uk/templates/changedetection/)
- [**Checkmate**Моніторинг доступності, швидкості сторінок і серверів, зі сторінками статусу](https://pethost.dev/uk/templates/checkmate/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Шаблони](https://pethost.dev/uk/templates/)
- [Про нас](https://pethost.dev/about/)
- [Документація](https://pethost.dev/docs/)
- [Блог](https://pethost.dev/uk/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Плагін](https://github.com/pethost-dev/plugin)
- [Умови](https://pethost.dev/terms/)
- [Конфіденційність](https://pethost.dev/privacy/)
- [Повернення коштів](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Бази даних

- [Postgres](https://pethost.dev/uk/postgres/)

Порівняння

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/uk/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/uk/blog/coolify-cloud-vs-dokploy-cloud/)
- [Ціни Railway vs Render vs Fly.io](https://pethost.dev/uk/blog/railway-vs-render-vs-fly-io-pricing/)
- [Керований хостинг Docker Compose](https://pethost.dev/uk/blog/managed-docker-compose-hosting/)

Альтернативи

- [Альтернативи Railway](https://pethost.dev/uk/blog/railway-alternatives/)
- [Альтернативи Heroku](https://pethost.dev/uk/blog/heroku-alternatives/)
- [Альтернативи Dokploy](https://pethost.dev/uk/blog/dokploy-alternatives/)
- [Альтернативи Coolify](https://pethost.dev/uk/blog/coolify-alternatives/)
- [Альтернативи Render](https://pethost.dev/uk/blog/render-alternatives/)
- [Альтернативи Sliplane](https://pethost.dev/uk/blog/sliplane-alternatives/)
