services: umami: image: ghcr.io/umami-software/umami:postgresql-latest container_name: umami restart: unless-stopped environment: DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} APP_SECRET: ${APP_SECRET} depends_on: db: condition: service_healthy healthcheck: test: ['CMD-SHELL', 'curl -f http://localhost:3000/api/heartbeat || exit 1'] interval: 10s timeout: 5s retries: 3 networks: - marina-net - umami-backend labels: - traefik.enable=true - traefik.docker.network=marina-net - traefik.http.routers.umami.rule=Host(`analytics.mifi.holdings`) - traefik.http.routers.umami.entrypoints=websecure - traefik.http.routers.umami.tls=true - traefik.http.routers.umami.tls.certresolver=letsencrypt - traefik.http.services.umami.loadbalancer.server.port=3000 db: image: postgres:16-alpine container_name: umami-db restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - umami-db-data:/var/lib/postgresql/data networks: - umami-backend healthcheck: test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'] interval: 5s timeout: 5s retries: 5 networks: marina-net: external: true umami-backend: driver: bridge volumes: umami-db-data: external: true