Autoallotjament de GoatCounter amb un proxy invers nginx i SSL
Tenia curiositat sobre el trànsit d’aquest lloc i de la demo de tabi, així que vaig explorar eines d’anàlisi web ètiques. El meu objectiu era satisfer la meva curiositat sense comprometre la privadesa dels visitants; estic en contra del seguiment i no vull contribuir al capitalisme de vigilància.
Vaig descobrir GoatCounter, una eina d’anàlisi web lleugera, de codi obert i que preserva la privadesa. És un fitxer únic i es pot autoallotjar. Una opció perfecta!
Les instruccions d’autoallotjament per a GoatCounter són escasses. Hi ha aquest script que descarrega i configura automàticament GoatCounter. No obstant això, no em sento còmode executant scripts sense examinar-los abans, especialment si s’executen com a root.
La guia que segueix es basa en l’script, amb passos addicionals per a un proxy invers nginx amb certificats SSL. Si utilitzes una distribució Linux amb systemd (Debian, Arch, Ubuntu…), et serà útil.
Al final d’aquest article, tindràs un panell com stats.osc.garden o tabi-stats.osc.garden (tu tries si fer-lo públic).
Comencem!
Descàrrega i instal·lació
Necessitarem permisos de root per a tot el que farem, així que iniciem una shell de root:
Descarrega el binari de GoatCounter. Obtingues l’URL per al teu sistema des de la pàgina de llançaments de GoatCounter a GitHub.
Jo vaig utilitzar:
Si no estàs segur de quin sistema tens, pots executar la comanda arch
. Si veus x86_64
, necessitaràs el paquet amd64
, com jo.
Descomprimeix l’arxiu:
Mou-lo a /usr/local/bin/
i estableix els permisos adequats:
Creem un usuari específic per a executar GoatCounter, per aïllament de seguretat:
Ara executa goatcounter
per a configurar el nostre usuari i credencials. Assegura’t d’usar el teu correu electrònic real i URL (on viurà el panell, no el lloc del qual vols obtenir les analítiques):
Això demanarà una contrasenya per al panell de GoatCounter.
Configuració de nginx amb SSL
Primer necessitaràs configurar el teu DNS per al teu URL (stats.example.com
) i obtenir el certificat TLS. Jo vaig utilitzar certbot
de Let’s Encrypt per a obtenir el certificat.
Ara és moment de configurar el proxy invers de nginx. La configuració del lloc hauria de ser així:
server {
if ($host = stats.example.com) {
301 ;
}
80;
.example.com;
stats301 ;
}
server {
443 ssl http2;
.example.com;
stats
/etc/letsencrypt/live/stats.example.com/fullchain.pem;
/etc/letsencrypt/live/stats.example.com/privkey.pem;
location / {
;
$host;
Host X-Real-IP $remote_addr;
X-Forwarded-For $proxy_add_x_forwarded_for;
X-Forwarded-Proto $scheme;
}
}
Modifica $host
/server_name
i les rutes ssl_certificate
/ssl_certificate_key
perquè coincideixin amb el teu URL i les rutes del teu certificat.
A la directiva proxy_pass
, estableix el teu port preferit i utilitza’l per als propers passos.
Iniciant GoatCounter
Verifica que la configuració de nginx no tingui problemes i recarrega-la:
&&
Veurem si goatcounter
funciona:
Hauries de veure:
Dec 14 13:18:47 INFO: ready; serving 1 sites on ":8091"; dev=false; sites: stats.example.com
I hauries de poder iniciar sessió al panell de control a l’URL que has triat.
Si tot funciona bé, bona feina! Ara és moment de configurar un fitxer de servei systemd. Això ens ajudarà a iniciar/detenir fàcilment goatcounter
i automatitzarà el seu (re)inici en l’arrencada o en cas d’error.
Fitxer de servei systemd
Encara des de la shell de root, creem el fitxer amb:
Aquí tens un bon punt de partida per a aquest fitxer. Per a la línia ExecStart=
, utilitza el mateix comandament que acabem de provar:
[Unit]
Anàlisi web GoatCounter
[Service]
simple
always
/var/lib/goatcounter
/usr/local/bin/goatcounter serve -listen :8091 -tls none
goatcounter
goatcounter
true
true
true
closed
[Install]
-user.target
multi
Desa el fitxer i surt de l’editor.
Iniciant el servei
Ara recarreguem systemd i iniciem el servei:
En aquest punt, hauries de poder accedir al teu panell de control a l’URL que has triat. Pots verificar l’estat del servei amb systemctl status goatcounter
. Per veure els registres, utilitza journalctl -fu goatcounter
.
Només queda configurar el servei perquè s’iniciï automàticament en l’arrencada:
Això és tot! Ara goatcounter
s’iniciarà en l’arrencada i es reiniciarà en cas de fallada.
Si vols donar suport al projecte GoatCounter, pots patrocinar Martin Tournoij, el seu creador i mantenidor, a GitHub Sponsors.