Umami

Privacy-focused web analytics, with its Postgres

Umami on Cubeship

Umami is a simple, privacy-focused web analytics tool — an open-source alternative to Google Analytics that stores no cookies and keeps your visitors' data on your own server.

This template installs it on a Cubeship instance with the managed Postgres it needs.

What it creates

  • web — the Umami dashboard and tracking endpoint, from ghcr.io/umami-software/umami:postgresql-v2, answering on the domain you choose.
  • umami-db — a managed Postgres 18 database, attached to the app, so DATABASE_URL is set for you.

What you are asked

InputWhat to give
Where the dashboard answersA domain you control, pointed at your instance.
The app's session secretNothing — the instance generates it and shows it once.

After installing

  1. Open the domain and sign in with admin / umami.
  2. Change that password straight away under Settings → Profile.
  3. Add a website and paste the tracking snippet into your site.

Resources

The app is limited to 1 CPU and 1 GiB of memory, which is comfortable for a few million page views a month. Raise limits in template.yaml for more.

What this creates

Apps — project “umami”

web

ghcr.io/umami-software/umami:postgresql-v2 on port 3000, at the domain from “Where the dashboard answers”, reachable inside as cubeship-umami-production-web:3000

  • attaches the database umami-db

Databases

postgres 18, named umami-db, on port 5432

What an installer fills in

Where the dashboard answersdomain

The app's session secretsecret

template.yaml

# yaml-language-server: $schema=https://cubeship.dev/schema/template/v1.json
version: 1
minCubeship: "0.6.0"
project: umami            # suggested slug; the installer may change it

inputs:                   # what the template cannot know
  - key: domain
    type: domain
    label: Where the dashboard answers
  - key: appSecret
    type: secret
    label: The app's session secret
    generate: 32          # the instance generates it and shows it once

databases:
  - key: db               # template-local; what references name
    name: umami-db        # suggested instance name, renamable at install
    engine: postgres
    version: "18"
    database: umami       # the password is generated, never written here

apps:
  - key: web
    name: web
    image: ghcr.io/umami-software/umami
    tag: postgresql-v2
    port: 3000
    health: /api/heartbeat
    domains:
      - host: ${input.domain}
    attach:
      - database: db      # contributes DATABASE_URL and friends
        prefix: ""
    limits: { cpu: 1, memory: 1Gi }
    scale: 1
    env:
      APP_SECRET: ${input.appSecret}
      DATABASE_TYPE: postgresql

GET https://raw.githubusercontent.com/cubeshipd/cubeship-umami-template/29acfe0088bfd116b3777fffe7e7c573608bd47b/template.yaml