Analytodon selbst hosten

Analytodon ist Open Source unter GPL-3.0. Sie können Ihre eigene Instanz betreiben und behalten die volle Kontrolle über Ihre Daten und Infrastruktur.

Architekturübersicht

Analytodon besteht aus folgenden Komponenten:

Ein Reverse Proxy (Caddy, nginx oder Traefik) wird in der Produktion benötigt – nur das Frontend muss öffentlich erreichbar sein.

Voraussetzungen

Secrets generieren

Analytodon benötigt drei kryptografische Secrets. Generieren Sie diese direkt in eine .env-Datei, bevor Sie fortfahren – so gelangen die Werte nicht in Ihre Zwischenablage oder Terminal-Historie:

# AES-256 Encryption Key (64-stellig, hex) – schützt OAuth-Tokens
echo "ENCRYPTION_KEY=$(openssl rand -hex 32)" >> .env

# JWT Secret – signiert Access-Tokens
echo "JWT_SECRET=$(openssl rand -base64 48)" >> .env

# Session Secret – Frontend-Session-Cookies
echo "SESSION_SECRET=$(openssl rand -base64 48)" >> .env

Docker Compose

Erstellen Sie eine docker-compose.yml mit folgender Konfiguration:

services:
  backend:
    image: ghcr.io/blazer82/analytodon-backend:latest
    environment:
      - JWT_SECRET=${JWT_SECRET}
      - JWT_EXPIRES_IN=1h
      - JWT_REFRESH_TOKEN_EXPIRES_IN=7d
      - DB_CLIENT_URL=mongodb://mongo:27017/analytodon
      - MASTODON_APP_NAME=Analytodon
      - FRONTEND_URL=https://ihre-domain.de
      - MARKETING_URL=https://ihre-domain.de
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
    depends_on:
      - mongo
    restart: unless-stopped

  frontend:
    image: ghcr.io/blazer82/analytodon-frontend:latest
    ports:
      - "127.0.0.1:3002:3002"
    environment:
      - API_URL=http://backend:3000
      - SESSION_SECRET=${SESSION_SECRET}
      - MARKETING_URL=https://ihre-domain.de
    depends_on:
      - backend
    restart: unless-stopped

  cli:
    image: ghcr.io/blazer82/analytodon-cli:latest
    environment:
      - MONGODB_URI=mongodb://mongo:27017
      - MONGODB_DATABASE=analytodon
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - APP_URL=https://ihre-domain.de
    depends_on:
      - mongo
    restart: unless-stopped

  mongo:
    image: mongo:8
    volumes:
      - mongo-data:/data/db
    restart: unless-stopped

volumes:
  mongo-data:

Die Compose-Datei liest diese Secrets aus der zuvor erzeugten .env-Datei (siehe Abschnitt „Umgebungsdatei“ weiter unten).

Umgebungsdatei

Der Schritt „Secrets generieren“ hat Ihre drei Secrets bereits in eine .env-Datei geschrieben. Belassen Sie sie im selben Verzeichnis wie Ihre docker-compose.yml – Docker Compose liest die Variablen automatisch daraus und setzt sie für die ${...}-Platzhalter in der Compose-Datei ein. Die Datei sieht so aus:

# Generierte Secrets (siehe Secrets generieren)
ENCRYPTION_KEY=ihr-64-stelliger-hex-schluessel
JWT_SECRET=ihr-jwt-secret
SESSION_SECRET=ihr-session-secret

Für E-Mail-Berichte und weitere Konfigurationsoptionen lesen Sie die Umgebungsvariablen-Referenz weiter unten.

Reverse Proxy

Nur das Frontend (Port 3002) muss öffentlich erreichbar sein. Backend und CLI kommunizieren intern über das Docker-Netzwerk.

Beispiel-Konfiguration für Caddy:

ihre-domain.de {
    reverse_proxy localhost:3002
}

Bei Verwendung von nginx oder Traefik leiten Sie den gesamten Traffic an Port 3002 weiter.

Analytodon starten

Starten Sie alle Dienste:

docker compose up -d

Öffnen Sie https://ihre-domain.de in Ihrem Browser. Sie sollten die Analytodon-Anmeldeseite sehen. Registrieren Sie Ihr erstes Konto und verbinden Sie es mit Ihrer Mastodon-Instanz.

Umgebungsvariablen

Die folgenden Tabellen listen die wichtigsten Konfigurationsoptionen für jeden Dienst auf.

Backend

Variable Beschreibung Erforderlich
JWT_SECRET Secret zum Signieren von Access-Tokens Ja
JWT_EXPIRES_IN Gültigkeitsdauer des Access-Tokens (Standard: 1h) Nein
JWT_REFRESH_TOKEN_EXPIRES_IN Gültigkeitsdauer des Refresh-Tokens (Standard: 7d) Nein
DB_CLIENT_URL MongoDB-Verbindungszeichenfolge Ja
MASTODON_APP_NAME Name bei der OAuth-Autorisierung (Standard: Analytodon) Nein
FRONTEND_URL Öffentliche URL des Frontends Ja
MARKETING_URL URL der Marketing-Website Nein
ENCRYPTION_KEY 64-stelliger Hex-Schlüssel für OAuth-Token-Verschlüsselung Ja
EMAIL_HOST SMTP-Server-Hostname Nein
EMAIL_PORT SMTP-Server-Port Nein
EMAIL_USER SMTP-Benutzername Nein
EMAIL_PASS SMTP-Passwort Nein
EMAIL_SECURE TLS für SMTP verwenden (true/false) Nein
EMAIL_FROM_NAME Absendername für E-Mails Nein
EMAIL_FROM_ADDRESS Absenderadresse für E-Mails Nein
EMAIL_API_KEY API-Schlüssel für E-Mail-Dienst Nein
DISABLE_NEW_REGISTRATIONS Neue Registrierungen blockieren (Standard: false) Nein
DISABLE_EMAIL_VERIFICATION Neue Registrierungen automatisch verifizieren – sinnvoll beim Betrieb ohne SMTP (Standard: false) Nein

Frontend

Variable Beschreibung Erforderlich
API_URL Interne Backend-URL (z.B. http://backend:3000) Ja
SESSION_SECRET Secret für Session-Cookies Ja
MARKETING_URL URL der Marketing-Website Nein
SUPPORT_EMAIL Kontakt-E-Mail für Support Nein
DISABLE_NEW_REGISTRATIONS Neue Registrierungen blockieren (Standard: false) Nein

CLI

Variable Beschreibung Erforderlich
MONGODB_URI MongoDB-Verbindungszeichenfolge Ja
MONGODB_DATABASE Datenbankname Ja
ENCRYPTION_KEY Muss mit dem Schlüssel des Backends übereinstimmen Ja
APP_URL Öffentliche URL der Anwendung Ja
EMAIL_API_KEY API-Schlüssel für E-Mail-Dienst Nein
LOG_LEVEL Protokollierungsstufe (Standard: info) Nein

Die vollständige und aktuellste Liste der Umgebungsvariablen finden Sie in der README im GitHub-Repository.

Ressourcen

Auf GitHub ansehen