5.0 KiB
Umami Self-Hosted Setup (Analytics)
Stapsgewijze handleiding om Umami (self-hosted website-analytics) op te zetten op de
webserver-Pi (Pi Main, 192.168.1.103) met Podman, en bereikbaar te maken via
analytics.slpsoftware.nl. Dit vult het "Analytics/uptime dashboard" open item uit
operations/production-readiness-checklist.md in voor het analytics-gedeelte.
Vereisten
- Podman is al aanwezig op de Pi (bevestigd door de gebruiker).
podman-composegeïnstalleerd:pip3 install --user podman-compose(of via de package manager van je distro, indien beschikbaar).- DNS: een A-record voor
analytics.slpsoftware.nldat naar het publieke IP van de reverse-proxy-Pi wijst (dezelfde Pi die ooktest.slpsoftware.nlafhandelt).
1. Umami + database opzetten (op de webserver-Pi)
- Maak een map aan, bv.
~/umami/, en kopieer daarin:operations/deployment/umami/podman-compose.yml.example→~/umami/podman-compose.ymloperations/deployment/umami/.env.example→~/umami/.env
- Vul in
~/umami/.enveen echtePOSTGRES_PASSWORDenAPP_SECRETin (bv. viaopenssl rand -base64 32voor beide — gebruik twee verschillende waarden). - Start de containers:
cd ~/umami podman-compose up -d - Controleer dat Umami draait en bereikbaar is op het interne netwerk:
Dit zou een JSON-antwoord met
curl http://192.168.1.103:3000/api/heartbeat"ok"moeten teruggeven.
2. Automatisch starten na reboot (systemd user service)
Podman-compose start niet vanzelf op na een herstart van de Pi, tenzij je dit expliciet instelt. Omdat rootless Podman hier al gebruikt wordt, is een systemd user-service de eenvoudigste aanpak:
- Zorg dat de gebruiker-sessie blijft "linger-en" na uitloggen/reboot:
sudo loginctl enable-linger $(whoami) - Maak
~/.config/systemd/user/umami.serviceaan:[Unit] Description=Umami analytics (podman-compose) After=network-online.target [Service] WorkingDirectory=%h/umami ExecStart=/usr/bin/podman-compose up ExecStop=/usr/bin/podman-compose down Restart=on-failure [Install] WantedBy=default.target - Activeer en start de service:
systemctl --user daemon-reload systemctl --user enable --now umami.service
3. Reverse proxy + SSL (op de reverse-proxy-Pi)
- Kopieer
operations/deployment/nginx/analytics-nginx.conf.examplenaar bv./etc/nginx/sites-available/slpsoftware-analytics.confop de reverse-proxy-Pi, en maak een symlink insites-enabled. - Zorg dat het DNS-record voor
analytics.slpsoftware.nlal actief is, en draai dan:sudo certbot --nginx -d analytics.slpsoftware.nl - Herlaad nginx:
sudo nginx -t && sudo systemctl reload nginx. - Test: open
https://analytics.slpsoftware.nlin de browser — je zou het Umami-inlogscherm moeten zien (standaard inloggegevens:admin/umami, direct wijzigen na eerste login).
4. Website registreren in Umami en het website-ID ophalen
- Log in op
https://analytics.slpsoftware.nlen wijzig direct het standaardwachtwoord. - Ga naar Settings → Websites → Add website en vul in:
- Name:
SLP Software(of naar keuze) - Domain: het domein van de daadwerkelijke website (bv.
slpsoftware.nloftest.slpsoftware.nl, afhankelijk van welke omgeving je eerst wilt meten)
- Name:
- Na het opslaan toont Umami een Website ID (een UUID) — dit heb je nodig voor de volgende stap.
5. Tracking script koppelen aan de website (build-configuratie)
De React-app (src/components/UmamiAnalytics.tsx) injecteert het Umami tracking-script
automatisch, mits de volgende twee build-time variabelen zijn ingesteld — beide zijn
geen secrets (client-side zichtbaar), dus als Gitea Actions repository variables
(niet secrets), net als VITE_SENTRY_DSN:
| Variabele | Waarde |
|---|---|
VITE_UMAMI_SCRIPT_URL |
https://analytics.slpsoftware.nl/script.js |
VITE_UMAMI_WEBSITE_ID |
het Website ID uit stap 4 |
Stel deze in via Gitea → Repository Settings → Actions → Variables. Zodra beide bestaan, pakt de eerstvolgende build ze automatisch op; zonder deze variabelen slaat de app het inladen van het script gewoon over (geen crash, geen tracking).
Lokaal (pnpm dev): het tracking-script wordt hier bewust nooit geladen (zie
UmamiAnalytics.tsx), zodat lokaal testen de bezoekersstatistieken niet vervuilt. Wil je
dit toch lokaal testen, zet dan tijdelijk beide waarden in .env.local (zie
.env.example) én verwijder tijdelijk de import.meta.env.DEV-check.
Openstaande handmatige stappen
podman-compose up -ddaadwerkelijk draaien op Pi Main.- Systemd user-service instellen voor auto-start na reboot.
- DNS-record + certbot voor
analytics.slpsoftware.nlop de reverse-proxy-Pi. - Standaard Umami-wachtwoord direct wijzigen na eerste login.
- Website aanmaken in Umami en het Website ID overnemen.
VITE_UMAMI_SCRIPT_URLenVITE_UMAMI_WEBSITE_IDals Gitea repository variables instellen.