levr/content/posts/installation-goaccess-nixos.fr.md

83 lines
2.9 KiB
Markdown
Raw Normal View History

+++
date = '2025-10-06T01:00:51+02:00'
title = 'Installation de goaccess sur NixOs'
tags = [ "nixos","statistiques" ]
+++
Quand on auto-héberge, il y a un moment où la curiosité prend le dessus.
Qui visite mon site ? À quelle heure ? Quelles pages intéressent vraiment ?
Et la question quon se pose tôt ou tard : est-ce que quelquun, quelque part, lit vraiment ce que jécris ?
On peut se tourner vers Google Analytics ou Matomo, mais ça vient avec son lot de complications :
- Respect de la vie privée discutable,
- Scripts tiers à injecter dans le site,
- Poids supplémentaire sur chaque page,
- Et une dépendance à des services dont je ne veux pas.
GoAccess, lui, cest un peu la voie minimaliste.
Pas de scripts, pas de traçage, pas de cookie banner : il lit **directement les logs du serveur web** (dans mon cas, Caddy) et me génère un rapport clair et efficace.
Cest la philosophie qui me plaît :
- **Respectueux de la vie privée** : rien ne sort de mon serveur, aucun profilage.
- **Simple** : je ne change rien à mon site, je traite juste mes journaux de logs.
- **Rapide** : une commande, et jai une vue immédiate sur qui est passé et comment.
- **Self-hosting friendly** : pas besoin dune base de données ni dun monstre à maintenir.
En gros, GoAccess répond parfaitement à ce que je cherche dans mon homelab :
→ Avoir de la visibilité sur mes services **sans transformer ça en usine à gaz**.
## Mise en place minimale sous NixOS
GoAccess est disponible directement via le dépôt officiel.
Jai ajouté le paquet et un petit service systemd pour générer un rapport statique toutes les heures :
```
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
goaccess
];
# Service pour générer le rapport statique GoAccess
systemd.services.goaccess-report = {
description = "Generate GoAccess HTML report";
serviceConfig = {
ExecStart = "${pkgs.goaccess}/bin/goaccess /var/log/caddy/access-levr.porzh.me.log --log-format=CADDY -o /var/www/goaccess/index.html";
};
};
# Timer pour régénérer le rapport toutes les heures
systemd.timers.goaccess-report = {
description = "Hourly GoAccess report generation";
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "hourly";
Persistent = true;
};
};
services.caddy = {
virtualHosts = {
"koum.porzh.me" = {
extraConfig = ''
root * /var/www/goaccess
file_server browse
try_files {path} {path}/ /index.html
'';
};
};
};
}
```
## Et la suite ?
Dans la deuxième partie, je montrerai comment aller plus loin :
- filtrer les IP du réseau local,
- générer des rapports **quotidiens, hebdomadaires et mensuels**,
- et pourquoi jai décidé de **ne pas** utiliser le mode “live”.
Parce que oui, même les stats méritent un peu de sobriété.