Files
2026-06-09 18:40:21 +02:00

200 lines
7.5 KiB
Markdown

---
title: Vince
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, web-analytics, privacy, self-hosted, analytics, go, golang, sqlite, minimal, simple]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=web-analytics]
---
# 🐿️ Vince
> Analytics web **ultra-minimaliste** écrit en Go — un **binaire unique** avec **SQLite** par défaut, parfait pour les sites personnels et blogs statiques.
> Source : [selfh.st](https://selfh.st/apps/?tag=web-analytics)
## 📋 Métadonnées
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [vinceanalytics.com](https://vinceanalytics.com/) |
| **GitHub** | [github.com/vinceanalytics/vince](https://github.com/vinceanalytics/vince) |
| **License** | AGPL-3.0 |
| **Langage** | Go (single binary) / SQLite |
| **Étoiles** | 73 |
| **Dernière MAJ** | 2026-03 |
| **Catégorie** | [[cat-web-analytics]] |
## 📝 Description
**Vince** est un outil d'**analyse web minimaliste** écrit en Go qui rejoint la famille des analytics "à la GoatCounter" : **single binary**, **SQLite par défaut**, **zéro cookie**, **script ultra-léger** et **déploiement en 30 secondes**. La philosophie est claire : fournir l'**essentiel** des métriques web (visiteurs, pages vues, top referrers, top pages) **sans le superflu**, pour les sites qui n'ont pas besoin de funnels avancés ou de session replay.
Vince se distingue par une **stack technique minimaliste** : pas de Node.js à installer, pas de base de données séparée, pas de runtime tiers. Un **binaire Go unique** + un **fichier SQLite** = l'application complète. Le **script de tracking** est également minimal : une seule balise `<script>` qui envoie un hit à l'API.
Fonctionnalités principales : **tableau de bord par site**, **multi-sites** depuis une instance unique, **API REST** simple, **export CSV**, **géolocalisation** par IP (GeoLite2 optionnel), **détection de bots**, **rate limiting** natif, **totp 2FA** sur l'admin, **temps réel** limité (rafraîchissement à la demande), **tracking des événements** custom basique (`?event=...`).
Vince est **AGPL-3.0**, ce qui le distingue de [[app-goatcounter]] (EUPL). Le projet est plus **jeune et plus petit** que ses concurrents directs (Umami, Plausible, GoatCounter) en termes d'étoiles et de fonctionnalités, mais c'est un **choix solide** pour qui veut un **analytics sans dépendances lourdes** et **avec un binaire facile à auditer** (code en Go, lecture simple).
Idéal pour les **petits sites**, **blogues Hugo/Jekyll**, **portfolios**, **docs statiques** et **projets personnels** qui veulent un analytics **fidèle, simple et sans maintenance**.
## 🚀 Installation
### Option 1 : Docker Compose (recommandé)
```yaml
# docker-compose.yml
version: '3.8'
services:
vince:
image: ghcr.io/vinceanalytics/vince:latest
container_name: vince
restart: unless-stopped
ports:
- "8080:8080"
environment:
VINCE_BASE_URL: https://vince.example.com
VINCE_LISTEN: "0.0.0.0:8080"
VINCE_DB: /data/vince.db
VINCE_GEOIP_DB: /data/geoip.mmdb
volumes:
- ./data:/data
networks:
- vince-net
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/"]
interval: 30s
timeout: 5s
retries: 3
networks:
vince-net:
driver: bridge
```
Lancement :
```bash
docker compose up -d
# Accéder à http://localhost:8080
# Créer le premier compte admin via l'UI ou la CLI :
docker compose exec vince vince admin add admin@example.com
```
### Option 2 : Installation manuelle (binaire Go)
```bash
# Télécharger depuis les releases GitHub
wget https://github.com/vinceanalytics/vince/releases/download/v0.2.0/vince-0.2.0-linux-amd64.tar.gz
tar xzf vince-0.2.0-linux-amd64.tar.gz
sudo mv vince /usr/local/bin/
# Créer un user et un dossier de données
sudo useradd -r -m -d /var/lib/vince -s /bin/bash vince
sudo -u vince mkdir -p /var/lib/vince/data
# Lancer (en dev)
sudo -u vince vince serve -listen 0.0.0.0:8080 -db /var/lib/vince/data/vince.db
```
Configuration **systemd** (`/etc/systemd/system/vince.service`) :
```ini
[Unit]
Description=Vince analytics
After=network.target
[Service]
User=vince
Group=vince
ExecStart=/usr/local/bin/vince serve \
-listen 0.0.0.0:8080 \
-db /var/lib/vince/data/vince.db \
-base-url https://vince.example.com
Restart=on-failure
RestartSec=5
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now vince
```
## ⚙️ Configuration
- **VINCE_BASE_URL** : URL publique (utilisée pour CORS et liens partagés).
- **VINCE_LISTEN** : adresse d'écoute (par défaut `127.0.0.1:8080`).
- **VINCE_DB** : chemin du fichier SQLite (ou URL PostgreSQL).
- **VINCE_GEOIP_DB** : chemin optionnel vers **GeoLite2** (`.mmdb`) pour la géolocalisation IP.
- **Snippet de tracking** :
```html
<script async src="https://vince.example.com/v.js"
data-host="vince.example.com"
data-d="votre-site-key"></script>
```
- **CLI** : `vince admin` pour gérer les utilisateurs, `vince serve` pour démarrer, `vince version`.
- **Multi-sites** : configurer plusieurs `site-key` depuis l'admin.
- **Rate limiting** : `VINCE_RATE_LIMIT` (par défaut : 100 hits/IP/minute).
- **Authentification** : 2FA TOTP disponible sur le compte admin.
- **Export** : depuis l'UI, bouton "Export CSV" par site et période.
## 🔄 Alternatives
**Open source** :
- [[app-goatcounter]] — concurrent direct en Go, plus mature
- [[app-umami]] — plus complet, base PostgreSQL
- [[app-plausible]] — privacy-first, Elixir
- [[app-ackee]] — minimaliste Node.js
- [[app-matomo]] — analytics PHP complet
- [[app-open-web-analytics]] — PHP traditionnel
- [[app-rybbit]] — TypeScript moderne
- [[app-litlyx]] — TypeScript simple
- [[app-swetrix]] — TypeScript Plausible-like
**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
- **Counter.dev** — minimaliste freemium (philosophie proche de Vince)
## 🔒 Sécurité
- **Changer le mot de passe admin** créé lors du premier démarrage.
- Activer **2FA TOTP** sur le compte admin (Vince le supporte nativement).
- **HTTPS obligatoire** : Vince ne fait pas HTTPS natif, il faut un **reverse proxy** (Caddy, Traefik, Nginx) avec Let's Encrypt devant.
- **SQLite** : sécuriser le fichier `vince.db` (permissions `600` ou `640`, owner `vince:vince`).
- **Sauvegardes SQLite** : `sqlite3 vince.db ".backup '/var/backups/vince-$(date +%F).db'"` ou simple copie (avec `VACUUM INTO`).
- **Rate limiting** natif : surveiller les logs pour détecter des abus.
- **CORS** : configurer `VINCE_BASE_URL` strictement.
- Mettre à jour régulièrement — releases modérées (projet jeune).
- **fail2ban** sur l'API admin recommandé.
- **Ne pas exposer** le port 8080 sur Internet, binder sur 127.0.0.1 ou réseau interne Docker.
- GeoIP : si non utilisé, **ne pas charger** de base GeoLite2 (économie mémoire + surface réduite).
## 📚 Ressources
- [Site officiel](https://vinceanalytics.com/)
- [Documentation](https://vinceanalytics.com/docs)
- [GitHub vinceanalytics/vince](https://github.com/vinceanalytics/vince)
- [Démo live](https://demo.vinceanalytics.com)
- [API reference](https://vinceanalytics.com/docs/api)
## 🔗 Pages Liées
- [[cat-web-analytics]]
- [[recettes-docker-compose]]
- [[app-goatcounter]]
- [[app-umami]]
- [[app-plausible]]