SSD Nodes Learn 🎉 VPS od $5.50/mies.
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-08-16

Samodzielna analityka WWW na VPS: porównanie narzędzi

Porównanie rozwiązań Plausible, Umami, Matomo, GoatCounter i GoAccess pod kątem wymagań RAM, baz danych oraz konfiguracji reverse proxy. Sprawdź, co wybrać na mały serwer.

Które narzędzie do samodzielnego hostowania analityki internetowej uruchomić na VPS?

Samodzielnie hostowane narzędzia do analityki internetowej dzielą się na dwie grupy, a wybór niewłaściwej kategorii wiąże się z większymi kosztami niż wybór niewłaściwego produktu. Pierwsza grupa uruchamia niewielki skrypt w przeglądarce odwiedzającego i zapisuje raportowane przez niego dane. Druga grupa odczytuje logi dostępu, które serwer WWW już generuje. Wszystkie kolejne wymagania, w tym baza danych i potrzebna pamięć RAM, wynikają z tego jednego wyboru.

Krótka odpowiedź dla małego serwera: GoatCounter i Medama mieszczą się w 1 GB pamięci RAM, ponieważ każdy z nich to jeden proces operujący na jednym pliku. Umami dodaje kontener Postgres i udostępnia pulpit nawigacyjny zrozumiały dla osoby nietechnicznej. Plausible Community Edition oraz Rybbit korzystają z ClickHouse, więc należy zaplanować co najmniej 2 GB pamięci RAM. Matomo to pełnoprawny produkt, który wymaga serwera dostosowanego do wielkości ruchu. GoAccess nie dodaje żadnych elementów do strony, ponieważ odczytuje już istniejący plik logów.

Tag skryptu a dziennik serwera: co rejestruje każde z tych rozwiązań

Tag skryptu mierzy aktywność przeglądarek. Strona się ładuje, skrypt zostaje uruchomiony i wysyła jedno żądanie do kolektora danych. Każdy element, który przerywa ten łańcuch, pozostaje niewidoczny: wyłączona obsługa JavaScript, lista filtrów blokująca żądanie, nieudane połączenie z kolektorem lub crawler, który nie wykonuje skryptów.

Analizator dzienników mierzy żądania. Serwer WWW zapisuje jeden wiersz dla każdego żądania, niezależnie od tego, czy zainstalowano jakiekolwiek dodatkowe narzędzia, więc dane są już dostępne na dysku. Rejestruje każdego crawlera oraz każde odwołanie do pliku, który nie posiada tagu skryptu. Nie widzi jednak tego, co dzieje się wewnątrz przeglądarki, ani nie rejestruje strony pobranej z pamięci podręcznej przeglądarki lub z sieci CDN (content delivery network) znajdującej się przed serwerem, ponieważ takie żądanie nigdy do niego nie dociera.

Obie wartości nie będą identyczne i żadna z nich nie jest błędna. Matomo obsługuje obie metody i dokumentuje, jakie dane traci się przy imporcie z dzienników w porównaniu do trackera JavaScript: rozdzielczość ekranu, tytuły stron, zdarzenia, śledzenie treści, mapy ciepła, nagrania sesji oraz analitykę formularzy. Ta lista to koszt zliczania żądań zamiast przeglądarek.

Ruch generowany przez boty stanowi drugą przyczynę rozbieżności. Zliczenia oparte na dziennikach obejmują crawlery, chyba że zostaną one odfiltrowane, a na typowej witrynie udział crawlerów jest na tyle duży, że może wpłynąć na wyciągane wnioski. Zarówno GoAccess, jak i import dzienników w Matomo filtrują znane boty. Żadne z nich nie jest w stanie odfiltrować crawlera, który fałszuje swój user agent, co stanowi dobry powód, aby łączyć zliczanie oparte na dziennikach z blokowaniem crawlerów AI na poziomie serwera i analizować dziennik po zastosowaniu blokady, a nie przed nią.

GoAccess: analityka na podstawie posiadanych logów

Należy zainstalować narzędzie z oficjalnego repozytorium projektu dla systemów Debian i Ubuntu, ponieważ pakiety dystrybucyjne są przestarzałe względem aktualnych wydań.

wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt-get update
sudo apt-get install goaccess

Następnie należy wskazać plik logu i wygenerować statyczny raport.

goaccess /var/log/nginx/access.log -o ~/report.html --log-format=COMBINED

Powyższe polecenie kończy się błędem Permission denied w przypadku zwykłego użytkownika, ponieważ w systemie Ubuntu logi nginx są własnością użytkownika root oraz grupy adm. Należy dodać swoje konto do tej grupy za pomocą sudo usermod -aG adm $USER, a następnie wylogować się i zalogować ponownie, gdyż przynależność do grup jest weryfikowana podczas logowania. Należy wykonać id i sprawdzić, czy adm pojawia się na liście przed ponowną próbą.

Raport generowany na podstawie bieżącego logu obejmuje tylko dane, które nie zostały jeszcze przeniesione przez logrotate. Żądania z poprzedniego dnia znajdują się w access.log.1, a starsze dane są skompresowane, dlatego widok tygodniowy wymaga odczytu również plików zarchiwizowanych.

zcat /var/log/nginx/access.log.*.gz | goaccess - --log-format=COMBINED -o ~/last-week.html

Dostępny jest również tryb pracy w czasie rzeczywistym, --real-time-html, który aktualizuje stronę za pośrednictwem WebSocket. Wymaga to otwarcia drugiego portu oraz dodania osobnej reguły proxy. Dla większości witryn wystarczający jest raport generowany co godzinę przez cron, co wiąże się z mniejszym nakładem pracy przy zabezpieczaniu systemu.

GoatCounter: jeden plik binarny Go i jeden plik SQLite

GoatCounter jest dostarczany jako statycznie skompilowany plik binarny, więc nie wymaga instalacji środowiska uruchomieniowego. Należy pobrać kompilację ze strony wydań i uruchomić ją lub skorzystać z obrazu.

docker run -p 8080:8080 -v goatcounter-data:/home/goatcounter/goatcounter-data arp242/goatcounter

Uruchomiony jako plik binarny, goatcounter serve nasłuchuje na porcie 8080 i tworzy bazę SQLite w ./goatcounter-data/db.sqlite3. Pierwszą witrynę należy utworzyć z poziomu wiersza poleceń, zamiast korzystać z kreatora internetowego, gdy instancja znajduje się już za proxy.

goatcounter db create site -vhost=stats.example.com -user.email=me@example.com

Narzędzie może samodzielnie obsługiwać certyfikaty za pomocą goatcounter serve -listen=:443 -tls=tls,rdr,acme, wykorzystując ACME (automatic certificate management environment), co jest przydatne na serwerze, na którym nie działają inne usługi. Jeśli port 443 jest już zajęty przez Nginx lub Caddy, należy pozostawić GoatCounter na porcie 8080 i skierować do niego ruch przez proxy. Skrypt śledzący ma według twórców projektu około 3.5K, dostępny jest również piksel śledzący dla stron, na których nie używa się JavaScript. Jeśli SQLite stanie się ograniczeniem przy dużym obciążeniu witryny, ten sam plik binarny obsługuje Postgres za pomocą goatcounter serve -db 'postgresql+dbname=goatcounter'. Kopie zapasowe sprowadzają się do skopiowania pliku, co stanowi główny argument przemawiający za taką architekturą narzędzia.

Medama: pojedynczy kontener wymagający 256 MB

Medama to najnowsza opcja w formie pojedynczego pliku binarnego. Z założenia nie wykorzystuje plików cookie, a projekt deklaruje rozmiar skryptu śledzącego poniżej 1 KB oraz możliwość uruchamiania na maszynach wirtualnych z 256 MB pamięci RAM. Są to deklaracje twórców projektu, a nie wartości zmierzone na potrzeby tego przewodnika.

docker volume create medama-data
docker run -d -p 127.0.0.1:8080:8080 -v medama-data:/app/data ghcr.io/medama-io/medama:latest

Oficjalne polecenie udostępnia port jako 8080:8080. Przedrostek loopback został użyty celowo, a sekcja dotycząca reverse proxy wyjaśnia powód. Pierwsze logowanie odbywa się przy użyciu admin oraz hasła CHANGE_ME_ON_FIRST_LOGIN, przy czym nazwa tego hasła stanowi instrukcję.

Jeden udokumentowany tryb awarii może sprawić trudności. Logowanie działa wyłącznie przez HTTPS lub na localhost, więc jeśli proxy zostanie skonfigurowane przed certyfikatem, formularz odrzuci poprawne hasło bez wyświetlenia przyczyny. Należy najpierw zakończyć konfigurację TLS (transport layer security), a następnie zalogować się.

Umami: Postgres i rozpoznawalny pulpit nawigacyjny

git clone https://github.com/umami-software/umami.git
cd umami
docker compose up -d

To polecenie uruchamia aplikację na porcie 3000 wraz z towarzyszącym jej kontenerem PostgreSQL. Dokumentacja określa PostgreSQL w wersji 12.14 jako minimum, a w przypadku budowania ze źródeł wymagane jest Node.js 18.18 lub nowsze. Dostępny jest gotowy obraz docker.umami.is/umami-software/umami:postgresql-latest, który wymaga zmiennej DATABASE_URL wskazującej na już działającą bazę danych.

Pierwsze logowanie odbywa się przy użyciu danych admin oraz hasła umami. Należy je zmienić przed skierowaniem rekordu DNS na serwer, ponieważ instancja staje się dostępna z Internetu w momencie, gdy rekord zostanie rozwiązany, a proxy zacznie odpowiadać. Szczegóły dotyczące Compose, plików środowiskowych oraz polityki restartu znajdują się w sekcji stos Docker Compose na VPS – należy unikać kopiowania stosów bez ich wcześniejszego przeanalizowania.

Zapotrzebowanie na zasoby obejmuje proces Node oraz bazę Postgres. Jest to rozwiązanie cięższe niż pojedynczy plik binarny, ale znacznie lżejsze niż jakakolwiek usługa wykorzystująca ClickHouse.

Plausible Community Edition: ClickHouse ustala minimalny limit pamięci RAM

git clone -b v3.2.1 --single-branch https://github.com/plausible/community-edition plausible-ce
cd plausible-ce
touch .env
echo "BASE_URL=https://stats.example.com" >> .env
echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env
docker compose up -d

Wersja v3.2.1 jest aktualna na sierpień 2026 roku, a polecenie klonowania przypina ją celowo. Stos składa się z trzech części: aplikacji, Postgres dla kont i ustawień oraz ClickHouse dla danych zdarzeń. SECRET_KEY_BASE musi być ciągiem znaków o długości co najmniej 64 bajtów, co generuje wywołanie openssl.

Wymagania Plausible określają minimum 2 GB pamięci RAM, aby ClickHouse i aplikacja nie zostały zakończone przez mechanizm out of memory killer, oraz procesor wspierający instrukcje SSE 4.2 lub NEON, których wymaga ClickHouse. To drugie wymaganie warto sprawdzić przed zakupem; jest to jedna z praktycznych różnic przy wyborze między VPS z architekturą ARM a x86. ClickHouse zajmie tyle pamięci, ile uzna za dostępną, dlatego na współdzielonym serwerze należy ustawić limit, zgodnie z opisem w ograniczaniu pamięci kontenera w Compose.

BASE_URL musi być dokładnie zgodne z publicznym adresem URL. W przypadku braku zgodności, po zalogowaniu aplikacja przekierowuje na błędny host, a plik cookie sesji jest zapisywany dla domeny, w której przeglądarka nie przebywa, co powoduje powrót do formularza logowania bez komunikatu o błędzie.

Dostarczony plik compose nie publikuje portu, ponieważ zakłada się użycie proxy przed aplikacją. Należy dodać nadpisanie (override), które opublikuje domyślny port aplikacji wyłącznie na interfejsie loopback.

cat > compose.override.yml << EOF
services:
    plausible:
        ports:
            - 127.0.0.1:8000:8000
EOF

Matomo: pełny produkt oraz wymagany serwer

Matomo działa w oparciu o PHP oraz MySQL lub MariaDB, co oznacza, że pasuje do klasycznego stosu webowego, a nie kontenerowego. Jest to również jedyne narzędzie w zestawieniu, dla którego opublikowano wytyczne sprzętowe w zależności od wolumenu ruchu.

ChartMatomo sizing guidance by monthly pageviews
The data behind this chart
[
  {
    "label": "100K/month",
    "cpu_cores": 2,
    "ram_gb": 2,
    "disk_gb": 50
  },
  {
    "label": "1M/month",
    "cpu_cores": 4,
    "ram_gb": 8,
    "disk_gb": 250
  },
  {
    "label": "10M/month",
    "cpu_cores": 8,
    "ram_gb": 16,
    "disk_gb": 400
  }
]

Powyższe dane to opublikowane minima dla Matomo według stanu na sierpień 2026, a nie pomiary wykonane na potrzeby tego przewodnika. Do 100 000 odsłon miesięcznie wymagane są 2 rdzenie CPU, 2 GB pamięci RAM oraz 50 GB przestrzeni SSD; jeden serwer obsługuje zarówno aplikację, jak i bazę danych. Przy 1M/month wymagania wzrastają do 8 GB pamięci RAM oraz 250 GB przestrzeni dyskowej. Przy 10M/month Matomo zaleca dwa serwery, a ostatni wiersz przedstawia serwer bazy danych: 16 GB pamięci RAM oraz 400 GB przestrzeni dyskowej. Wartości te należy odnosić do opcji z pojedynczym plikiem binarnym, gdzie cały zbiór danych stanowi jeden plik SQLite.

Archiwizacja jest procesem, który często zaskakuje użytkowników. Domyślnie Matomo generuje raporty w momencie otwarcia panelu nawigacyjnego, więc wraz ze wzrostem ilości danych panel działa wolniej, aż w końcu przekracza limit czasu oczekiwania. Udokumentowanym rozwiązaniem jest wyłączenie archiwizacji wyzwalanej przez przeglądarkę w ustawieniach ogólnych i uruchamianie archiwizatora za pomocą cron, jako użytkownik będący właścicielem plików Matomo, z poziomu katalogu Matomo.

php console core:archive --url=https://analytics.example.com

Matomo przechowuje również tabele surowych logów obok tabel przetworzonych raportów i umożliwia usuwanie starych surowych danych oraz raportów według harmonogramu. Funkcję tę należy włączyć podczas instalacji, a nie w momencie zapełnienia dysku. Matomo potrafi również importować logi dostępu serwera, co czyni go jedynym produktem w tym zestawieniu, który obsługuje obie rodziny danych jednocześnie.

Rybbit i nowsze stosy

git clone https://github.com/rybbit-io/rybbit.git
cd rybbit
chmod +x *.sh
./setup.sh your.domain.name

Rybbit to nowe rozwiązanie z nowoczesnym panelem sterowania. Skrypt instalacyjny tworzy plik środowiskowy i uruchamia stos za pomocą Docker Compose. Narzędzie wykorzystuje ClickHouse oraz serwer WWW Caddy, który zajmuje port 443 i automatycznie pobiera certyfikat dla wskazanej domeny. Jeśli na serwerze port 443 jest już zajęty przez nginx, skrypt nie będzie mógł powiązać gniazda. W takim przypadku należy użyć ręcznej konfiguracji Compose i umieścić usługę za istniejącym proxy. Dokumentacja wymaga co najmniej 2 GB pamięci RAM, testów na Ubuntu 24 LTS oraz architektury ARMv8.2-A lub nowszej ze względu na wymagania ClickHouse.

Ważna uwaga dotycząca młodych projektów: funkcje są dodawane szybko, co wiąże się z częstymi zmianami powodującymi niekompatybilność. Należy przypinać konkretne wersje (tagi), czytać informacje o wydaniu przed aktualizacją oraz wykonywać kopię zapasową bazy danych.

Retencja i przyrost danych na dysku: pomiar we własnym środowisku

Przyrost danych na dysku zależy od tego, co dane narzędzie przechowuje dla każdego zdarzenia. GoatCounter agreguje odsłony do liczników, więc rozmiar pliku rośnie bardziej w zależności od liczby unikalnych stron i dni niż od surowego wolumenu ruchu. Umami i Matomo zapisują wiersze dla każdego zdarzenia, a Matomo dodatkowo przechowuje przetworzone tabele raportów obok danych surowych. ClickHouse przechowuje zdarzenia w kolumnach i stosuje silną kompresję, dzięki czemu Plausible radzi sobie z wolumenem danych, który obciążyłby bazę wierszową.

Ten przewodnik nie podaje wartości w megabajtach na milion odsłon, ponieważ nie dokonano pomiaru dla Twojego ruchu. Wykonaj pomiar samodzielnie. Dostosuj nazwy usług i użytkowników do własnego pliku Compose.

du -h goatcounter-data/db.sqlite3
docker compose exec db psql -U umami -d umami -c "SELECT pg_size_pretty(pg_database_size('umami'));"
docker compose exec plausible_events_db clickhouse-client -q "SELECT formatReadableSize(sum(bytes_on_disk)) FROM system.parts WHERE active"

Zapisz liczbę, odczekaj tydzień, zapisz ją ponownie i podziel różnicę przez liczbę odsłon raportowaną przez pulpit nawigacyjny w tym tygodniu. Ta wartość dotyczy Twojej witryny i Twojego filtrowania botów, więc jest bardziej wartościowa niż jakakolwiek opublikowana średnia. Następnie ustaw limit retencji, póki liczba ta jest jeszcze mała. Pełny dysk wyłącza każdą usługę na VPS, nie tylko analitykę, co jest najsilniejszym argumentem za umieszczeniem wolumenu bazy danych w miejscu, o którym df -h wyśle powiadomienie. To ryzyko zasługuje na większą uwagę na serwerze, który już przechowuje coś o dużym rozmiarze, ponieważ własny serwer zdjęć wyczerpie miejsce na dysku na długo przed tym, zanim jakakolwiek baza danych analitycznych zbliży się do tego limitu.

Zachowanie za odwrotnym proxy na subdomenie

Umieść kolektor na subdomenie witryny, którą monitoruje, na przykład stats.example.com. Dzięki temu żądania kolektora są traktowane jako żądania własne (first-party), co pozwala uniknąć blokowania przez mechanizmy przeglądarkowe ograniczające żądania stron trzecich (third-party).

Podczas publikowania portu kontenera powiąż aplikację z interfejsem loopback. Docker tworzy własne reguły firewalla przed regułami ufw, dlatego kontener opublikowany jako -p 3000:3000 jest dostępny z Internetu, nawet jeśli ufw status wskazuje, że port jest zablokowany. Przetestuj to z innej maszyny za pomocą curl http://SERVER_IP:3000, a uzyskasz dostęp do panelu. Po opublikowaniu jako -p 127.0.0.1:3000:3000 ten sam test zwróci Connection refused, a dostęp do usługi będzie miało wyłącznie proxy.

server {
    listen 443 ssl;
    server_name stats.example.com;

    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

Nagłówki przekierowujące (forwarding headers) są w tym przypadku niezbędne. Bez X-Forwarded-For każda wizyta będzie pochodzić z 127.0.0.1, co spowoduje, że raporty geograficzne będą puste, a liczba unikalnych użytkowników zostanie zaniżona. Każdy projekt samodzielnie określa, którym nagłówkom ufa i w jakiej konfiguracji, dlatego należy sprawdzić dokumentację proxy zamiast zakładać standardowe zachowanie. Caddy ustawia te nagłówki automatycznie, a plik Caddyfile dla tego zadania składa się z zaledwie dwóch linii.

stats.example.com {
    reverse_proxy 127.0.0.1:3000
}

Jeśli jeszcze nie wybrano rozwiązania proxy, porównanie nginx, Caddy i Traefik zawiera informacje o tym, które z nich najlepiej sprawdzi się na pojedynczym serwerze z kilkoma subdomenami.

Self-hosting zmienia podmiot przechowujący dane. Nie zmienia jednak wymogów prawnych dotyczących tych danych. Należy rozróżnić dwie zasady. Zasada zgody ePrivacy dotyczy przechowywania lub odczytywania jakichkolwiek informacji na urządzeniu użytkownika, więc narzędzie, które nie zapisuje plików cookie ani nie korzysta z local storage, nie podlega temu konkretnemu wymogowi. RODO dotyczy przetwarzania danych osobowych, a adres IP jest uznawany za daną osobową, dlatego nadal wymagana jest podstawa prawna, ograniczenie okresu przechowywania oraz gotowość do udzielenia odpowiedzi na zapytanie użytkownika dotyczące posiadanych danych.

Plausible, Umami, GoatCounter oraz Medama domyślnie nie zapisują plików cookie. Sposób, w jaki każde z tych narzędzi wyciąga wnioski, różni się w zależności od projektu i wersji, dlatego należy zapoznać się z dokumentacją prywatności konkretnego projektu, zamiast polegać na streszczeniach. Matomo oferuje funkcję anonimizacji adresów IP oraz punkt końcowy typu opt-out, który można aktywować w interfejsie administratora.

Organy regulacyjne w różnych krajach wyciągają odmienne wnioski. Na przykład francuski CNIL publikuje warunki, pod którymi pomiar oglądalności może być zwolniony z obowiązku uzyskania zgody. Niniejsza sekcja stanowi podsumowanie faktów, a nie poradę prawną. W przypadku rzeczywistej witryny z realnymi użytkownikami należy skonsultować się z prawnikiem w swojej jurysdykcji.

Kwestia często pomijana: logi dostępu również stanowią dane osobowe. GoAccess nie dodaje żadnego skryptu do strony, a mimo to przetwarza adresy IP, dlatego analityka oparta na logach nie jest automatycznie wyłączona spod działania przepisów.

Blokery reklam i przyczyny spadku statystyk

Listy filtrów dopasowują reguły na podstawie nazw hostów oraz wzorców adresów URL. Zewnętrzne narzędzia analityczne łatwo zidentyfikować, ponieważ wszyscy użytkownicy pobierają skrypty z tej samej, powszechnie znanej domeny. Przeniesienie kolektora danych do własnej subdomeny usuwa tę nazwę hosta z żądania, a serwowanie skryptu z wybranej ścieżki eliminuje rozpoznawalną nazwę pliku. Oba te działania zmieniają parametry, na których opierają się listy blokujące.

Niniejszy wpis nie określa skuteczności blokowania, ponieważ nie przeprowadzono takich pomiarów. Odsetek odwiedzających blokujących daną konfigurację zależy od grupy docelowej; odbiorcy techniczni blokują treści znacznie częściej niż użytkownicy ogólni. Należy samodzielnie zmierzyć różnicę. W tym samym tygodniu należy policzyć żądania stron HTML w logach dostępu za pomocą GoAccess i porównać je z liczbą odsłon raportowaną przez narzędzie oparte na skryptach. Różnica stanowi sumę zablokowanych wizyt oraz stron pobranych z pamięci podręcznej przeglądarki.

Należy spodziewać się zmian w łącznych wynikach w dniu przejścia z zewnętrznego produktu, przy czym część tych zmian może nie mieć związku z blokowaniem. Narzędzia różnią się definicją odsłony, sposobem zliczania zmian tras w aplikacjach typu single page application oraz momentem zakończenia sesji. Przed wyciągnięciem wniosków o spadku ruchu należy porównać trendy w ujęciu tygodniowym.

Dobór narzędzia do witryny

  • Witryna osobista lub blog z ruchem do około 50 000 odsłon miesięcznie: GoatCounter lub Medama na VPS z 1 GB RAM, z kopiami zapasowymi w formie kopii plików.
  • Witryna, na której nie można dodać skryptu, lub odbiorcy stosujący silne blokowanie: GoAccess analizujący istniejące logi zgodnie z harmonogramem.
  • Witryna małej firmy, gdzie pulpit nawigacyjny obsługuje inna osoba: Umami z kontenerem Postgres.
  • Witryna wymagająca śledzenia celów i lejków, na serwerze z 2 GB RAM lub więcej: Plausible Community Edition lub Rybbit, jeśli preferowany jest nowszy interfejs i akceptowalny jest wczesny etap rozwoju projektu.
  • Wiele witryn, wiele kont użytkowników lub wymóg przechowywania surowych danych zgodnie z własną polityką retencji: Matomo, z rozmiarem instancji dobranym według powyższych wytycznych.

Należy zacząć od najprostszego narzędzia, które rozwiązuje dany problem. Przejście z GoatCounter na Plausible w przyszłości wiąże się jedynie z koniecznością zmiany subdomeny i utratą części historii. Migracja z Matomo do innego rozwiązania jest procesem złożonym i niezalecanym. Jeśli trwa proces decyzyjny dotyczący innych usług na tym samym serwerze, szersze zestawienie usług self-hosted zawiera informacje o tym, co można zainstalować obok, a jeśli celem jest śledzenie zapytań na poziomie aplikacji zamiast zliczania wizyt, właściwym narzędziem będzie samodzielnie hostowana usługa observability.

FAQ

Nie, są to dwie odrębne kwestie. Zasada zgody wynikająca z dyrektywy ePrivacy dotyczy przechowywania lub odczytywania informacji na urządzeniu użytkownika, więc narzędzie, które nie zapisuje plików cookie ani danych w pamięci lokalnej, nie podlega temu konkretnemu wymogowi. RODO stanowi odrębny zbiór przepisów i dotyczy przetwarzania danych osobowych, a adres IP jest daną osobową, dlatego nawet przy braku plików cookie wymagana jest podstawa prawna oraz określenie okresu przechowywania danych. Samodzielne hostowanie przenosi dane na własny serwer i czyni administratora podmiotem odpowiedzialnym za nie. Należy sprawdzić wytyczne lokalnego organu nadzorczego i skonsultować się z prawnikiem w konkretnym przypadku.

Ile pamięci RAM wymaga samodzielnie hostowana analityka na VPS?

O wymaganiach decyduje magazyn danych, a nie panel użytkownika. GoatCounter i Medama działają jako pojedynczy proces operujący na jednym pliku, a dokumentacja Medama wskazuje, że małe witryny mogą działać na maszynach z 256 MB RAM. Umami wymaga dodatkowego kontenera Postgres obok aplikacji Node. Plausible Community Edition oraz Rybbit korzystają z ClickHouse, a oba projekty wymagają co najmniej 2 GB RAM. Własne wytyczne Matomo wskazują na 2 rdzenie CPU oraz 2 GB RAM dla ruchu do 100 000 odsłon miesięcznie.

Dlaczego statystyki z własnego hostingu są niższe niż w poprzednim narzędziu?

Istnieją dwie główne przyczyny i obie są realne. Listy filtrów blokują część żądań do kolektorów danych, więc każde narzędzie oparte na skryptach traci te wizyty. Produkty te stosują również różne metody zliczania, ponieważ definicja odsłony oraz moment zakończenia sesji różnią się między nimi. Należy porównać liczbę żądań stron HTML z logów dostępu serwera z liczbą odsłon zarejestrowanych przez skrypt w tym samym tygodniu. Różnica wynika z zablokowanych wizyt oraz stron serwowanych z pamięci podręcznej, co jest pomiarem opartym na własnym serwerze, a nie na szacunkach zewnętrznych dostawców.

Czy mogę uruchomić Plausible lub Rybbit na VPS z architekturą ARM?

Oba narzędzia korzystają z ClickHouse, który wymaga instrukcji SSE 4.2 na architekturze x86 lub NEON na ARM. Wymagania Plausible wskazują na to wprost, a dokumentacja Rybbit podaje, że systemy ARM wymagają architektury ARMv8.2-A lub nowszej. Współczesne rdzenie serwerowe ARM spełniają ten wymóg, starsze natomiast nie. Błąd objawia się odmową uruchomienia ClickHouse z powodu nieobsługiwanego zestawu instrukcji, co jest widoczne w logach systemowych, a nie w logach samej aplikacji. W przypadku małych maszyn ARM, narzędzia oparte na pojedynczym pliku eliminują ten problem, ponieważ nie korzystają z ClickHouse.

Czy lepiej analizować logi serwera zamiast używać skryptu śledzącego?

Analiza logów jest zalecana, gdy nie można dodać skryptu, gdy odbiorcy intensywnie blokują skrypty lub gdy wymagane jest zliczanie wizyt uwzględniające roboty indeksujące. GoAccess odczytuje logi generowane przez serwer, więc nie zwiększa wagi strony ani nie wymaga bazy danych. Traci się jednak wgląd w zdarzenia zachodzące wewnątrz przeglądarki oraz pomiar stron serwowanych przez CDN lub z pamięci podręcznej przeglądarki, ponieważ takie żądania nie docierają do serwera. Wiele witryn stosuje oba rozwiązania jednocześnie, traktując je jako dwa odrębne źródła pomiarowe.