Ir al contenido
  1. Publicaciones/

Estadísticas sencillas para tu blog con Shynet

··1295 palabras·7 mins

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.

version: '3'
services:
  shynet:
    container_name: shynet_main
    image: milesmcc/shynet:latest
    restart: unless-stopped
    expose:
      - 8090
    env_file:
      # Create a file called '.env' if it doesn't already exist.
      # You can use `TEMPLATE.env` as a guide.
      - .env
    environment:
      - DB_HOST=db
    networks:
      - internal
    depends_on:
      - db
  db:
    container_name: shynet_database
    image: postgres
    restart: always
    environment:
      - "POSTGRES_USER=${DB_USER}"
      - "POSTGRES_PASSWORD=${DB_PASSWORD}"
      - "POSTGRES_DB=${DB_NAME}"
    volumes:
      - /volume1/docker/shynet:/var/lib/postgresql/data
    networks:
      - internal
  webserver:
    container_name: shynet_webserver
    image: nginx
    restart: always
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8090:80
    depends_on:
      - shynet
    networks:
      - internal
volumes:
  shynet_db:
networks:
  internal:

.env #

Modifica este fichero para configurar el entorno de Shynet

# file shows all of the environment variables you can
# set to configure Shynet, as well as information about their
# effects. Make a copy of this file to configure your deployment.

# Database settings (PostgreSQL)
DB_NAME=shynet_db
DB_USER=shynet_db_user
DB_PASSWORD=tu_contraseña
DB_HOST=db
DB_PORT=5432

# Email settings (optional)
EMAIL_HOST_USER=example
EMAIL_HOST_PASSWORD=example_password
EMAIL_HOST=smtp.example.com
EMAIL_PORT=465
EMAIL_USE_SSL=True
# Comment out EMAIL_USE_SSL & uncomment EMAIL_USE_TLS if your SMTP server uses TLS.
# EMAIL_USE_TLS=True
SERVER_EMAIL=Shynet <[email protected]>

# General Django settings
DJANGO_SECRET_KEY=random_string

# For better security, set this to your deployment's domain. Comma separated.
ALLOWED_HOSTS=*

# Set to True (capitalized) if you want people to be able to sign up for your Shynet instance (not recommended)
ACCOUNT_SIGNUPS_ENABLED=False

# Should user email addresses be verified? Only set this to `required` if you've setup the email settings and allow
# public sign-ups; otherwise, it's unnecessary.
ACCOUNT_EMAIL_VERIFICATION=none

# The timezone of the admin panel. Affects how dates are displayed.
TIME_ZONE=Europe/Madrid

# Set to "False" if you will not be serving content over HTTPS
SCRIPT_USE_HTTPS=True

# How frequently should the monitoring script "phone home" (in ms)?
SCRIPT_HEARTBEAT_FREQUENCY=5000

# How much time can elapse between requests from the same user before a new
# session is created, in seconds?
SESSION_MEMORY_TIMEOUT=1800

# Should only superusers (admins) be able to create services? This is helpful
# when you'd like to invite others to your Shynet instance but don't want
# them to be able to create services of their own.
ONLY_SUPERUSERS_CREATE=True

# Whether to perform checks and setup at startup, including applying unapplied
# migrations. For most setups, the recommended value is True. Defaults to True.
# Will skip only if value is False.
PERFORM_CHECKS_AND_SETUP=True

# The port that Shynet should bind to. Don't set this if you're deploying on Heroku.
PORT=8090

# Set to "False" if you do not want the version to be displayed on the frontend.
SHOW_SHYNET_VERSION=False

# Redis, queue, and parellization settings; not necessary for single-instance deployments.
# Don't uncomment these unless you know what you are doing!
# NUM_WORKERS=1
# Make sure you set a REDIS_CACHE_LOCATION if you have more than one frontend worker/instance.
# REDIS_CACHE_LOCATION=redis://redis.default.svc.cluster.local/0
# If CELERY_BROKER_URL is set, make sure CELERY_TASK_ALWAYS_EAGER is False and
# that you have a separate queue consumer running somewhere via `celeryworker.sh`.
# CELERY_TASK_ALWAYS_EAGER=False
# CELERY_BROKER_URL=redis://redis.default.svc.cluster.local/1

# Should Shynet show third-party icons in the dashboard?
SHOW_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

server {
    server_name tu.dominio.org;
    access_log /var/log/nginx/bin.access.log;
    error_log /var/log/nginx/bin.error.log error;


    location / {
        proxy_pass http://shynet:8090;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Url-Scheme $scheme;
    }
    listen 80;

}

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

sudo docker-compose up -d

Usuario admin #

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

sudo 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

sudo 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”

sudo 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 buen día. 🐧