Samodzielna analityka WWW na VPS: porównanie narzędzi
Wybierz optymalne narzędzie do analityki na własny serwer VPS. Porównujemy wymagania RAM, bazy danych oraz konfigurację dla Plausible, Umami, Matomo, GoatCounter i GoAccess.
Jakie 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 przechowuje dane raportowane przez ten skrypt. Druga grupa odczytuje logi dostępu generowane przez serwer WWW. Wszystkie kolejne wymagania, w tym baza danych i zapotrzebowanie na 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 pojedynczy proces operujący na jednym pliku. Umami dodaje kontener Postgres i oferuje pulpit nawigacyjny zrozumiały dla użytkownika nietechnicznego. Plausible Community Edition oraz Rybbit korzystają z ClickHouse, więc należy zaplanować 2 GB pamięci RAM lub więcej. Matomo to pełnoprawny produkt, który wymaga serwera o parametrach dostosowanych do natężenia ruchu. GoAccess nie dodaje żadnych elementów do strony, ponieważ odczytuje już istniejący plik logów.
Tag skryptu a log serwera: co widzi każde z tych narzędzi
Tag skryptu mierzy aktywność przeglądarek. Strona się ładuje, skrypt uruchamia się i wysyła jedno żądanie do kolektora. Wszystko, co przerywa ten łańcuch, pozostaje niewidoczne: wyłączona obsługa JavaScript, lista filtrów blokująca żądanie, nieudane żądanie do kolektora lub crawler, który nie wykonuje skryptów.
Parser logów mierzy żądania. Serwer WWW zapisuje jeden wiersz dla każdego żądania, niezależnie od tego, czy cokolwiek zainstalowano, więc dane znajdują się już na dysku. Widzi każdego crawlera oraz każde trafienie do pliku, który nie posiada tagu skryptu. Nie widzi jednak tego, co wydarzyło się wewnątrz przeglądarki, ani strony pobranej z pamięci podręcznej przeglądarki lub z CDN (content delivery network) znajdującego się przed serwerem, ponieważ takie żądanie nigdy nie dotarło do serwera.
Obie liczby nie będą się zgadzać i żadna z nich nie jest błędna. Matomo obsługuje obie metody i dokumentuje, z czego rezygnuje import logów w porównaniu z trackerem JavaScript: rozdzielczości ekranu, tytułów stron, zdarzeń, śledzenia treści, map ciepła, nagrań sesji oraz analityki formularzy. Ta lista to koszt liczenia żądań zamiast przeglądarek.
Ruch botów to druga połowa różnicy. Liczniki oparte na logach uwzględniają crawlery, chyba że zostaną odfiltrowane, a na typowej stronie udział crawlerów jest wystarczająco duży, by zmienić wnioski. Zarówno GoAccess, jak i import logów w Matomo filtrują znane boty. Żadne z nich nie potrafi odfiltrować crawlera, który podaje fałszywy user agent, co stanowi dobry powód, aby łączyć liczenie oparte na logach z blokowaniem crawlerów AI na poziomie serwera i analizować logi po zastosowaniu blokady, a nie przed nią.
GoAccess: analityka z posiadanych logów
Zainstaluj oprogramowanie z oficjalnego repozytorium projektu dla Debian i Ubuntu, ponieważ pakiety dystrybucyjne są przestarzałe względem nowych 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 goaccessNastępnie wskaż plik logu i wygeneruj statyczny raport.
goaccess /var/log/nginx/access.log -o ~/report.html --log-format=COMBINEDPowyższe polecenie kończy się błędem Permission denied dla zwykłego użytkownika, ponieważ w systemie Ubuntu logi nginx są własnością użytkownika root oraz grupy adm. Dodaj swoje konto do tej grupy za pomocą sudo usermod -aG adm $USER, a następnie wyloguj się i zaloguj ponownie, gdyż przynależność do grup jest wczytywana podczas logowania. Uruchom id i sprawdź, czy adm pojawia się na liście przed ponowną próbą.
Raport generowany na żywo obejmuje tylko dane, które nie zostały jeszcze przeniesione przez logrotate. Żądania z poprzedniego dnia znajdują się w access.log.1, a starsze pliki 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.htmlDostępny jest również tryb pracy na żywo, --real-time-html, który aktualizuje stronę za pośrednictwem WebSocket. Wymaga to otwarcia drugiego portu oraz dodania odpowiedniej reguły w proxy. Dla większości witryn wystarczający jest raport generowany co godzinę przez cron, co ogranicza również zakres wymaganych zabezpieczeń.
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/goatcounterUruchomiony 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, jeśli instancja znajduje się już za proxy.
goatcounter db create site -vhost=stats.example.com -user.email=me@example.comNarzędzie może samodzielnie zarządzać certyfikatami 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 około 3.5K, dostępny jest również piksel śledzący dla stron bez obsługi JavaScript. Jeśli SQLite stanie się ograniczeniem przy dużym ruchu, ten sam plik binarny obsługuje Postgres po użyciu goatcounter serve -db 'postgresql+dbname=goatcounter'. Kopie zapasowe polegają na skopiowaniu pliku, co stanowi główną zaletę tego typu 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 trackera poniżej 1 KB oraz możliwość uruchamiania małych witryn 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:latestOficjalne polecenie publikuje port jako 8080:8080. Zastosowanie prefiksu pętli zwrotnej (loopback) powyżej jest celowe, a sekcja dotycząca reverse proxy wyjaśnia powód. Pierwsze logowanie odbywa się za pomocą admin z hasłem 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 konfiguracja proxy zostanie wykonana 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 panel sterowania
git clone https://github.com/umami-software/umami.git
cd umami
docker compose up -dTo polecenie uruchamia aplikację na porcie 3000 wraz z towarzyszącym kontenerem PostgreSQL. Dokumentacja wskazuje PostgreSQL w wersji 12.14 jako minimum oraz Node.js 18.18 lub nowszy w przypadku budowania ze źródeł. 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.
Zasoby wymagane przez aplikację to proces Node oraz baza 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 -dWersja v3.2.1 jest aktualna na sierpień 2026, a polecenie clone celowo przypina tę wersję. Stos składa się z trzech części: aplikacji, Postgres dla kont i ustawień oraz ClickHouse dla danych zdarzeń. SECRET_KEY_BASE musi mieć długość co najmniej 64 bajtów, co zapewnia wywołanie openssl.
Wymagania Plausible określają co najmniej 2 GB pamięci RAM, aby ClickHouse oraz aplikacja nie zostały zamknięte przez mechanizm out of memory killer, a także procesor wspierający instrukcje SSE 4.2 lub NEON, których wymaga ClickHouse. Drugi z tych wymogów warto sprawdzić przed zakupem; jest to jedna z praktycznych różnic przy wyborze między VPS z architekturą ARM a x86. ClickHouse wykorzysta 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.
Wartość BASE_URL musi być identyczna z publicznym adresem URL. W przypadku rozbieżnoś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
EOFMatomo: 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 tym zestawieniu, dla którego opublikowano wytyczne sprzętowe w zależności od natężenia ruchu.
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
}
]Są to minimalne wymagania opublikowane przez Matomo według stanu na sierpień 2026 roku, 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, przy czym jeden serwer obsługuje zarówno aplikację, jak i bazę danych. Przy 1M/month wartości te zmieniają się na 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.comMatomo przechowuje również tabele z surowymi logami obok tabel z przetworzonymi raportami i umożliwia usuwanie starych surowych danych oraz starych raportów zgodnie z harmonogramem. Należy włączyć tę funkcję podczas instalacji, a nie w momencie, gdy dysk jest pełny. Matomo potrafi również importować logi dostępu serwera, co czyni go jedynym produktem w tym zestawieniu, który obsługuje obie te metody jednocześnie.
Rybbit i nowsze stosy
git clone https://github.com/rybbit-io/rybbit.git
cd rybbit
chmod +x *.sh
./setup.sh your.domain.nameRybbit 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 własny 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 takiej sytuacji należy skorzystać z ręcznej konfiguracji Docker Compose i umieścić usługę za istniejącym proxy. Dokumentacja wymaga minimum 2 GB pamięci RAM, zaleca testy na Ubuntu 24 LTS, a w przypadku architektury ARM wymaga procesora ARMv8.2-A lub nowszego ze względu na wymagania ClickHouse.
Ważna uwaga dotycząca młodych projektów: nowe funkcje pojawiają się szybko, podobnie jak zmiany powodujące 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 zakresie
Przyrost danych na dysku zależy od tego, co dane narzędzie przechowuje dla każdego zdarzenia. GoatCounter agreguje odsłony w liczniki, 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 przechowują wiersze dla każdego zdarzenia, a Matomo dodatkowo zapisuje 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 bieżący rozmiar, odczekaj tydzień, zapisz go ponownie i podziel różnicę przez liczbę odsłon raportowaną przez panel w tym tygodniu. Ta wartość dotyczy Twojej witryny oraz Twojego filtrowania botów, więc jest bardziej miarodajna niż jakakolwiek opublikowana średnia. Następnie ustaw limit retencji, póki liczba ta jest jeszcze niewielka. Pełny dysk powoduje awarię każdej usługi na VPS, nie tylko analityki, co stanowi najsilniejszy argument za przechowywaniem wolumenu bazy danych w miejscu, o którym df -h będzie wysyłać powiadomienia. To ryzyko wymaga większej uwagi na serwerze, który już przechowuje duże ilości danych, ponieważ własny serwer zdjęć wyczerpie miejsce na dysku znacznie szybciej, niż zrobi to jakakolwiek baza danych analitycznych.
Zachowanie za reverse 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 first-party i nie podlegają regułom przeglądarki blokującym żądania third-party.
Podczas publikowania portu kontenera należy powiązać aplikację z interfejsem loopback. Docker zapisuje własne reguły zapory przed ufw, dlatego kontener opublikowany jako -p 3000:3000 jest dostępny z Internetu, nawet gdy ufw status wskazuje, że port jest zablokowany. Po przetestowaniu z innego komputera za pomocą curl http://SERVER_IP:3000 zostanie wyświetlony dashboard. Po opublikowaniu jako -p 127.0.0.1:3000:3000 ten sam test zwróci Connection refused, a dostęp będzie miał tylko proxy. Ta sama zasada służy nie tylko do ukrywania dashboardu. Stanowi podstawę uruchamiania usługi onion na tym samym hoście, ponieważ każda usługa nadal odpowiadająca na publicznym interfejsie może powiązać ukryty adres z adresem IP. Endpoint kolektora musi pozostać dostępny z otwartego Internetu, ale dashboard nie musi. Jeśli zamiast publikować drugą subdomenę preferowane jest odczytywanie danych przez sieć prywatną, rozgłoszenie sieci VPS do tailnetu za pomocą routera podsieci zapewnia taki dostęp bez otwierania portu.
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) nie są tutaj opcjonalne. Bez X-Forwarded-For każda wizyta pochodzi z 127.0.0.1, przez co raporty geograficzne są puste, a liczba unikalnych użytkowników zliczana jest jako jeden. Każdy projekt określa, któremu nagłówkowi ufa i w jakiej konfiguracji, dlatego należy sprawdzić dokumentację proxy zamiast zakładać domyślne działanie. Caddy ustawia te nagłówki automatycznie, a plik Caddyfile dla tego zadania składa się z dwóch linii.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}Jeśli jeszcze nie wybrano proxy, porównanie nginx, Caddy i Traefik wyjaśnia, które rozwiązanie najlepiej sprawdzi się na pojedynczym serwerze z kilkoma subdomenami.
Czy baner plików cookie jest wymagany przy samodzielnym hostowaniu usług?
Samodzielne hostowanie zmienia podmiot przechowujący dane. Nie zmienia to jednak wymogów prawnych dotyczących tych danych. Należy rozróżnić dwie zasady. Zasada zgody wynikająca z dyrektywy 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 pamięci lokalnej, wykracza poza ten konkretny wymóg. RODO dotyczy przetwarzania danych osobowych, a adres IP jest uznawany za dane osobowe, dlatego nadal wymagana jest podstawa prawna, ograniczenie okresu przechowywania oraz procedura udzielania odpowiedzi na zapytania użytkowników dotyczące posiadanych przez administratora danych.
Plausible, Umami, GoatCounter oraz Medama domyślnie nie zapisują plików cookie. Sposób pozyskiwania danych przez każde z tych narzędzi 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 podsumowaniach. Matomo oferuje funkcję anonimizacji adresów IP oraz punkt końcowy umożliwiający rezygnację (opt-out), które można aktywować w interfejsie administratora.
Organy regulacyjne w różnych krajach wyciągają odmienne wnioski. Na przykład francuski organ CNIL publikuje warunki, pod jakimi pomiar oglądalności może być zwolniony z obowiązku uzyskania zgody. Niniejsza sekcja stanowi jedynie podsumowanie faktów, a nie poradę prawną. W przypadku rzeczywistej witryny z realnymi użytkownikami należy skonsultować się z prawnikiem w danej jurysdykcji.
Istotnym punktem, który często jest pomijany, jest fakt, że dziennik dostępu (access log) również zawiera dane osobowe. GoAccess nie dodaje żadnego skryptu do strony, a mimo to przetwarza adresy IP, więc analityka oparta na logach nie jest automatycznie wyłączona spod przepisów. Przeniesienie usługi na własny serwer zmienia miejsce ekspozycji danych, a nie eliminuje ją całkowicie. Z tego samego powodu co faktycznie ukrywa własna instancja SearXNG kończy się na wyszukiwarkach, podczas gdy same zapytania nadal trafiają do własnych logó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 ładują je z tej samej, 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 działania zmieniają parametry, na których opierają się filtry.
Niniejszy wpis nie określa skuteczności blokowania, ponieważ nie przeprowadzono takich pomiarów. Odsetek odwiedzających blokujących dany zestaw narzędzi zależy od grupy odbiorców; programiści blokują treści znacznie częściej niż przeciętni użytkownicy. 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 załadowanych z pamięci podręcznej przeglądarki.
Należy spodziewać się zmiany sumarycznych wyników w dniu przejścia z zewnętrznego produktu, przy czym część tej zmiany może nie wynikać z blokowania. 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.
Które narzędzie wybrać dla danej witryny
- Strona osobista lub blog z ruchem do około 50 000 odsłon miesięcznie: GoatCounter lub Medama na serwerze VPS z 1 GB pamięci RAM, z kopiami zapasowymi w formie kopii plików.
- Strona, na której nie można dodać skryptu lub gdzie odbiorcy stosują silne blokowanie treści: GoAccess analizujący istniejące logi według harmonogramu.
- Strona małej firmy, gdzie pulpit nawigacyjny będzie przeglądany przez inne osoby: Umami wraz z kontenerem Postgres.
- Strona wymagająca śledzenia celów i lejków konwersji, na serwerze z 2 GB pamięci RAM lub więcej: Plausible Community Edition lub Rybbit, jeśli preferowany jest nowszy interfejs i akceptowalny jest wczesny etap rozwoju projektu.
- Wiele stron, wiele kont użytkowników lub wymóg przechowywania surowych danych zgodnie z własną polityką retencji: Matomo, z zasobami dobranymi zgodnie z opublikowanymi wytycznymi.
Należy zacząć od najprostszego narzędzia, które realizuje postawione cele. 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 uruchomić obok. Jeśli celem jest śledzenie zapytań na poziomie aplikacji, a nie zliczanie odwiedzin, właściwym narzędziem będzie samodzielnie hostowana usługa obserwowalności.
FAQ
Czy samodzielne hostowanie analityki zwalnia z obowiązku stosowania banera plików cookie?
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 nie korzysta z local storage, 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 nadal wymagana jest podstawa prawna oraz ograniczenie okresu przechowywania danych. Samodzielne hostowanie przenosi dane na własny serwer i czyni administratora podmiotem odpowiedzialnym za nie. Należy zapoznać się z wytycznymi lokalnego organu nadzorczego i skonsultować się z prawnikiem w konkretnym przypadku.
Ile pamięci RAM wymaga samodzielnie hostowana analityka na VPS?
O wymaganiach decyduje baza danych, a nie panel sterowania. 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 kontenera Postgres obok aplikacji Node. Plausible Community Edition oraz Rybbit korzystają z ClickHouse, przy czym oba projekty zalecają co najmniej 2 GB RAM. Oficjalne wytyczne Matomo wskazują na 2 rdzenie procesora oraz 2 GB pamięci RAM dla ruchu do 100 000 odsłon miesięcznie.
Dlaczego statystyki z własnego serwera są niższe niż w poprzednim narzędziu?
Istnieją dwie rzeczywiste przyczyny. Listy filtrów blokują niektóre żądania do skryptów śledzących, więc każde narzędzie oparte na skryptach traci część wizyt. Produkty te różnią się również metodologią zliczania, ponieważ definicja odsłony oraz moment zakończenia sesji zależą od implementacji. Warto porównać liczbę żądań stron HTML z logów dostępu z jednego tygodnia z liczbą odsłon zarejestrowanych przez skrypt w tym samym okresie. Różnica wynika z zablokowanych wizyt oraz stron serwowanych z pamięci podręcznej, mierzonych bezpośrednio na własnym serwerze, a nie szacowanych na podstawie zewnętrznych statystyk.
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. W przypadku braku wsparcia ClickHouse nie uruchomi się, zgłaszając błąd zestawu instrukcji, co będzie widoczne w logach systemu, a nie aplikacji. W przypadku małych jednostek ARM problem ten nie występuje przy użyciu narzędzi opartych na pojedynczym pliku, ponieważ nie wymagają one ClickHouse.
Czy lepiej analizować logi serwera zamiast używać skryptu śledzącego?
Analizę logów należy stosować, gdy nie ma możliwości dodania skryptu, gdy grupa docelowa intensywnie blokuje skrypty lub gdy wymagane jest zliczenie wszystkich wizyt, w tym robotów indeksujących. 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.