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.
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.
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
ENCRYPTION_KEY verschlüsselt
gespeicherte Mastodon-OAuth-Tokens. Er kann nach der Ersteinrichtung
nicht mehr geändert werden, ohne den Zugriff auf alle verbundenen
Mastodon-Konten zu verlieren. Bewahren Sie ihn sicher auf. Der gleiche
Schlüssel muss sowohl vom Backend als auch vom CLI-Service verwendet
werden.
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.
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.
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.
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.
Die folgenden Tabellen listen die wichtigsten Konfigurationsoptionen für jeden Dienst auf.
| 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 |
| 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 |
| 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.