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 vor der Einrichtung:

# AES-256 Encryption Key (64-stellig, hex) – schützt OAuth-Tokens
openssl rand -hex 32

# JWT Secret – signiert Access-Tokens
openssl rand -base64 48

# Session Secret – Frontend-Session-Cookies
openssl rand -base64 48

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 referenziert Variablen aus einer .env-Datei. Erstellen Sie diese im nächsten Schritt.

Umgebungsdatei

Erstellen Sie eine .env-Datei im selben Verzeichnis wie Ihre docker-compose.yml:

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

Ersetzen Sie die Platzhalterwerte durch die zuvor generierten Secrets. 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

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