Hosting Umami na Managed VPS oznacza, że statystyki Państwa witryn pozostają na maszynie, która należy do Państwa, a nasze zespoły dbają o jej aktualność i nadzorują ją dniem i nocą. Umami to wolne oprogramowanie na licencji MIT, które mierzy ruch bez plików cookie. Ten poradnik podąża za jego oficjalną dokumentacją: instalacja przez Docker Compose i PostgreSQL, HTTPS, pierwsze logowanie, skrypt śledzący, co projekt mówi o danych osobowych, przydatne ustawienia, kopie zapasowe i aktualizacje.
Autor: Simon Vasconcelos Lee
Opublikowano 15 listopada 2026Czas czytania: 12 minut
APP_SECRET i TWO_FACTOR_ENCRYPTION_KEY, udostępnić Umami przez HTTPS pod własną subdomeną, a następnie od razu zmienić hasło konta admin.<head> swoich stron: skrypt nie używa plików cookie.pg_dump, plik .env przechowywać w bezpiecznym miejscu, a aktualizować poleceniem docker compose pull.Umami to otwartoźródłowa platforma analityki internetowej i produktowej. Dokumentacja opisuje narzędzie, które łączy ruch, kampanie, zachowanie odwiedzających, konwersje, retencję i przychody, od pierwszej wizyty po wyniki ważne dla Państwa działalności. Jest napisany w TypeScripcie na Next.js, a jego obraz Docker działa na koncie bez uprawnień administratora.
Jedna instancja śledzi kilka witryn: każda otrzymuje własny identyfikator i skrypt śledzący, a współpracownicy odnajdują się w niej dzięki kontom i zespołom.
Umami jest udostępniany na licencji MIT, w imieniu Umami Software, Inc. Przyznaje ona bezpłatnie prawo do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, sublicencjonowania i sprzedawania kopii oprogramowania. Mogą więc Państwo uruchomić go dla swojej firmy i dla witryn swoich klientów, bez zakupu licencji.
Jej jedyny warunek: informacja o prawach autorskich i informacja o zezwoleniu towarzyszą wszystkim kopiom lub istotnym częściom oprogramowania. Jak każda licencja MIT, dostarcza ona oprogramowanie „w stanie, w jakim jest”, bez gwarancji.
Dokumentacja przedstawia Umami jako analitykę bez plików cookie, bez śledzenia między witrynami i bez automatycznego zbierania danych osobowych. Hostowany samodzielnie, utrzymuje Państwa statystyki na Państwa własnym serwerze: to Państwo decydują, gdzie się znajdują i jak długo są przechowywane.
| Pytanie | Co mówi projekt | Źródło |
|---|---|---|
| Pliki cookie | Skrypt śledzący nie używa plików cookie; to, czy Państwa witryna potrzebuje informacji o plikach cookie, zależy od innych używanych usług i obowiązujących wymogów | FAQ |
| Zbierane dane | Odsłony, adresy stron odsyłających, przeglądarki, systemy operacyjne, typy urządzeń i przybliżona lokalizacja | FAQ |
| Adres IP | Tabela sesji nie ma kolumny na adres IP; identyfikator sesji to skrót obliczony z witryny, adresu, przeglądarki i soli, która domyślnie zmienia się co miesiąc | Schemat i kod, wersja 3.4.1 |
| Okres przechowywania | Przy samodzielnym hostingu dane są przechowywane, dopóki ich Państwo nie usuną | FAQ |
| RODO | Umami zaprojektowano z myślą o prywatności, a zgodność zależy od tego, jak go Państwo skonfigurują i jak będą go używać | FAQ |
| Dane, które Państwo wysyłają | Za identyfikator odwiedzającego lub właściwości zdarzeń, które zdecydują się Państwo wysyłać, odpowiadają Państwo | Wprowadzenie |
Trzy ustawienia skryptu śledzącego idą dalej, jeśli Państwo sobie tego życzą: data-exclude-search usuwa parametry wyszukiwania z zapisywanych adresów, data-exclude-hash usuwa fragment po krzyżyku, a data-do-not-track wyłącza śledzenie w przeglądarkach, które udostępniają preferencję Do Not Track. Dokumentacja zaznacza, że to ostatnie ustawienie samo w sobie nie jest pełnym rozwiązaniem do zarządzania zgodami.
Jeśli identyfikują Państwo zalogowanych odwiedzających przez data-distinct-id lub umami.identify(), dokumentacja zaleca wewnętrzny identyfikator użytkownika lub skrót zamiast adresu e-mail: wartość tę można odczytać w kodzie HTML strony.
Repozytorium dostarcza docker-compose.yml, który uruchamia Umami i jego bazę PostgreSQL. Od wersji 3 PostgreSQL jest jedyną obsługiwaną bazą, co najmniej w wersji 12.14, a dokumentacja zaleca ustawienie w niej strefy czasowej UTC. Na serwerze z zainstalowanym Dockerem proszę utworzyć katalog i zacząć od sekretów, generowanych losowo przez openssl, jak proponuje dokumentacja:
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
APP_SECRET=$(openssl rand -hex 32)
TWO_FACTOR_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .env
Następnie proszę umieścić obok ten compose.yaml. Podąża on za plikiem projektu w wersji 3.4.1, z dwiema zmianami: sekrety pochodzą z pliku .env, a port jest publikowany wyłącznie na 127.0.0.1.
services:
umami:
image: ghcr.io/umami-software/umami:latest
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami
APP_SECRET: ${APP_SECRET}
TWO_FACTOR_ENCRYPTION_KEY: ${TWO_FACTOR_ENCRYPTION_KEY}
depends_on:
db:
condition: service_healthy
init: true
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
umami-db-data:
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat
DATABASE_URL: jedyna wymagana zmienna, ciąg połączenia z bazą. Hasło szesnastkowe wpisuje się bez zmian; hasło ze znakami specjalnymi wymagałoby kodowania procentowego.APP_SECRET: losowy ciąg, który zabezpiecza tokeny uwierzytelniania, unikalny dla każdej instalacji. W kodzie wersji 3.4.1 wchodzi też do obliczania identyfikatorów sesji: proszę go nie zmieniać.TWO_FACTOR_ENCRYPTION_KEY: 64 znaki szesnastkowe, które szyfrują sekrety uwierzytelniania dwuskładnikowego. Bez tego klucza nikt nie może włączyć uwierzytelniania dwuskładnikowego.admin. Sonda /api/heartbeat odpowiada {"ok":true}, gdy Umami jest gotowy.latest podąża za ostatnią opublikowaną wersją. Rejestr projektu publikuje też tagi wersji, takie jak 3.4.1, aby przypiąć tę, której Państwo używają.Dokumentacja instalacji nie podaje wymagań dotyczących pamięci ani procesora. Rozmiar zależy od ruchu śledzonych witryn i od ilości przechowywanych danych. Na Managed VPS wystarczy opisać nam swoje zastosowanie, a polecimy odpowiedni rozmiar.
Umami nasłuchuje przez HTTP na porcie 3000, a dokumentacja proponuje udostępnić go za Państwa serwerem WWW, przez odwrotne proxy. Proszę nadać mu własną subdomenę, taką jak stats.example.com, wskazującą na serwer rekordami A i AAAA. Udostępnienie Umami pod ścieżką wymaga BASE_PATH, zmiennej odczytywanej podczas budowania aplikacji: przy opublikowanym obrazie subdomena jest drogą najprostszą.
Proxy musi też przekazywać adres odwiedzającego. Umami odczytuje go z otrzymanych nagłówków, w tym X-Real-IP i X-Forwarded-For: służy mu on do rozróżniania odwiedzających i ustalania ich kraju. Jeśli Państwa proxy używa innego nagłówka, wskazuje go CLIENT_IP_HEADER.
Caddy sam uzyskuje certyfikat Let’s Encrypt i włącza HTTPS. Jego dyrektywa reverse_proxy domyślnie ustawia X-Forwarded-For: te trzy wiersze w zupełności wystarczą.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Ten blok podąża za przykładem Nginx z dokumentacji Umami i nasłuchuje na porcie 80, aby Certbot mógł zainstalować HTTPS:
server {
listen 80;
listen [::]:80;
server_name stats.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Certbot następnie instaluje certyfikat i zajmuje się jego odnawianiem:
sudo certbot --nginx
Tworząc swoją bazę, Umami zakłada konto administratora: nazwa użytkownika admin, hasło umami. Dokumentacja prosi o zmianę tego hasła przy pierwszym logowaniu.
admin i umami.Proszę przechowywać TWO_FACTOR_ENCRYPTION_KEY razem z kopiami zapasowymi: dokumentacja ostrzega, że utrata lub zmiana tego klucza sprawia, że zapisane sekrety stają się nieczytelne, a każdy użytkownik musi wtedy ponownie skonfigurować uwierzytelnianie dwuskładnikowe.
<head> swoich stron, a następnie odwiedzić swoją witrynę: dane od razu pojawiają się w panelu.<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>
next/script zamiast zwykłego znacznika <script>.data-domains ogranicza śledzenie do domen produkcyjnych, co utrzymuje środowiska testowe poza statystykami.localStorage.setItem('umami.disabled', 1).Niektóre programy blokujące reklamy blokują wszystko, co przypomina analitykę. Przy samodzielnym hostingu Umami jest już udostępniany z Państwa własnej domeny, a dwie zmienne idą dalej: TRACKER_SCRIPT_NAME nadaje skryptowi inną nazwę niż script.js, a COLLECT_API_ENDPOINT zmienia nazwę punktu zbierania danych, zamiast /api/send. Skrypt sam wywołuje wtedy nowy punkt; na Państwa stronach zmienia się jedynie źródło kodu śledzącego.
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"
Te zmienne środowiskowe trafiają do usługi umami w compose.yaml, a następnie docker compose up -d tworzy kontener na nowo, aby je uwzględnił:
| Zmienna | Co daje | Wartość |
|---|---|---|
DISABLE_TELEMETRY | Wyłącza anonimową telemetrię, którą Umami wysyła do projektu, aby ulepszać aplikację | 1 |
PRIVATE_MODE | Wyłącza wszystkie zewnętrzne połączenia sieciowe, w tym ikony witryn, domyślnie pobierane z DuckDuckGo | 1 |
DISABLE_UPDATES | Wyłącza sprawdzanie nowych wersji | 1 |
IGNORE_IP | Wyklucza adresy IP i zakresy CIDR ze zbierania danych, na przykład adresy Państwa biur | Lista rozdzielona przecinkami |
SALT_ROTATION | Ustala, jak często zmienia się sól, na której opierają się identyfikatory sesji | Domyślnie month |
REDIS_URL | Dodaje pamięć podręczną Redis, którą dokumentacja zaleca dla witryn o dużym ruchu lub kilku instancji | Adres Państwa serwera Redis |
MCP_ENABLED | Otwiera punkt /mcp: Państwa asystent AI odczytuje statystyki w trybie tylko do odczytu, kluczem API utworzonym w Settings, API keys | 1 |
Wszystko, co przechowuje Umami, znajduje się w jego bazie PostgreSQL: konta, witryny, zespoły i statystyki. Proszę zrzucać ją codziennie i tuż przed każdą aktualizacją: przy samodzielnym hostingu dane te są przechowywane bez limitu czasu. Obok bazy plik .env zawiera sekrety, bez których nie da się z niej korzystać:
| Element | Co przechowuje | Do skopiowania |
|---|---|---|
| Baza PostgreSQL | Konta, witryny, zespoły, raporty i wszystkie statystyki | Obowiązkowo, przez pg_dump |
.env | Hasło do bazy, APP_SECRET i klucz uwierzytelniania dwuskładnikowego | Obowiązkowo, w postaci szyfrowanej |
compose.yaml | Konfigurację Państwa instancji | Zalecane |
pg_dump wykonuje spójny zrzut, gdy baza jest w użyciu. Format niestandardowy, -Fc, jest skompresowany i przywraca się go przez pg_restore:
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Proszę zaplanować to polecenie na serwerze co najmniej raz dziennie, porządkować zrzuty, które się gromadzą, i wysyłać kopię w inne miejsce. Przechowywane na dysku serwera, zrzuty te trafiają także do jego nocnych kopii zapasowych.
docker compose stop umami.docker compose stop umami
docker compose exec -T db pg_restore -U umami -d umami --clean --if-exists < umami-YYYY-MM-DD.dump
docker compose start umami
Proszę powtarzać to ćwiczenie od czasu do czasu, na kopii: w ten sposób sprawdzają Państwo, że kopia zapasowa działa.
Dokumentacja podaje dwa polecenia, wydawane z katalogu z compose.yaml. Baza pozostaje w swoim woluminie:
docker compose pull
docker compose up --force-recreate -d
Przy ponownym uruchomieniu kontener sam stosuje migracje schematu. Wersja 3.4.0 z 17 września 2026 roku zawierała dwie, dla adnotacji i kluczy API; wersja 3.4.1 z 23 października 2026 roku nie zawiera żadnej. Po dużej aktualizacji, takiej jak przejście na wersję 3, dokumentacja proponuje uruchomić ANALYZE w PostgreSQL, aby panele odzyskały szybkość:
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine z pliku. Przejście na nową wersję główną PostgreSQL wymaga zrzutu i przywrócenia albo pg_upgrade.Samodzielny hosting wymaga prowadzenia serwera, oprócz samej aplikacji. Na Managed VPS nasze zespoły przejmują serwer i proaktywnie czuwają nad Państwa instancją; Umami pozostaje Państwa oprogramowaniem, z jego ustawieniami i danymi.
| Temat | Nasze zespoły | Państwo |
|---|---|---|
| Serwer | Aktualizacje systemu i zabezpieczeń, w tym interwencje na serwerze | Moment dogodny dla Państwa działalności |
| Nadzór | Serwer pod opieką całą dobę, 7 dni w tygodniu, z interwencją bez czekania na Państwa telefon | Czytanie dzienników Państwa instancji |
| Umami | Proaktywna opieka: wychwytujemy błędy, spowolnienia i brak miejsca na dysku oraz polecamy poprawkę | Instalacja, aktualizacje i ustawienia, które wdrażają Państwo sami albo Państwa asystent AI |
| Witryny i statystyki | Serwer, który je utrzymuje, nadzorowany i objęty kopiami zapasowymi | Konta, śledzone witryny, skrypt śledzący i okres przechowywania danych |
| Kopie zapasowe | Co noc, szyfrowane i przechowywane poza maszyną; przywracanie w cenie | Zrzuty właściwe dla Umami oraz zgłoszenie prośby o przywrócenie, gdy będzie potrzebne |
| Migracja | Migracja Państwa obecnego serwera, bezpłatna | Moment przełączenia |
Jeśli wolą Państwo, aby nasze zespoły interweniowały w samej aplikacji, usługa ta jest rozliczana godzinowo lub ryczałtowo, z wyceną przekazaną przed interwencją.
Z Managed VPS od Simafri nasze zespoły utrzymują serwer Państwa instancji Umami w aktualności, nadzorują go dniem i nocą i interweniują bez czekania na Państwa telefon; proaktywnie czuwają także nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami albo Państwa asystent AI. Kopie zapasowe są szyfrowane co noc i przechowywane poza maszyną, ich przywracanie jest w cenie, a migracja obecnego serwera jest bezpłatna.
Tak. Umami jest udostępniany na licencji MIT: mogą Państwo używać go, modyfikować i rozpowszechniać w firmie bez zakupu licencji, pod warunkiem zachowania informacji o prawach autorskich. Pozostaje koszt serwera, na którym działa.
Nie. FAQ projektu podaje, że skrypt śledzący Umami nie używa plików cookie. To, czy Państwa witryna potrzebuje informacji o plikach cookie, zależy od innych używanych na niej usług i obowiązujących wymogów.
Od wersji 3 już nie: Umami obsługuje PostgreSQL, co najmniej w wersji 12.14. Instancja w wersji 2 na MySQL najpierw przenosi swoje dane do PostgreSQL zgodnie z przewodnikiem migracji projektu, a potem aktualizuje się do wersji 3.
Proszę wyjść od docker-compose.yml projektu, który uruchamia Umami i PostgreSQL, z losowymi sekretami w pliku .env i portem opublikowanym na 127.0.0.1. Proszę uruchomić docker compose up -d, a potem postawić przed nim odwrotne proxy z HTTPS, na subdomenie.
Podczas instalacji Umami tworzy konto admin z hasłem umami. Proszę zmienić je przy pierwszym logowaniu, w Settings, a następnie Profile, i włączyć uwierzytelnianie dwuskładnikowe w zakładce Security, gdy TWO_FACTOR_ENCRYPTION_KEY jest już ustawiony.
W instancji hostowanej samodzielnie TRACKER_SCRIPT_NAME nadaje skryptowi inną nazwę niż script.js, a COLLECT_API_ENDPOINT zmienia nazwę punktu zbierania danych /api/send. Następnie proszę zmienić źródło kodu śledzącego na swoich stronach.
Proszę codziennie zrzucać bazę PostgreSQL poleceniem pg_dump, z kontenera bazy, i osobno przechowywać plik .env, ponieważ zawiera APP_SECRET i klucz uwierzytelniania dwuskładnikowego. Przywraca się przez pg_restore, a przywracanie proszę regularnie testować.
Managed VPS obejmuje serwer: system, bezpieczeństwo, nadzór i kopie zapasowe. Nasze zespoły proaktywnie czuwają też nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami. Interwencja w aplikacji jest rozliczana godzinowo lub ryczałtowo.
Simafri
Porozmawiajmy o Państwa projekcie
Proszę powiedzieć nam w kilku słowach, czego Państwo potrzebują: odpowiemy szybko.
Dziękujemy! Państwa zapytanie zostało wysłane. Wkrótce się odezwiemy.
Wolą Państwo e-mail? Proszę napisać do nas na support@simafri.com.