Initial vault setup
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
---
|
||||
title: Rybbit
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, web-analytics, privacy, self-hosted, analytics, typescript, nextjs, postgresql, clickhouse, modern]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=web-analytics]
|
||||
---
|
||||
|
||||
# 🚀 Rybbit
|
||||
|
||||
> Plateforme d'**analyse web moderne** écrite en TypeScript/Next.js — concurrent récent et ambitieux d'Umami, avec un focus sur la **session replay** et l'**e-commerce tracking**.
|
||||
> Source : [selfh.st](https://selfh.st/apps/?tag=web-analytics)
|
||||
|
||||
## 📋 Métadonnées
|
||||
|
||||
| Métadonnée | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [rybbit.io](https://www.rybbit.io/) |
|
||||
| **GitHub** | [github.com/rybbit-io/rybbit](https://github.com/rybbit-io/rybbit) |
|
||||
| **License** | AGPL-3.0 |
|
||||
| **Langage** | TypeScript / Next.js / ClickHouse / PostgreSQL |
|
||||
| **Étoiles** | 667 |
|
||||
| **Dernière MAJ** | 2026-05 |
|
||||
| **Catégorie** | [[cat-web-analytics]] |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**Rybbit** est un projet d'analytics web **open source** lancé en 2024, qui s'est rapidement imposé comme l'un des **concurrents les plus actifs** d'Umami et Plausible. Sa stack moderne (**Next.js 14**, **ClickHouse** pour les événements haute volumétrie, **PostgreSQL** pour les métadonnées) lui permet de gérer des **sites à fort trafic** tout en proposant des **fonctionnalités avancées** que les autres outils privacy-first n'ont pas.
|
||||
|
||||
Différenciateurs clés : **session replay** (lecture vidéo des sessions anonymisées), **heatmap de clics** et **scroll depth**, **tracking e-commerce enrichi** (revenus, AOV, conversion par produit), **funnels** multi-étapes, **cohortes** et **rétention**, **API** complète, **dashboards publics** en lecture seule, **multi-sites**, **multi-utilisateurs** (avec organisations), **live stats** (rafraîchissement temps réel), **intégrations** natives (Slack, Discord, webhooks).
|
||||
|
||||
Rybbit est distribué sous **AGPL-3.0**, ce qui en fait une alternative **commercialement utilisable** tant qu'on auto-héberge (sans revendre le service en marque blanche). L'éditeur propose une **offre cloud** à venir. Le projet est **en pleine expansion** — c'est l'un des projets self-hosted analytics qui **bouge le plus vite** en 2025-2026.
|
||||
|
||||
L'interface est **particulièrement soignée** (Next.js App Router, animations, charts modernes), avec un **mode sombre** élégant et une **navigation** bien pensée. Les **timezones** sont gérées correctement, et l'**export des données** se fait en CSV ou via l'API.
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Option 1 : Docker Compose (recommandé)
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
rybbit:
|
||||
image: ghcr.io/rybbit-io/rybbit:latest
|
||||
container_name: rybbit
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
DATABASE_URL: postgresql://rybbit:***@postgres:5432/rybbit
|
||||
CLICKHOUSE_URL: http://clickhouse:8123
|
||||
REDIS_URL: redis://redis:6379
|
||||
BETTER_AUTH_SECRET: changez-32-chars-min
|
||||
NEXT_PUBLIC_BASE_URL: https://rybbit.example.com
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
clickhouse:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- rybbit-net
|
||||
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: rybbit-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: rybbit
|
||||
POSTGRES_USER: rybbit
|
||||
POSTGRES_PASSWORD: rybbit
|
||||
volumes:
|
||||
- ./postgres-data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- rybbit-net
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U rybbit"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
clickhouse:
|
||||
image: clickhouse/clickhouse-server:24-alpine
|
||||
container_name: rybbit-clickhouse
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
CLICKHOUSE_DB: rybbit
|
||||
CLICKHOUSE_USER: rybbit
|
||||
CLICKHOUSE_PASSWORD: rybbit
|
||||
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
|
||||
volumes:
|
||||
- ./clickhouse-data:/var/lib/clickhouse
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 262144
|
||||
hard: 262144
|
||||
networks:
|
||||
- rybbit-net
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8123/ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: rybbit-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./redis-data:/data
|
||||
networks:
|
||||
- rybbit-net
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
rybbit-net:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
Lancement :
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
# Accéder à http://localhost:3000 et créer le premier admin
|
||||
```
|
||||
|
||||
### Option 2 : Installation manuelle (Node.js)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/rybbit-io/rybbit.git
|
||||
cd rybbit
|
||||
pnpm install
|
||||
# Configurer .env (DATABASE_URL, CLICKHOUSE_URL, REDIS_URL, BETTER_AUTH_SECRET)
|
||||
pnpm db:migrate
|
||||
pnpm build
|
||||
pnpm start
|
||||
```
|
||||
|
||||
Prérequis : **Node.js 20+**, **pnpm 9+**, **PostgreSQL 16+**, **ClickHouse 24+**, **Redis 7+**.
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
- **BETTER_AUTH_SECRET** : clé secrète JWT, 32+ caractères, **obligatoire** en production.
|
||||
- **DATABASE_URL** : PostgreSQL pour les utilisateurs, orgs, metadata.
|
||||
- **CLICKHOUSE_URL** : URL HTTP du serveur ClickHouse (défaut : `http://clickhouse:8123`).
|
||||
- **REDIS_URL** : pour le rate limiting et la cache.
|
||||
- **NEXT_PUBLIC_BASE_URL** : URL publique servie par l'app.
|
||||
- **ALLOWED_ORIGINS** : liste CORS des sites autorisés à poster des events.
|
||||
- **Snippet de tracking** :
|
||||
|
||||
```html
|
||||
<script async defer src="https://rybbit.example.com/api/script.js"
|
||||
data-site-id="votre-site-id"></script>
|
||||
```
|
||||
|
||||
- **Session replay** : désactivé par défaut (charge CPU), à activer par site.
|
||||
- **E-commerce** : événements `purchase`, `add_to_cart`, `checkout` supportés nativement.
|
||||
- **Multi-org** : les organisations permettent de regrouper plusieurs sites et utilisateurs.
|
||||
|
||||
## 🔄 Alternatives
|
||||
|
||||
**Open source** :
|
||||
- [[app-umami]] — concurrent principal, plus mature
|
||||
- [[app-plausible]] — privacy-first, script 1 Ko
|
||||
- [[app-matomo]] — analytics PHP complet
|
||||
- [[app-ackee]] — minimaliste Node.js
|
||||
- [[app-goatcounter]] — Go ultra-léger
|
||||
- [[app-open-web-analytics]] — PHP traditionnel
|
||||
- [[app-litlyx]] — TypeScript simple
|
||||
- [[app-swetrix]] — TypeScript Plausible-like
|
||||
- [[app-vince]] — Go minimaliste
|
||||
|
||||
**Propriétaire (SaaS)** :
|
||||
- **Google Analytics 4** — leader, RGPD complexe
|
||||
- **PostHog** — analytics + session replay managé
|
||||
- **Hotjar** — heatmaps + replay
|
||||
- **Plausible Cloud** — payant
|
||||
- **Matomo Cloud** — version managée
|
||||
- **Mixpanel** — product analytics
|
||||
- **Amplitude** — product analytics enterprise
|
||||
- **Umami Cloud** — service officiel
|
||||
|
||||
## 🔒 Sécurité
|
||||
|
||||
- **BETTER_AUTH_SECRET** : clé critique, à générer via `openssl rand -base64 64` et stocker en secret manager.
|
||||
- **HTTPS obligatoire** : Traefik, Caddy ou Nginx avec certificats Let's Encrypt.
|
||||
- **ALLOWED_ORIGINS** : configurer **strictement** les domaines autorisés, sans wildcard.
|
||||
- **ClickHouse** : ne jamais exposer le port 8123/9000 sur Internet — bind sur réseau Docker interne uniquement.
|
||||
- **PostgreSQL** : idem, exposition interne uniquement.
|
||||
- **Redis** : bind interne, ou exiger un mot de passe (`requirepass`).
|
||||
- **Sauvegardes** : `pg_dump` quotidien (PostgreSQL), snapshots ClickHouse via `BACKUP DATABASE`.
|
||||
- Mettre à jour régulièrement — releases fréquentes, **suivre les breaking changes** (projet jeune).
|
||||
- **Rate limiting** sur `/api/event` : Rybbit dispose d'un rate limit Redis natif, surveiller les métriques.
|
||||
- Restreindre l'accès admin via **IP allowlist** ou **VPN** si possible.
|
||||
- Activer **2FA** sur le compte admin (TOTP).
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [Site officiel](https://www.rybbit.io/)
|
||||
- [Documentation](https://www.rybbit.io/docs)
|
||||
- [GitHub rybbit-io/rybbit](https://github.com/rybbit-io/rybbit)
|
||||
- [Demo live](https://demo.rybbit.io)
|
||||
- [Roadmap](https://github.com/rybbit-io/rybbit/milestones)
|
||||
|
||||
## 🔗 Pages Liées
|
||||
|
||||
- [[cat-web-analytics]]
|
||||
- [[recettes-docker-compose]]
|
||||
- [[app-umami]]
|
||||
- [[app-plausible]]
|
||||
- [[app-matomo]]
|
||||
Reference in New Issue
Block a user