Shynet: des stats web respectueuses de l'utilisateur
Générer des statistiques sur la fréquentation de son site web, c'est intéressant mais ça peut vite être intrusif et lourd. Je pense avoir trouvé la solution avec Shynet. Je vous explique sa mise en place via Docker.

Il est intéressant quand on gère un site web d'avoir des infos sur ses visiteurs. Ce blog me servant plus de bloc notes que de moyen de gagner de l'argent je n'ai pas besoin d'un truc trop compliqué mais surtout qui respecte la vie privée des visiteurs. Bien évidemment je ne pense même pas à Google Analytics vous vous en doutez. En alternative propres et open source on a pas beaucoup de choix malheureusement. Matomo est le leader dans le genre mais il fait beaucoup trop de choses pour moi et l'interface est du coup très très lourde.
Il y'a maintenant un mois un utilisateur de /r/selfhosted à partagé son travail sur un outil de statistiques web respectueux de la vie privée et simple à utiliser:
Shynet — an open source web analytics tool that's modern, respects visitors' privacy, works without cookies, and still provides useful data. from selfhosted
C'était donc exactement ce que je cherchais: une solution simple et limitée au minimum. Seul bémol: le besoin d'une base PostgreSQL, j'aurais pu me contenter de SQLite. J'ai mis Shynet en production sur ce blog en utilisant un sous domaine depuis quelques jours. Shynet va d'abord essayer de détecter une visite via un script et sinon utiliser un pixel transparent. Au niveau des données récoltées cela se limite à ce qui se trouve dans les logs de n'importe quel serveur web: heure, temps de visite, provenance, pays et navigateur. J'ai juste activé le respect de Do Not Track et interdit la collection des adresses IP.
Voici à quoi ressemble l'interface principale de Shynet:

Je me suis récemment mis aux conteneurs donc j'ai opté pour l'installation via Docker Compose. Voici le fichier que j'ai utilisé:
version: '3'
services:
shynet:
image: milesmcc/shynet:latest
restart: unless-stopped
ports:
# Mappez le port que vous voulez sur le port 8080 du conteneur
- "8085:8080"
env_file:
# Votre fichier .env
- .env
environment:
- DB_HOST=db
networks:
- internal
depends_on:
- db
db:
image: postgres
restart: always
environment:
# Vous choisirez ces variable dans le .env
- "POSTGRES_USER=${DB_USER}"
- "POSTGRES_PASSWORD=${DB_PASSWORD}"
- "POSTGRES_DB=${DB_NAME}"
volumes:
- shynet_db:/var/lib/postgresql/data
networks:
- internal
volumes:
shynet_db:
networks:
internal:
En plus du fichier Docker Compose il vous faut un fichier qui regroupe toutes les variables d'environnement, je l'ai appelé .env et un exemple est dispo sur le Github du projet.
Pour lancer: docker-compose up -d et c'est parti.
Avant de commencer il va falloir créer un mot de passe d'administration, un domaine et le nom de l'instance. Pour cela il faut utiliser le script manage.py présent dans le conteneur. J'ai tout fait en une fois en lançant bash à l'intérieur du conteneur:
docker exec -it shynet_shynet_1 /bin/bash
puis:
./manage.py registeradmin mon@email
./manage.py hostname nomdedomaine
./manage.py whitelabel nomaafficher
Attention à bien noter le mot de passe donné sur la ligne de commande pour ensuite se connecter à l'interface de Shynet. Vous pouvez maintenant commencer à ajouter vos sites et récupérer les codes de suivi et ajuster les données récupérées. Normalement si vous suivez ce que j'ai fait votre instance est accessible via IP:Port donc vous pouvez passer le tout à un reverse proxy pour la rendre accessible sur un nom de domaine avec si possible un joli accès HTTPS.