Estadísticas sencillas para tu blog con Shynet

8 minutos de lectura

Si tienes un blog o sitio web puede que estés utilizando alguna herramienta de análisis web como Google Analitycs o alguna alternativa libre como Matomo o Plausible, los problemas que presenta utilizar Google Analitycs respecto a la privacidad son obvias y salvo que alojes tu mismo estos servicios, estarás entregando toda la información de tus visitantes a una empresa externa.

Características

  • Shynet no utiliza cokies para rastrear a los visitantes, no necesitaras mostrar un aviso de que las estás utilizando
  • Es de código abierto
  • Es muy sencillo de utilizar
  • Consume muy pocos recursos y es muy sencillo de implementar
  • No te llena a la pantalla con multitud de estadísticas, recolecta solo los datos suficientes como para ser útil
  • Interfaz fácil de usar.
  • Es ideal para proyectos personales y sitios web de tamaño pequeño a mediano

Shynet es un acrónimo de “Skynet” y “tímido”. La idea es que te brinde mucha información útil (Skynet) y al mismo tiempo respete la privacidad de tus visitantes (tímido).

Como digo ocupa muy pocos recursos, está construido con Django y permite múltiples usuarios y cada uno ellos puede rastrear múltiples sitios

No necesita JavaScript para que funcione el rastreo, en caso de que el navegador no lo utilice se puede utilizar un píxel de seguimiento transparente de 1x1, el script de seguimiento pesa menos de un kilobyte.

Hasta aquí las características más importantes de Shynet, veamos ahora como instalarlo en nuestro equipo.

Instalación

En el repositorio de Shynet cuentas con la documentación necesaria para instalarlo mediante docker o docker-compose como métodos recomendados, yo utilizaré docker-compose

Vamos a necesitar tres ficheros de configuración, docker-compose.yml, .env y ngnix.conf, puedes clonar el repositorio y modificarlo a tu gusto o bien crearlo tu mismo.

docker-compose.yml

Si no quieres modificar el puerto de escucha para el servidor no modifiques nada, copia y pega tal cual.

 1version: '3'
 2services:
 3  shynet:
 4    container_name: shynet_main
 5    image: milesmcc/shynet:latest
 6    restart: unless-stopped
 7    expose:
 8      - 8090
 9    env_file:
10      # Create a file called '.env' if it doesn't already exist.
11      # You can use `TEMPLATE.env` as a guide.
12      - .env
13    environment:
14      - DB_HOST=db
15    networks:
16      - internal
17    depends_on:
18      - db
19  db:
20    container_name: shynet_database
21    image: postgres
22    restart: always
23    environment:
24      - "POSTGRES_USER=${DB_USER}"
25      - "POSTGRES_PASSWORD=${DB_PASSWORD}"
26      - "POSTGRES_DB=${DB_NAME}"
27    volumes:
28      - /volume1/docker/shynet:/var/lib/postgresql/data
29    networks:
30      - internal
31  webserver:
32    container_name: shynet_webserver
33    image: nginx
34    restart: always
35    volumes:
36      - ./nginx.conf:/etc/nginx/conf.d/default.conf
37    ports:
38      - 8090:80
39    depends_on:
40      - shynet
41    networks:
42      - internal
43volumes:
44  shynet_db:
45networks:
46  internal:

.env

Modifica este fichero para configurar el entorno de Shynet

 1# file shows all of the environment variables you can
 2# set to configure Shynet, as well as information about their
 3# effects. Make a copy of this file to configure your deployment.
 4
 5# Database settings (PostgreSQL)
 6DB_NAME=shynet_db
 7DB_USER=shynet_db_user
 8DB_PASSWORD=tu_contraseña
 9DB_HOST=db
10DB_PORT=5432
11
12# Email settings (optional)
13EMAIL_HOST_USER=example
14EMAIL_HOST_PASSWORD=example_password
15EMAIL_HOST=smtp.example.com
16EMAIL_PORT=465
17EMAIL_USE_SSL=True
18# Comment out EMAIL_USE_SSL & uncomment EMAIL_USE_TLS if your SMTP server uses TLS.
19# EMAIL_USE_TLS=True
20SERVER_EMAIL=Shynet <noreply@shynet.example.com>
21
22# General Django settings
23DJANGO_SECRET_KEY=random_string
24
25# For better security, set this to your deployment's domain. Comma separated.
26ALLOWED_HOSTS=*
27
28# Set to True (capitalized) if you want people to be able to sign up for your Shynet instance (not recommended)
29ACCOUNT_SIGNUPS_ENABLED=False
30
31# Should user email addresses be verified? Only set this to `required` if you've setup the email settings and allow
32# public sign-ups; otherwise, it's unnecessary.
33ACCOUNT_EMAIL_VERIFICATION=none
34
35# The timezone of the admin panel. Affects how dates are displayed.
36TIME_ZONE=Europe/Madrid
37
38# Set to "False" if you will not be serving content over HTTPS
39SCRIPT_USE_HTTPS=True
40
41# How frequently should the monitoring script "phone home" (in ms)?
42SCRIPT_HEARTBEAT_FREQUENCY=5000
43
44# How much time can elapse between requests from the same user before a new
45# session is created, in seconds?
46SESSION_MEMORY_TIMEOUT=1800
47
48# Should only superusers (admins) be able to create services? This is helpful
49# when you'd like to invite others to your Shynet instance but don't want
50# them to be able to create services of their own.
51ONLY_SUPERUSERS_CREATE=True
52
53# Whether to perform checks and setup at startup, including applying unapplied
54# migrations. For most setups, the recommended value is True. Defaults to True.
55# Will skip only if value is False.
56PERFORM_CHECKS_AND_SETUP=True
57
58# The port that Shynet should bind to. Don't set this if you're deploying on Heroku.
59PORT=8090
60
61# Set to "False" if you do not want the version to be displayed on the frontend.
62SHOW_SHYNET_VERSION=False
63
64# Redis, queue, and parellization settings; not necessary for single-instance deployments.
65# Don't uncomment these unless you know what you are doing!
66# NUM_WORKERS=1
67# Make sure you set a REDIS_CACHE_LOCATION if you have more than one frontend worker/instance.
68# REDIS_CACHE_LOCATION=redis://redis.default.svc.cluster.local/0
69# If CELERY_BROKER_URL is set, make sure CELERY_TASK_ALWAYS_EAGER is False and
70# that you have a separate queue consumer running somewhere via `celeryworker.sh`.
71# CELERY_TASK_ALWAYS_EAGER=False
72# CELERY_BROKER_URL=redis://redis.default.svc.cluster.local/1
73
74# Should Shynet show third-party icons in the dashboard?
75SHOW_THIRD_PARTY_ICONS=True

Presta especial atención a

  • DB_PASSWORD la contraseña de la base de datos
  • ALLOWED_HOSTS cambia * por el la dirección IP o nombre de dominio del servidor
  • ACCOUNT_SIGNUPS_ENABLED=False evita que se registren nuevos usuarios

nginx.conf

Sólo hay que modificar la segunda línea para poner el nombre de dominio del servidor donde está ejecutándose Shynet, por ejemplo https://shynet.elblogdelazro.org

 1server {
 2    server_name tu.dominio.org;
 3    access_log /var/log/nginx/bin.access.log;
 4    error_log /var/log/nginx/bin.error.log error;
 5
 6
 7    location / {
 8	proxy_pass http://shynet:8090;
 9	proxy_redirect off;
10	proxy_set_header Host $http_host;
11	proxy_set_header X-Real-IP $remote_addr;
12	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
13	proxy_set_header X-Forwarded-Proto $scheme;
14	proxy_set_header X-Forwarded-Protocol $scheme;
15	proxy_set_header X-Url-Scheme $scheme;
16    }
17    listen 80;
18
19}

Los tres ficheros han de estar en la misma carpeta, ahora desplegamos los contenedores, abre un terminal en la carpeta donde residen los tres ficheros y ejecuta

1sudo docker-compose up -d

Usuario admin

Cuando terminen de desplegarse los contenedores, debemos de crear un usuario administrador ejecutando

1sudo docker exec -it shynet_main ./manage.py registeradmin una_direccion_de_correo

Este comando nos devolverá una contraseña temporal para el usuario admin para poder acceder por primera vez

Hostname

Para configurar el nombre del servidor de la instancia donde esta corriendo Shynet, es el mismo que pusimos en la linea numero 2 del fichero nginix.conf, https://shynet.elblogdelazaro.org

1sudo docker exec -it shynet_main ./manage.py hostname nombre_del_dominio

Etiqueta

Para etiquetar la instancia que estañamos creando en Shynet, por ejemplo “El Blog de Lázaro” o “ebdl”

1sud docker exec -it shynet_main ./manage.py whitelabel ebdl

Ahora podremos acceder a Shynet a través de http://hostname:puerto y terminar de configurar Shynet, por ejemplo https://shynet.elblogdelazaro.org

Configuración

Como usuario pondremos la dirección de correo y contraseña temporal que obtuvimos en el paso anterior

Hacemos clic en New Service

Rellenamos los campos para la creación del nuevo servicio como el nombre del servicio, y hacemos clic en Advanced settings para configurar si vamos a recolectar las direcciones IP de los visitantes, si vas a respetar las peticiones Don’t Track del navegador de los visitantes, las direcciones IP de las que no queremos recolectar datos, etc.

Se respetuoso con tus visistantes y no recolectes sus direcciones IP y respeta el Don’t track de su navegador

Después de crear el servicio hacemos clic en Manage, y podremos ver el script que debemos de insertar dentro de la etiqueta <body> de cada pagina que queremos trackear

Te dejo unas capturas de pantalla después de un tiempo recolectando datos

Contras de utilizar Shynet

Ya vimos las bondades de utilizar Shynet pero tiene un par de características que han hecho que finalmente me decante por otra opción para llevar un seguimiento de los artículos mas leídos y el número de visitantes en el blog utilizando alternativas Open Source.

Contras

  • Te da la posibilidad de poder trackear y guardar las direcciones IP de tus visitantes, y aunque tu no lo habilites, tus visitantes no saben si realmente es así, queda a criterio del administrador del sitio, además de no cumplir con la GDPR
  • Además de utilizar la geolocalización por países, al permitir guardar las direcciones IP también puedes ver la localización aproximada del domicilio de cada visitante, GDPR

Espero que te haya gustado, pasa un gran día.