Português
Começar

← Todos os templates · Analytics e monitoramento

Faça deploy de Matomo em um clique

Web analytics de código aberto, a alternativa ao Google Analytics que guarda todas as visitas

Uma alternativa auto-hospedada para Google Analytics.

O que é Matomo?

O Matomo é uma plataforma de web analytics de código aberto e a alternativa mais conhecida ao Google Analytics. Um código de rastreamento nas páginas de um site registra cada visita, e os relatórios mostram visitantes, páginas, páginas de entrada e de saída, referenciadores, motores de busca, campanhas, países, dispositivos, metas e vendas de comércio eletrônico, com segmentos, anotações, relatórios agendados por e-mail e uma API HTTP. Em “Log de visitas” e “Tempo real”, as visitas aparecem enquanto acontecem, os dados nunca são amostrados e o Matomo Tag Manager vem incluído. Segundo o Matomo, mais de um milhão de organizações o usam.

Este template roda o Matomo On-Premise, a edição gratuita sob a GPL v3, a partir da imagem oficial com o MariaDB. O Superusuário e o primeiro site são criados a partir dos campos antes de a página responder a qualquer pessoa, então o instalador do Matomo nunca fica aberto para visitantes. Os endereços IP dos visitantes são anonimizados, como o Matomo faz por padrão; o banco de dados gratuito de localização da DB-IP é baixado e atualizado todo mês; e o arquivamento dos relatórios roda a cada 15 minutos, como pede a “Checagem do Sistema” do Matomo. Plugins pagos como Heatmap & Session Recording, Funnels, A/B Testing e Form Analytics vêm da “Loja de aplicativos” do Matomo.

Hospedagem de Matomo no Pethost

  1. Você entra no Pethost com uma passkey, GitHub ou Google. Ainda não tem máquina? Você escolhe um plano, e o link espera até ela ficar pronta.
  2. Novo projeto abre em Matomo. Você preenche o que ele pede e clica em Criar projeto: Usuário, E-mail, Senha do administrador, Site a medir.
  3. Em um ou dois minutos Matomo está no ar no próprio endereço com HTTPS. Os segredos são gerados ao acaso, e os dados vão para o backup noturno.
  4. É um projeto como qualquer outro: você ou seu agente podem alterá-lo, fazer rollback ou restaurá-lo.

Perguntas sobre Matomo

O Matomo é gratuito?

Sim. O Matomo On-Premise, a edição que este template roda, é gratuito e de código aberto sob a GPL v3 ou posterior. O Matomo Cloud é o serviço hospedado do fabricante, e os plugins premium da “Loja de aplicativos” do Matomo são pagos.

Matomo ou Google Analytics?

Os dois têm relatórios de visitas, fontes de tráfego, metas e comércio eletrônico. O Matomo guarda todas as visitas, sem amostragem, no próprio banco de dados, onde você fizer o deploy dele, e anonimiza os endereços IP por padrão. O Google Analytics Importer, um plugin gratuito do Matomo, traz o histórico de uma propriedade do Google Analytics.

Preciso de um banner de cookies com o Matomo?

Depende de onde estão seus visitantes e de como o Matomo está configurado. O Matomo consegue rastrear sem cookies, e as perguntas frequentes dele listam as condições em que a CNIL francesa permite que ele rode sem consentimento, como anonimizar os endereços IP e não usar o “Log de visitas” nem o User ID. Em outros lugares, o consentimento ainda pode ser necessário.

Como adiciono o Matomo ao meu site?

Cole o código de rastreamento de Administração → Sites → Código de rastreamento antes de </head> em todas as páginas, ou instale-o com o Matomo Tag Manager. A página de integrações do Matomo lista plugins para WordPress, Drupal, Joomla e muitas outras plataformas que o adicionam por você.

Posso usar meu próprio domínio no Matomo?

Sim. Adicione o domínio ao projeto no Pethost e depois, logado pelo endereço do projeto, adicione-o em Administração → Sistema → Configurações gerais → Hostname Matomo confiável. Até lá, o Matomo não deixa ninguém entrar por esse domínio.

Como atualizo o Matomo?

Troque a tag da imagem no compose.yaml por uma versão mais nova do Matomo e faça o deploy. Ao iniciar, o container copia o novo Matomo para o volume dele e atualiza o banco de dados, e a configuração, os plugins e os dados continuam como estavam.

De quanta memória e disco Matomo precisa?

O Matomo usa cerca de 250 MB de memória com o MariaDB em repouso, e o banco de dados dele cresce por volta de 1 GB a cada 5 milhões de exibições de página, segundo a estimativa do Matomo. No Pethost, o plano Starter basta, com espaço para outros apps ao lado.

Arquivo Docker Compose de Matomo

O template é este compose.yaml e as variáveis gravadas no .env do projeto quando ele é criado. O Pethost roda o arquivo exatamente como está escrito.

Containers: matomo (matomo:5.14-apache), archiver (matomo:5.14-apache), mariadb (mariadb:11.8).

Volumes, no backup noturno: 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:

Mais em Analytics e monitoramento