Anleitung für Shynet Analytics mit Traefik

Diese Anleitung zeigt, wie man in wenigen Schritten Shynet Analytics hinter einem Traefik reverse proxy aufsetzen kann.

Anleitung für Shynet Analytics mit Traefik-heroimage

Inhaltsverzeichnis

Vor einiger Zeit habe ich hier schon geschrieben, wie man Plausible zusammen mit Traefik auf seinem Server zum Laufen bringt. Dieses Mal geht um eine andere Analyseplattform namens Shynet.

Screenshot von milesmcc/shynet

Screenshot von milesmcc/shynet

Wie auch Plausible nutzt es keine Cookies und erstellt kein Nutzerprofil in einem solchen Ausmaß wie Google Analytics. Ein Vorteil ist bei Shynet, dass es theoretisch auch funktioniert, wenn JavaScript nicht verfügbar ist.

Als reverse Proxy nutzen wir Traefik, wie hier beschrieben. Wir verbinden uns mit unserem Server und erstellen einen Ordner für Shynet.

cd ~/docker
mkdir shynet
cd shynet

Für Shynet benötigen wir zwei Container, das Programm selbst, eine Datenbank sowie einen Web-Server.

mkdir db
touch .env
touch docker-compose.yml
touch nginx.conf

Zunächst befüllen wir die Konfigurationsdatei.

nano .env
# This 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=shynet_db_user_password
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 <noreply@shynet.example.com>

# 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/Berlin

# 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=8080

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

# 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

# Should Shynet block collection of IP addresses globally?
BLOCK_ALL_IPS=True

# Should Shynet include the date and site ID when hashing users?
# This will prevent any possibility of cross-site tracking provided
# that IP collection is also disabled, and external keys (primary
# keys) aren't supplied. It will also prevent sessions from spanning
# one day to another.
AGGRESSIVE_HASH_SALTING=True

Was müssen wir ändern?

  • Bei DB_PASSWORD tragen wir ein besseres Passwort ein.
  • Bei den E-Mail-Einstellungen können Daten eines Mailservers eingetragen werden.
  • Unter DJANGO_SECRET_KEY tragen wir ein besseres Passwort ein.
  • Wichtig ist, dass BLOCK_ALL_IPS auf true bleibt, sonst sammelt man alle IP-Adressen der Besucher und speichert diese, was nicht DSGVO konform wäre.

Der Rest kann nach Belieben auch geändert werden. Es folgt als Nächstes die Docker-Compose Datei.

nano docker-compose.yml
version: "3"

### NETWORKS ###
networks:
    web:
        external:
            name: web
    internal:
        external: false
    default:
        driver: bridge

### SERVICES ###
services:
    shynet:
        container_name: shynet_main
        image: milesmcc/shynet:latest
        restart: unless-stopped
        env_file:
            - .env
        environment:
            - DB_HOST=db
        networks:
            - internal
        depends_on:
            - db
        labels:
            - "traefik.enable=false"

    db:
        container_name: shynet_database
        image: postgres
        restart: always
        environment:
            - "POSTGRES_USER=${DB_USER}"
            - "POSTGRES_PASSWORD=${DB_PASSWORD}"
            - "POSTGRES_DB=${DB_NAME}"
        volumes:
            - ./db:/var/lib/postgresql/data
        networks:
            - internal
        labels:
            - "traefik.enable=false"

    webserver:
        container_name: shynet_webserver
        image: nginx
        restart: always
        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/default.conf
        depends_on:
            - shynet
        networks:
            - internal
            - web
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.shynet-rtr.entrypoints=https"
            - "traefik.http.routers.shynet-rtr.rule=Host(`shynet.deployn.de`)"
            - "traefik.http.routers.shynet-rtr.tls=true"
            - "traefik.http.routers.shynet-rtr.service=shynet-svc"
            - "traefik.http.services.shynet-svc.loadbalancer.server.port=80"
            - "traefik.http.routers.shynet-rtr.middlewares=middlewares-rate-limit@file"

Die eigene Domain muss eingetragen werden. Das war’s dann auch schon. Nun fügen wir die Konfiguration von Nginx, in die dafür zuvor erstelle Datei ein.

nano nginx.conf
server {
server_name einedomain.de;
access_log /var/log/nginx/bin.access.log;
error_log /var/log/nginx/bin.error.log error;


location / {
proxy_pass http://shynet:8080;
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;

}

In der zweiten Zeile muss die Domain geändert werden.

docker-compose up -d
lazydocker

Wir sehem im Log, dass die Domain nicht gesetzt wurde.

Log von Shynet

Wir müssen den Hostnamen ändern und einen Admin-Benutzer erstellen:

docker exec -it shynet_main ./manage.py registeradmin benutzername@gmail.com
# Das Passwort, das erscheint, sollte gespeichert werden.
docker exec -it shynet_main ./manage.py hostname shynet.einedomain.de

Jetzt rufen wir shynet.einedomain.de auf und können uns als Admin einloggen. Der Rest sollte sich von selbst erklären.


Diese Website verwendet Cookies. Diese sind notwendig, um die Funktionalität der Website zu gewährleisten. Weitere Informationen finden Sie in der Datenschutzerklärung