Installation

Umgebungsvariablen

Alle persönlichen Einstellungen von FediSuite (Domain, Passwörter, E-Mail-Server, Admin-Zugangsdaten) werden über die .env-Datei konfiguriert. Diese Seite erklärt jede Variable einzeln und nennt die Standardwerte aus dem Code.

Was ist eine .env-Datei?

Eine .env-Datei ist eine Textdatei mit Schlüssel-Wert-Paaren im Format SCHLUESSEL=wert. Docker Compose liest sie beim Start und übergibt die Werte als Umgebungsvariablen an die Container.

Alle instanzspezifischen Werte (Passwörter, Domain, Secrets) stehen in der .env, nicht in der docker-compose.yml. Die Compose-Datei lässt sich dadurch mit git pull aktualisieren, ohne dass deine Konfiguration überschrieben wird. Änderungen an der .env wirken erst, wenn die Container mit docker compose up -d neu erstellt werden. Ein docker compose restart liest sie nicht neu ein.

Sicherheit: Die .env enthält Passwörter und Secrets. Sie darf nicht in ein Git-Repository gelangen. Das Self-Hosting-Repository ignoriert .env bereits per .gitignore. Setze trotzdem restriktive Dateirechte, zum Beispiel chmod 600 .env.

Die vollständige Vorlage

Das Repository enthält eine Vorlage unter .env.example. Du kopierst sie einmalig nach .env und passt die Werte an.

.env.example
# Datenbank
POSTGRES_DB=fedisuite
POSTGRES_USER=fedisuite
POSTGRES_PASSWORD=change-me
DATABASE_URL=postgresql://fedisuite:change-me@db:5432/fedisuite

# Docker Image
FEDISUITE_IMAGE=christinloehner/fedisuite:latest

# App
JWT_SECRET=replace-with-a-long-random-secret
ACCOUNT_ENCRYPTION_KEY=replace-with-64-hexadecimal-characters
APP_NAME=FediSuite
APP_URL=https://your-domain.example
PUBLIC_SITE_URL=https://your-domain.example

# Admin-Account (wird beim Start angelegt, falls es ihn noch nicht gibt)
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=change-this-admin-password

# E-Mail
SMTP_HOST=smtp.your-provider.example
SMTP_PORT=587
SMTP_USER=your-smtp-user
SMTP_PASS=your-smtp-password
SMTP_FROM=no-reply@your-domain.example

# Optionales
OUTBOUND_HTTP_USER_AGENT=Mozilla/5.0 (compatible; FediSuite/1.0; +https://your-domain.example)
ENABLE_USER_REGISTRATION=true

Weitere Variablen (Funktionsschalter, Zeitlimits, Reichweite) sind optional und stehen weiter unten. Mit docker compose config prüfst du vor dem Start, ob die Konfiguration gültig ist.

Datenbankverbindung

FediSuite nutzt PostgreSQL. Diese vier Variablen müssen zueinander passen: Steht in POSTGRES_PASSWORD ein neues Passwort, muss dasselbe in der DATABASE_URL stehen.

POSTGRES_DB
fedisuite Pflicht

Name der Datenbank, die PostgreSQL beim ersten Start anlegt. Frei wählbar. Sie wird nur beim Anlegen des Datenverzeichnisses ausgewertet.

POSTGRES_USER
fedisuite Pflicht

Datenbankbenutzer, wird beim ersten Start angelegt und ist Superuser der Datenbank.

POSTGRES_PASSWORD
sicheres-passwort Pflicht

Passwort des Datenbankbenutzers. Wähle ein starkes, zufälliges Passwort und lass den Beispielwert change-me nicht stehen. Das Passwort wird nur beim Anlegen des Datenverzeichnisses gesetzt. Um es in einer bestehenden Datenbank zu ändern, brauchst du ein ALTER USER in PostgreSQL.

DATABASE_URL
postgresql://fedisuite:passwort@db:5432/fedisuite Pflicht

Verbindungszeichenfolge, über die FediSuite die Datenbank erreicht. Format: postgresql://BENUTZER:PASSWORT@HOSTNAME:PORT/DATENBANK. Der Hostname ist db, so heißt der Datenbankcontainer im Docker-Netzwerk. Benutzer, Passwort und Datenbankname müssen den POSTGRES_*-Werten entsprechen. Sonderzeichen im Passwort (zum Beispiel @, / oder :) müssen URL-kodiert werden. Am einfachsten ist ein Passwort aus Buchstaben und Ziffern.

Beispiel mit eigenen Werten: Wählst du als Passwort meinSicheresPasswort99, lautet die DATABASE_URL:
postgresql://fedisuite:meinSicheresPasswort99@db:5432/fedisuite

Docker Image

FEDISUITE_IMAGE
christinloehner/fedisuite:latest Pflicht

Legt fest, welches Docker-Image app, worker1 und worker2 nutzen. Der Wert hat die Form IMAGENAME:TAG. Fehlt die Variable, nimmt die Compose-Datei christinloehner/fedisuite:latest. Die Tags liegen auf Docker Hub (öffnet in neuem Tab).

christinloehner/fedisuite:latest Die jeweils aktuelle Version für linux/amd64. Standard in der Vorlage.
christinloehner/fedisuite:2.0.0 Eine bestimmte Version festnageln (Beispiel). Sinnvoll, wenn du Updates bewusst steuern willst.
christinloehner/fedisuite:arm64-latest Die jeweils aktuelle Version für linux/arm64, zum Beispiel für ARM-Server oder einen Raspberry Pi.
christinloehner/fedisuite:arm64-2.0.0 Eine bestimmte Version für ARM64 (Beispiel).
Versionsnummern: Versionen haben die Form MAJOR.MINOR.PATCH. Jeder Release-Tag durchläuft vor der Veröffentlichung ein Release-Gate, das erfolgreiche Tests voraussetzt. Was sich ändert, steht im Changelog (öffnet in neuem Tab). Den Ablauf eines Updates beschreibt die Seite Updates.

App-Konfiguration

APP_URL
https://fedisuite.deine-domain.de Pflicht

Die vollständige öffentliche URL deiner Instanz, mit https:// und ohne abschließenden Schrägstrich. FediSuite baut daraus Links in E-Mails und die OAuth-Rückkehradresse (APP_URL/api/auth/fediverse/callback). Stimmt sie nicht mit der echten Domain überein, schlägt das Verbinden von Konten fehl. Ohne Angabe gilt http://localhost:3000.

JWT_SECRET
(langer zufälliger String) Pflicht

Geheimer Schlüssel, mit dem FediSuite Login-Tokens signiert. Er verschlüsselt außerdem die gespeicherten Zwei-Faktor-Geheimnisse und das Geheimnis für das Instanzverzeichnis. Wer ihn kennt, kann Tokens fälschen. Er muss deshalb lang, zufällig und geheim sein. FediSuite verlangt keine Mindestlänge, ohne den Wert startet der Prozess aber nicht. Ändere ihn nach dem Start nicht mehr: Alle Logins werden ungültig, und gespeicherte Zwei-Faktor-Geheimnisse lassen sich nicht mehr entschlüsseln.

JWT_SECRET generieren

openssl rand -hex 64

Führe den Befehl auf deinem Server aus und trage die Ausgabe als Wert für JWT_SECRET ein.

ACCOUNT_ENCRYPTION_KEY Pflicht ab 2.0.0

Eigener 32-Byte-Schlüssel für die Verschlüsselung von Zugangstokens und Client-Secrets verbundener Fediverse-Konten. Er muss aus genau 64 Hex-Zeichen bestehen, unabhängig vom JWT_SECRET sein und bei App und Workern identisch ankommen. Erzeuge ihn einmalig mit openssl rand -hex 32, trage ihn in .env ein und sichere ihn getrennt und verschlüsselt. Beim ersten 2.0-Start werden vorhandene Zugangsdaten migriert. Ein fehlender, ungültiger oder falscher Schlüssel verhindert den Start beziehungsweise das Entschlüsseln; nach der Migration darfst du ihn nicht austauschen.

Bestehende Instanz sicher auf 2.0.0 upgraden →
APP_NAME
FediSuite Optional

Anzeigename der Instanz, zum Beispiel in E-Mails und im Standard-User-Agent. Standard: FediSuite.

PUBLIC_SITE_URL
https://fedisuite.deine-domain.de Optional

Öffentliche Adresse der Instanz für den Standard-User-Agent und den Eintrag im Instanzverzeichnis. Standard: der Wert von APP_URL. In den meisten Fällen kannst du sie weglassen oder gleich APP_URL setzen.

Admin-Account

Beim Start der app prüft FediSuite, ob es einen Benutzer mit der Adresse aus ADMIN_EMAIL gibt. Wenn nicht, legt es ihn mit ADMIN_PASSWORD als bestätigten Administrator an. Gibt es ihn schon, bleibt das Passwort unverändert, und der Benutzer behält oder erhält die Admin-Rolle.

ADMIN_EMAIL
admin@deine-domain.de Pflicht

E-Mail-Adresse des Admin-Accounts. Mit dieser Adresse meldest du dich nach der Installation an. Trägst du später eine andere Adresse ein, legt der nächste Start einen zweiten Admin dafür an.

ADMIN_PASSWORD
sicheres-admin-passwort Pflicht

Passwort des Admin-Accounts. Wähle ein starkes Passwort. Nach dem ersten Login kannst du es in den Einstellungen jederzeit ändern. Ein Ändern dieser Variable bei einem bestehenden Account hat keine Wirkung.

Kritisch: Fehlt ADMIN_PASSWORD (oder ADMIN_EMAIL) beim ersten Start, wird kein Admin angelegt, und du kannst dich nicht anmelden. Trage beide Werte ein, bevor du zum ersten Mal docker compose up -d ausführst. Nachträglich holst du den Admin nach, indem du die Werte setzt und die App neu startest.

E-Mail (SMTP)

FediSuite verschickt E-Mails für die Registrierung (Bestätigung), den Passwort-Reset, die Zwei-Faktor-Anmeldung per E-Mail und Abläufe rund um den historischen Import nach dem Verbinden von Konten. Ohne funktionierende SMTP-Konfiguration sind diese Funktionen nicht nutzbar. SMTP ist deshalb für den Betrieb Pflicht.

SMTP_HOST
smtp.dein-anbieter.de Pflicht

Hostname des SMTP-Servers deines E-Mail-Anbieters. Ohne Angabe verwendet FediSuite localhost.

SMTP_PORT
587 Pflicht

Port des SMTP-Servers. Bei 465 verwendet FediSuite sofort TLS. Bei jedem anderen Port, zum Beispiel 587, wird die Verbindung per STARTTLS verschlüsselt, sofern der Server es anbietet. Ohne Angabe gilt 1025.

SMTP_USER
no-reply@deine-domain.de Pflicht

Benutzername für die SMTP-Anmeldung, oft die Absenderadresse.

SMTP_PASS
dein-smtp-passwort Pflicht

Passwort für die SMTP-Anmeldung. Manche Anbieter verlangen ein eigenes App-Passwort statt des Konto-Passworts.

SMTP_FROM
no-reply@deine-domain.de Pflicht

Absenderadresse der E-Mails. Sie muss in der Regel zur Domain deines SMTP-Kontos passen, sonst lehnen Empfangsserver die Mails ab. Ohne Angabe nutzt FediSuite "APP_NAME" <no-reply@HOST> mit dem Host aus APP_URL.

Registrierung & Netzwerk

ENABLE_USER_REGISTRATION
true Optional

Steuert, ob sich neue Nutzer*innen über die Registrierungsseite anmelden können. Standard ist true (offen). Für eine private Instanz setzt du false.

ENABLE_USER_REGISTRATION=true

Öffentliche Instanz: Jede Person kann sich registrieren.

ENABLE_USER_REGISTRATION=false

Private Instanz: Keine Registrierung möglich. Der Admin aus ADMIN_EMAIL wird trotzdem angelegt.

OUTBOUND_HTTP_USER_AGENT Optional

User-Agent-Header für alle ausgehenden HTTP-Anfragen, etwa an Fediverse-Server. Standard: Mozilla/5.0 (compatible; APP_NAME/1.0; +PUBLIC_SITE_URL). Mit einer erreichbaren URL im Header können Betreiber*innen fremder Instanzen dich bei Problemen kontaktieren.

OUTBOUND_HTTP_USER_AGENT=Mozilla/5.0 (compatible; FediSuite/1.0; +https://deine-domain.de)
TRUST_PROXY1 (Server-Standard)

Anzahl vertrauenswürdiger Reverse-Proxys vor der App. Sie bestimmt die Client-IP für Rate-Limits, Audit-Logs und Sitzungen. Bei direkt erreichbarem Port 3000 0 setzen; hinter genau einem vertrauenswürdigen Proxy wie Traefik 1. Der Server akzeptiert auch false, true oder eine kommagetrennte Liste vertrauenswürdiger Adressen/Netze. true bei direktem Zugriff vermeiden: Clients könnten ihre IP über Weiterleitungs-Header fälschen.

ALLOW_PRIVATE_INSTANCE_URLS
false Optional

Standardmäßig verweigert FediSuite Verbindungen in private Netze (Loopback, private Adressbereiche, Link-Local-Adressen wie der Cloud-Metadatendienst). Die Prüfung läuft bei jedem Verbindungsaufbau, auch bei Weiterleitungen. Setze true nur, wenn eine verbundene Instanz in deinem eigenen Netz läuft, etwa eine Testinstanz neben dem Server. Auf Servern, die nur öffentliche Instanzen anbinden, lässt du die Variable ungesetzt.

OUTBOUND_HTTP_TIMEOUT_MS
60000 Optional

Allgemeines Zeitlimit in Millisekunden für ausgehende HTTP-Anfragen (mindestens 1000). Einzelne Abläufe wie die Reichweiten-Berechnung setzen kürzere eigene Limits.

Funktionsschalter

Die größeren Funktionen von FediSuite 2.0 lassen sich einzeln abschalten. Alle sind standardmäßig an. Mit false (auch 0, no, off) verschwindet die Funktion in der Web-Oberfläche und den Apps, und die zugehörigen API-Routen antworten mit 404. Gesetzt werden sie in der .env.

ENABLE_DRAFTS
true Optional

Entwürfe: Beiträge ohne Zeitpunkt, die der Scheduler nie veröffentlicht, mit Phase (Idee, in Arbeit, bereit) und Entwurfs-Tab bei den Beiträgen.

ENABLE_CONTENT_CALENDAR
true Optional

Content-Kalender: Monats- und Wochenansicht der Beiträge mit Filtern und Verschieben per Drag-and-drop.

ENABLE_CONTENT_LABELS
true Optional

Labels und Kampagnen: interne Markierungen für Beiträge, die nie veröffentlicht oder zu Hashtags werden.

ENABLE_CONTENT_RECYCLING
true Optional

Wiederverwendung: Archivbeiträge als neuen Entwurf übernehmen, Hinweis „Wieder interessant“, Evergreen-Sammlung und Warnung vor ähnlichen Beiträgen.

ENABLE_CONTENT_INTELLIGENCE
true Optional

Inhaltsanalyse: Tab „Inhalte“ in der Analyse, Hinweise im Composer und Zeitfenster-Markierungen im Kalender.

ENABLE_COMMUNITY_INTELLIGENCEtrue

Zeigt die Community-Analyse und aktiviert ihre API. Sie unterscheidet interagierende, neue und wiederkehrende Konten anhand gespeicherter Interaktionen. Mit false wird die Funktion ausgeblendet; die Aufbewahrung der Interaktionsdaten regelt separat ENGAGEMENT_RETENTION_DAYS.

Worker-Variablen (in docker-compose.yml)

Diese Variablen stehen in der mitgelieferten Compose-Datei pro Service und steuern, welche Hintergrundaufgaben ein Container übernimmt. Sie lassen sich auch in der .env setzen, wirken aber nur in Containern, in deren environment-Block sie nicht überschrieben werden. Die Rollenverteilung erklärt die Seite Konfiguration.

ENABLE_SCHEDULER Standard: true

Veröffentlicht fällige geplante Beiträge (jede Minute) und gleicht, falls veröffentlicht, die Instanzliste ab. In der Compose-Datei nur in worker1 an. Mehrere Scheduler würden Beiträge nicht doppelt posten (jeder Beitrag wird atomar beansprucht), sind aber überflüssig.

ENABLE_POSTS_REFRESH Standard: true

Aktualisiert regelmäßig Konten und Beitragszahlen. Kann in mehreren Containern laufen.

ENABLE_REACH_REFRESH Standard: true

Arbeitet die Warteschlange für die Reichweiten-Berechnung ab. Die Compose-Datei setzt es nicht, daher läuft es in jedem Container.

ENABLE_IDLE_REMINDER Standard: true

Sendet die einmalige Erinnerung an Nutzer*innen, die nach 48 Stunden noch kein Fediverse-Konto verbunden haben. In der Compose-Datei nur in worker1 an.

ENABLE_TIPS_ENGINE Standard: true

Erzeugt alle sechs Stunden die Tipps für verbundene Konten. Kann in mehreren Containern laufen.

WORKER_ID Standard: Hostname des Containers

Eindeutiger Name des Containers, zum Beispiel worker-1. Er erscheint in den Logs und bei Sperren und Warteschlangen.

REFRESH_BATCH_SIZE Standard: 10

Wie viele Konten ein Worker pro Durchlauf (alle 60 Sekunden) aktualisiert, 1 bis 50. Die Compose-Datei setzt 5. Niedrigere Werte schonen die Server der Fediverse-Instanzen, höhere arbeiten viele Konten schneller ab.

PLUGINS_ENABLED Standard: true

Schaltet das Plugin-System ein oder aus. Bei false bleibt die Plugin-Registry leer.

PLUGIN_SCAN_ON_START Standard: true

Durchsucht beim Start den Ordner /app/plugins nach Plugins. Bei false wird der Scan übersprungen.

PLUGIN_API_VERSION Standard: 1

Plugin-API-Version der Instanz. Plugins deklarieren in ihrer plugin.json, mit welcher Version sie laufen. Lass den Wert bei 1.

ENGAGEMENT_RETENTION_DAYS730 · Bereich 90 bis 36500

Aufbewahrungsdauer für Interaktionen anderer Fediverse-Konten in der Community-Analyse. Eine stündliche Bereinigung entfernt ältere Datensätze in Batches; eine kürzere Frist verkürzt auch die auswertbare Historie. Ungültige Werte fallen auf 730 Tage zurück, Werte außerhalb des Bereichs werden begrenzt. Die Frist sollte zur Datenschutzerklärung passen.

PLUGIN_DIR (veraltet)

Ältere Changelog-Einträge erwähnen diese Variable, aktuelle Images ignorieren sie jedoch. Das Plugin-Verzeichnis ist fest /app/plugins. Das Plugin-Repository in allen App- und Worker-Containern dort einbinden; PLUGINS_ENABLED und PLUGIN_SCAN_ON_START steuern das Laden.

Erweiterte Einstellungen

Diese Variablen sind optional. Die Standardwerte passen für die meisten Instanzen. Zahlenwerte außerhalb des angegebenen Bereichs werden auf die nächste Grenze gesetzt, ein fehlender oder ungültiger Wert fällt auf den Standard zurück. Zeitangaben sind in Millisekunden.

Aktualisierung der Konten

REFRESH_ACCOUNT_TIMEOUT_MS Standard 45000 · Bereich ≥ 5000

Zeit, nach der die Aktualisierung eines einzelnen Kontos aufgegeben wird.

REFRESH_FAILURE_THRESHOLD Standard 5 · Bereich ≥ 1

Wie viele Fehlschläge hintereinander ein Konto als „Neu verbinden“ oder „nicht erreichbar“ markieren.

STALE_POST_REFRESH_BATCH_SIZE Standard 10 · Bereich 0 bis 50

Wie viele der am längsten nicht abgerufenen Beiträge jede stündliche Aktualisierung eines Kontos erneut liest, damit die Zähler alter Beiträge aktuell bleiben. 0 schaltet die Rotation ab.

STALE_POST_REFRESH_MIN_AGE_DAYS Standard 7 · Bereich 1 bis 365

Mindestalter des letzten Abrufs in Tagen, ab dem ein Beitrag zur Rotation gehört.

SLOW_REFRESH_LOG_MS Standard 20000 · Bereich 1000 bis 600000

Ab dieser Dauer wird die Aktualisierung eines Kontos mit den Zeiten aller Schritte und Anfragen protokolliert. Läuft sie in ihr Zeitlimit, wird sie immer so protokolliert.

Reichweite

REACH_WORKER_BATCH_SIZE Standard 12 · Bereich 1 bis 50

Aufträge, die ein Worker pro Durchlauf aus der Warteschlange holt.

REACH_REFRESH_INTERVAL_MS Standard 10000 · Bereich 1000 bis 60000

Wie oft jeder Prozess die Warteschlange prüft.

REACH_MAX_CONCURRENT_PER_INSTANCE Standard 6 · Bereich 1 bis 20

Gleichzeitige Anfragen pro fremder Instanz, über alle Worker hinweg. Schützt kleine Instanzen vor Überlast.

REACH_PARALLEL_INSTANCES Standard 4 · Bereich 1 bis 12

Wie viele Instanzen ein Worker gleichzeitig abfragt.

REACH_QUEUE_PER_ACCOUNT_LIMIT Standard 80 · Bereich 1 bis 200

Höchstzahl offener Aufträge pro Konto in der Warteschlange.

REACH_QUEUE_LOOKBACK_DAYS Standard 90 · Bereich ≥ 1

Zeitraum in Tagen, für den wiederholte Berechnungen angestoßen werden. Fehlende Reichweiten-Daten werden unabhängig vom Alter nachgetragen.

REACH_RECALCULATE_AFTER_HOURS Standard 24 · Bereich 1 bis 720

Nach wie vielen Stunden ein Beitrag mit unveränderten Zählern erneut berechnet wird. Ändern sich die Zähler, geschieht es sofort.

REACH_MAX_REBLOGGER_PAGES Standard 5 · Bereich 1 bis 10

Wie viele Seiten (je 80) der Boost-Liste eines Beitrags gelesen werden.

REACH_JOB_TIMEOUT_MS Standard 60000 · Bereich 10000 bis 600000

Zeitlimit pro Auftrag. Danach wird er aufgegeben und später erneut versucht.

REACH_JOB_REQUEST_TIMEOUT_MS Standard 10000 · Bereich 1000 bis 60000

Zeitlimit pro einzelner Anfrage innerhalb eines Auftrags.

REACH_JOB_MAX_RATE_LIMIT_WAIT_MS Standard 15000 · Bereich 0 bis 300000

Längste Wartezeit auf ein Rate-Limit. Verlangt eine Instanz mehr, werden ihre Aufträge zurückgestellt, statt zu warten.

REACH_RETRY_BASE_MS Standard 300000 · Bereich ≥ 1000

Basiswartezeit vor einem erneuten Versuch fehlgeschlagener Aufträge (wächst exponentiell).

Weitere

MASTODON_MEDIA_PROCESSING_TIMEOUT_MS Standard 120000 · Bereich ≥ 10000

Wie lange FediSuite nach einem Upload auf die Medienverarbeitung einer Mastodon-Instanz wartet, bevor der Beitrag angelegt wird.

MASTODON_MEDIA_PROCESSING_POLL_MS Standard 2000 · Bereich ≥ 500

Abstand der Abfragen während dieses Wartens.

AUDIT_LOG_DIR Standard /app/logs

Verzeichnis im Container für die Audit-Logs. Ändere es nur zusammen mit dem Volume.

FEDISUITE_REGISTRY_URL Standard https://www.fedisuite.com/api/instances

Adresse des Instanzverzeichnisses, mit dem sich die Instanz auf Wunsch abgleicht (Admin-Bereich). Nur für eigene Verzeichnisse ändern.

FEDISUITE_REGISTRY_TIMEOUT_MS Standard 30000 · Bereich ≥ 5000

Zeitlimit für Anfragen an das Instanzverzeichnis. Langsame Server (zum Beispiel ein Raspberry Pi) brauchen dort manchmal mehr Zeit.