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

7.5 KiB


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

📋 Métadonnées

Métadonnée Valeur
Site web vinceanalytics.com
GitHub 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é)

# 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 :

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)

# 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) :

[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
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 :
<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 :

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

🔗 Pages Liées