---
title: Ackee
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, web-analytics, privacy, self-hosted, analytics, nodejs, graphql, mongodb, minimal]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=web-analytics]
---

# 🐢 Ackee

> Analytics web **minimaliste** et **privacy-first** écrit en Node.js, basé sur GraphQL et MongoDB — pour qui veut l'essentiel sans le superflu.
> Source : [selfh.st](https://selfh.st/apps/?tag=web-analytics)

## 📋 Métadonnées

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [ackee.electerious.com](https://ackee.electerious.com/) |
| **GitHub** | [github.com/electerious/Ackee](https://github.com/electerious/Ackee) |
| **License** | MIT |
| **Langage** | Node.js / GraphQL / MongoDB |
| **Étoiles** | 385 |
| **Dernière MAJ** | 2026-04 |
| **Catégorie** | [[cat-web-analytics]] |

## 📝 Description

**Ackee** est une solution d'**analyse web auto-hébergeable** particulièrement **légère et minimaliste**. Le projet, maintenu par Tobias Reich (@electerious), se veut une **alternative simple** à Google Analytics, sans cookies, sans tracking tiers, et avec une **interface épurée** qui va droit au but. Ackee est particulièrement apprécié des développeurs qui n'ont besoin que de **métrique simples** : visiteurs uniques, pages vues, durée moyenne, top pages, top référrers.

L'architecture est composée de **trois briques** : une **API GraphQL** (Node.js), une **interface web** minimaliste (React), et une **base MongoDB** pour la persistance. Le **tracker JavaScript** côté client ne pèse que **~2 Ko** et n'envoie que le strict minimum : URL, titre, site de référence, résolution d'écran et timestamp. **Aucune donnée personnelle** n'est collectée, ce qui rend Ackee **conforme RGPD nativement**.

Fonctionnalités principales : **multi-domaines**, **partage de dashboards en lecture seule** (via token unique), **API GraphQL** complète pour intégrations tierces, **mode sombre**, **tri et filtrage** par période, **visualisation de tendances** sur 7/30/365 jours, **throttling** configurable pour limiter la charge, **détection d'événements** simples.

Ackee est idéal pour les **petits à moyens sites** (blogs, portfolios, sites vitrines) et pour les développeurs qui veulent **garder le contrôle** de leurs données sans la complexité d'un [[app-matomo]] ou la lourdeur d'un Google Analytics. Son mode **single-domain** simplifié (sans le mode multi-sites) est aussi un avantage pour les installations minimalistes.

## 🚀 Installation

### Option 1 : Docker Compose (recommandé)

```yaml
# docker-compose.yml
version: '3.8'

services:
  ackee:
    image: electerious/ackee:latest
    container_name: ackee
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      ACKEE_MONGODB: mongodb://ackee:***@mongo:27017/ackee
      ACKEE_USERNAME: admin
      ACKEE_PASSWORD: changez-moi-maintenant
      ACKEE_ALLOW_ORIGIN: https://ackee.example.com
    depends_on:
      mongo:
        condition: service_healthy
    networks:
      - ackee-net
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/"]
      interval: 30s
      timeout: 5s
      retries: 3

  mongo:
    image: mongo:6
    container_name: ackee-mongo
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: ackee
      MONGO_INITDB_ROOT_PASSWORD: ackee
      MONGO_INITDB_DATABASE: ackee
    volumes:
      - ./mongo-data:/data/db
    networks:
      - ackee-net
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  ackee-net:
    driver: bridge
```

Lancement :

```bash
docker compose up -d
# Accéder à http://localhost:3000
# Se logger avec ACKEE_USERNAME / ACKEE_PASSWORD
# Ajouter un domaine et copier l'ID fourni
```

### Option 2 : Installation manuelle (Node.js)

```bash
git clone https://github.com/electerious/Ackee.git
cd Ackee
npm install
npm run build
# Configurer les variables d'env
ACKEE_MONGODB=mongodb://localhost:27017/ackee npm start
```

Ackee requiert **Node.js 18+**, **MongoDB 5+**, et environ **256 Mo de RAM** minimum.

## ⚙️ Configuration

Variables d'environnement principales :

- **ACKEE_MONGODB** : URI MongoDB. Format `mongodb://user:pass@host:port/db`.
- **ACKEE_USERNAME** / **ACKEE_PASSWORD** : identifiants de l'admin. **À changer impérativement**.
- **ACKEE_ALLOW_ORIGIN** : URL du front (CORS). Strict, sans wildcard.
- **ACKEE_ALLOW_DOMAIN** : optionnel, restreint l'API à un domaine précis.
- **ACKEE_TRACKER** : nom de domaine où le script tracker sera servi (CDN custom possible).
- **ACKEE_RESOLVE_IP** : `true` pour activer la géolocalisation IP, `false` (défaut) pour désactiver.
- **ACKEE_DETAILED** : active des données plus détaillées par visite.
- **ACKEE_THROTTLE** : limite le nombre d'événements par session (défaut : `-1` = illimité).
- **ACKEE_IGNORED_BOTS** : active la détection et l'ignore des bots (recommandé).

**Snippet de tracking** :

```html
<script async src="https://ackee.example.com/tracker.js"
  data-ackee-server="https://ackee.example.com"
  data-ackee-domain-id="VOTRE-DOMAIN-ID"></script>
```

Le tracker se charge de manière asynchrone et n'impacte pas les **Core Web Vitals**.

## 🔄 Alternatives

**Open source** :
- [[app-umami]] — plus complet, base PostgreSQL
- [[app-plausible]] — privacy-first, script 1 Ko
- [[app-matomo]] — analytics PHP complet
- [[app-goatcounter]] — Go ultra-léger
- [[app-open-web-analytics]] — PHP traditionnel
- [[app-rybbit]] — TypeScript moderne
- [[app-litlyx]] — TypeScript simple
- [[app-swetrix]] — TypeScript Plausible-like
- [[app-vince]] — Go minimaliste

**Propriétaire (SaaS)** :
- **Google Analytics 4** — leader, RGPD complexe
- **Plausible Cloud** — payant
- **Fathom Analytics** — simple
- **Simple Analytics** — design
- **Pirsch** — allemand RGPD
- **Umami Cloud** — service officiel Umami
- **Counter.dev** — minimaliste freemium (basé sur la philosophie Ackee)

## 🔒 Sécurité

- **Changer immédiatement** `ACKEE_USERNAME` et `ACKEE_PASSWORD` (valeurs par défaut = vecteur d'intrusion).
- Configurer `ACKEE_ALLOW_ORIGIN` **strictement** (pas de `*`) pour éviter l'exfiltration CSRF via l'API GraphQL.
- Mettre Ackee derrière un **reverse proxy HTTPS** (Caddy, Traefik, Nginx).
- **MongoDB** : bind sur réseau interne uniquement, **ne jamais exposer le port 27017** sur Internet.
- Activer l'**authentification MongoDB** (root user + DB user dédié, c'est le cas dans le compose ci-dessus).
- **Sauvegardes MongoDB** : `mongodump` quotidien, snapshots volumes.
- Surveiller les **logs d'accès Ackee** : certains scans peuvent envoyer massivement des hits.
- Mettre à jour régulièrement (le projet est bien maintenu, mises à jour fréquentes).
- Considérer un **rate limiter** en amont pour `/tracker.js` et `/api/...`.

## 📚 Ressources

- [Documentation officielle](https://docs.ackee.electerious.com/)
- [GitHub electerious/Ackee](https://github.com/electerious/Ackee)
- [Demo live](https://ackee.electerious.com/demo)
- [API GraphQL reference](https://docs.ackee.electerious.com/#/api)
- [Tutoriel auto-hébergement](https://github.com/electerious/Ackee/wiki/Setup)

## 🔗 Pages Liées

- [[cat-web-analytics]]
- [[recettes-docker-compose]]
- [[app-umami]]
- [[app-plausible]]
- [[app-goatcounter]]
