Initial vault setup
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
---
|
||||
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]]
|
||||
Reference in New Issue
Block a user