# Voorbeeld podman-compose bestand om Umami (self-hosted analytics) te draaien # op de webserver-Pi (Pi Main, 192.168.1.103), naast de al draaiende nginx die # de website zelf serveert. # # Vereist: podman + podman-compose (`pip3 install --user podman-compose`) op de Pi. # # Gebruik: # 1. Kopieer dit bestand naar bv. ~/umami/podman-compose.yml op de Pi. # 2. Kopieer .env.example naast dit bestand naar .env en vul een echte # POSTGRES_PASSWORD en APP_SECRET in (zie .env.example voor hoe je die genereert). # 3. cd ~/umami && podman-compose up -d # 4. Zie umami-setup.md voor het instellen van auto-start na reboot (systemd) # en het aanmaken van een website in de Umami-UI om het website-ID te krijgen. services: umami: image: docker.umami.is/umami-software/umami:postgresql-latest # Alleen op het interne (LAN) IP van deze Pi binden, niet op 0.0.0.0 — zelfde # aanpak als webserver-nginx.conf.example, zodat deze poort niet per ongeluk # vanaf buiten het netwerk bereikbaar is. Externe poort is 3001 (i.p.v. het # gebruikelijke 3000), omdat Gitea op dezelfde Pi al poort 3000 systeembreed # bezet (ook op dit interne IP, ongeacht dat Umami een specifiek IP opgeeft). # De container zelf luistert intern nog gewoon op 3000. De reverse-proxy-Pi # stuurt analytics.slpsoftware.nl door naar 192.168.1.103:3001 (zie # ../nginx/analytics-nginx.conf.example). ports: - "192.168.1.103:3001:3000" environment: DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: ${APP_SECRET} depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/api/heartbeat"] interval: 10s timeout: 5s retries: 5 db: image: docker.io/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 umami -d umami"] interval: 10s timeout: 5s retries: 5 volumes: umami-db-data: