Umami is a privacy-first, self-hosted web analytics solution. It tracks website visits, pages and referrers without collecting personal data or using cookies. The dashboard is clean and customizable, giving you essential insights without the bloat. It’s GDPR-compliant by design and lightweight enough to run on small servers. Great for developers and businesses who care about data privacy.

Setup

docker-compose.yaml

version: '3.7'

networks:
  docker_net:
    external: true

volumes:
  umami-db-data:

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    container_name: umami
    restart: unless-stopped
    ports:
      - 3005:3000
    environment:
      DATABASE_URL: postgresql://umami:$UMAMI_DB_PASSWORD@umami_db:5432/umami
      DATABASE_TYPE: postgresql
      APP_SECRET: $UMAMI_APP_SECRET
    depends_on:
      umami_db:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - docker_net

  umami_db:
    image: postgres:15-alpine
    container_name: umami_db
    restart: unless-stopped
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: $UMAMI_DB_PASSWORD
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - docker_net

Sources