Ackee

Privacy-focused, cookie-free web analytics on MongoDB — a self-hosted alternative to Google Analytics

Ackee on Cubeship

Ackee is a self-hosted analytics tool that cares about privacy: no cookies, no unique user tracking, and the data stays on your own server.

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

What it creates

  • ackee — the dashboard and tracking endpoint, from electerious/ackee:3.6.0, answering on the domain you choose.
  • ackee-db — a managed MongoDB 8.0 database, attached to the app.

What you are asked

InputWhat to give
Where the dashboard answersA domain you control, pointed at your instance.
The username you sign in withAnything; admin unless you change it.
The password you sign in withNothing — the instance generates it and shows it once. Keep a copy.
The sites allowed to send visitsEvery origin the tracker runs on, comma-separated: https://example.com,https://www.example.com.

After installing

  1. Open the domain and sign in with the username and the generated password.

  2. Under Settings → Domains, add each site and copy its embed code.

  3. Paste it into the site:

    <script async src="https://<your domain>/tracker.js" data-ackee-server="https://<your domain>" data-ackee-domain-id="<domain id>"></script>
    

A site missing from the allowed origins sends nothing: the browser refuses the request. To add one later, change ACKEE_ALLOW_ORIGIN on the ackee app and redeploy. The username and password are variables on the same app.

Resources

The app is limited to 0.5 CPU and 512 MiB of memory. Raise limits in template.yaml if your traffic needs more.

What this creates

ackee

electerious/ackee:3.6.0

ackee-db

MongoDB 8.0

template.yaml
# yaml-language-server: $schema=https://cubeship.dev/schema/template/v1.json
version: 1
minCubeship: "0.6.0"
project: ackee

inputs:
  - key: domain
    type: domain
    label: Where the dashboard answers
  - key: username
    type: text
    label: The username you sign in with
    default: admin
  - key: password
    type: secret
    label: The password you sign in with
    generate: 24
  - key: allowOrigin
    type: text
    label: The sites allowed to send visits
    help: Their full origins, comma-separated, like https://example.com,https://www.example.com. The tracker on any other site is refused.
    pattern: ^https?://[^,\s]+(,https?://[^,\s]+)*$

databases:
  - key: db
    name: ackee-db
    engine: mongodb
    version: "8.0"
    database: ackee

apps:
  - key: web
    name: ackee
    image: electerious/ackee
    tag: "3.6.0"
    port: 3000
    # Ackee has no health route; the dashboard's page is the lightest one.
    health: /
    domains:
      - host: ${input.domain}
    attach:
      - database: db
    limits: { cpu: 0.5, memory: 512Mi }
    env:
      # Ackee reads only ACKEE_MONGODB or MONGODB_URI, never MONGO_URL.
      # The root user lives in admin, whatever database the URL names.
      ACKEE_MONGODB: mongodb://${db.db.user}:${db.db.password}@${db.db.host}:${db.db.port}/${db.db.name}?authSource=admin
      ACKEE_USERNAME: ${input.username}
      ACKEE_PASSWORD: ${input.password}
      ACKEE_ALLOW_ORIGIN: ${input.allowOrigin}