HilfeHelp Center

Konfigurationsdatei

Die zentrale Konfiguration liegt in config/config.yml. Beim ersten Start wird sie mit Standardwerten automatisch erstellt und kann anschließend mit einem Editor angepasst werden.

Jeder Wert in der config.yml kann zusätzlich über eine Umgebungsvariable überschrieben werden - siehe Abschnitt unten. Die wichtigsten Bereiche sind:

  • Datenbank (database.*): Host, Port, Datenbankname, Benutzername und Passwort für PostgreSQL.
  • E-Mail-Versand (mailing.*): SMTP-Host, Port, Benutzername, Passwort, Absenderadresse und Tageslimit. Jede Wache kann zusätzlich einen eigenen Mail-Server konfigurieren.
  • Base URL (api.baseUrl): Die öffentliche URL deiner Instanz (z.B. https://ember.deine-feuerwehr.de). Wird für Links in E-Mails und in der Föderation verwendet.
  • Authentifizierung (auth.*): Sitzungsdauer, Token-Gültigkeit, Token-Länge, Pepper für Token-Hashing und Have-I-Been-Pwned-Anbindung. Der Pepper ist in der Produktion zwingend zu setzen.
  • Speicher (storage.*): Standard-Kontingente pro Wache, Kompressions-Schalter, Bildvarianten und der Backend-Typ (lokal, S3, SMB oder SFTP). Auch der AES-Schlüssel zur Verschlüsselung von wache-eigenen Speicher-Anmeldedaten.
  • Metriken (metrics.*): Wie lange Zugriffs- und Traffic-Statistiken aufbewahrt werden und in welchem Intervall sie aus dem Speicher in die Datenbank geschrieben werden.
  • Netzwerk (network.*): Vertrauenswürdige Reverse-Proxy-IP-Bereiche und Cloudflare-Schalter - wichtig, damit die echte Besucher-IP korrekt erkannt wird.

Umgebungsvariablen

Umgebungsvariablen werden über die Docker-Compose-Datei gesetzt und überschreiben die Werte aus der Konfigurationsdatei. Sie sind der einfachste Weg, Ember für deine Umgebung anzupassen, ohne die config.yml direkt zu bearbeiten.

Jeder Eintrag unten zeigt den Variablen-Namen, den zugehörigen Schlüssel in der config.yml und den Standardwert.

DB_HOSTconfig.yml: database.hostStandard: localhost

Die Adresse des PostgreSQL-Servers. Bei Docker Compose ist das der Name des Datenbank-Containers (z.B. "postgres").

DB_PORTconfig.yml: database.portStandard: 5432

Der Port, auf dem PostgreSQL erreichbar ist. Der Standardport von PostgreSQL ist 5432.

DB_USERconfig.yml: database.userStandard: ember

Der Benutzername für die Datenbank-Anmeldung. Muss mit dem PostgreSQL-Benutzer übereinstimmen.

DB_PASSWORDconfig.yml: database.passwordStandard: ember

Das Passwort für die Datenbank-Anmeldung. Unbedingt ändern - verwende ein sicheres, zufälliges Passwort!

DB_DATABASEconfig.yml: database.databaseStandard: ember

Der Name der Datenbank, die Ember verwenden soll. Wird beim ersten Start automatisch erstellt.

DB_SCHEMAconfig.yml: database.schemaStandard: ember

Das Datenbankschema innerhalb der Datenbank. Normalerweise musst du das nicht ändern.

DB_POOLSIZEconfig.yml: database.poolSizeStandard: 5

Wie viele gleichzeitige Verbindungen Ember zur Datenbank offen hält. Ein höherer Wert erlaubt mehr parallele Anfragen, verbraucht aber mehr Arbeitsspeicher.

API_HOSTconfig.yml: api.hostStandard: 0.0.0.0

Die Netzwerkadresse, auf der der Backend-Server lauscht. 0.0.0.0 bedeutet "auf allen Adressen" - das ist die richtige Einstellung in Docker.

API_PORTconfig.yml: api.portStandard: 8080

Der Port, auf dem die Backend-API erreichbar ist. Wird intern im Docker-Netzwerk verwendet.

API_BASEURLconfig.yml: api.baseUrlStandard: http://localhost:5173

Die öffentliche URL deiner Ember-Instanz (z.B. https://ember.deine-feuerwehr.de). Wird für Links in E-Mails und Einladungen verwendet. Sehr wichtig für den Produktivbetrieb!

API_DEMOURLconfig.yml: api.demoUrlStandard: https://demo.ember-panel.de

URL der öffentlichen Demo-Instanz, auf die von Login- und Marketing-Seiten verlinkt wird. Wenn du selbst hostest, kannst du das auf deine eigene Demo zeigen lassen oder den Standard belassen.

API_ALLOWEDORIGINSconfig.yml: api.allowedOriginsStandard: -

Komma-getrennte Liste zusätzlich erlaubter Frontend-URLs (CORS). Standardmäßig ist nur die API_BASEURL erlaubt - setze diese Variable nur, wenn du z.B. eine zweite Domain für dasselbe Backend nutzt.

API_MAXIMAGESIZEBYTESconfig.yml: api.maxImageSizeBytesStandard: 5242880

Maximale Dateigröße für hochgeladene Bilder in Bytes. Der Standard ist 5 MB (5242880 Bytes). Erhöhe diesen Wert, wenn Nutzer größere Bilder hochladen sollen.

API_PRIVACYPOLICYDIRconfig.yml: api.privacyPolicyDirStandard: data/documents/privacy

Verzeichnis, in dem der Datenschutz-Text als Markdown liegt. Standard liegt im data/-Volumen und ist persistent.

API_CONSENTDIRconfig.yml: api.consentDirStandard: data/documents/consent

Verzeichnis, in dem der Einwilligungs-Text liegt. Wie beim Datenschutz-Verzeichnis.

API_TOSDIRconfig.yml: api.tosDirStandard: data/documents/tos

Verzeichnis, in dem die Nutzungsbedingungen liegen. Wie beim Datenschutz-Verzeichnis.

API_IMPRINTDIRconfig.yml: api.imprintDirStandard: data/documents/imprint

Verzeichnis, in dem das Impressum liegt. Wie beim Datenschutz-Verzeichnis.

API_HTTPGZIPENABLEDconfig.yml: api.httpGzipEnabledStandard: true

Komprimiert JSON-, HTML-, CSS- und ähnliche Antworten vor dem Versand. Spart deutlich Bandbreite. Nur abschalten, wenn der Reverse Proxy davor schon komprimiert.

API_HTTPGZIPLEVELconfig.yml: api.httpGzipLevelStandard: 6

Kompressionsstufe 0–9. 6 ist der gute Mittelweg zwischen CPU-Aufwand und Größeneinsparung. Höher bei knapper Bandbreite, niedriger bei sehr kleiner Hardware.

API_HTTPGZIPMINSIZEBYTESconfig.yml: api.httpGzipMinSizeBytesStandard: 1024

Antworten unterhalb dieser Byte-Größe werden nicht komprimiert (lohnt sich nicht). Standard ~1 KB.

MAILING_PROVIDERconfig.yml: mailing.providerStandard: SMTP

Der E-Mail-Versandtyp. Derzeit wird nur SMTP unterstützt.

MAILING_SMTPconfig.yml: mailing.smtpStandard: -

Die Adresse des SMTP-Servers (z.B. smtp.gmail.com oder mail.dein-provider.de).

MAILING_USERconfig.yml: mailing.userStandard: -

Der Benutzername für die SMTP-Anmeldung. Oft ist das die vollständige E-Mail-Adresse.

MAILING_PASSWORDconfig.yml: mailing.passwordStandard: -

Das Passwort für die SMTP-Anmeldung. Bei manchen Anbietern (z.B. Gmail) brauchst du ein App-Passwort statt deines normalen Passworts.

MAILING_APIKEYconfig.yml: mailing.apiKeyStandard: -

API-Schlüssel für API-basierte Mail-Versender (alternativ zu Benutzername/Passwort). Wird nur von bestimmten Anbietern verwendet.

MAILING_SENDERADDRESSconfig.yml: mailing.senderAddressStandard: -

Die Absender-E-Mail-Adresse, die Empfänger sehen (z.B. noreply@deine-feuerwehr.de).

MAILING_SENDERNAMEconfig.yml: mailing.senderNameStandard: Ember

Der Absendername, der neben der E-Mail-Adresse angezeigt wird.

MAILING_DAILYSENDLIMITconfig.yml: mailing.dailySendLimitStandard: 200

Maximale Anzahl an E-Mails, die pro Tag versendet werden. Schützt vor versehentlichem Massenversand.

MAILING_NOTIFICATIONDIGESTINTERVALMINUTESconfig.yml: mailing.notificationDigestIntervalMinutesStandard: 60

Wie oft (in Minuten) gesammelte Benachrichtigungen als Zusammenfassung per E-Mail versendet werden. Standard ist 60 Minuten.

AUTH_SESSIONMINUTESconfig.yml: auth.sessionMinutesStandard: 43200

Wie lange eine Sitzung nach der letzten Aktivität gültig bleibt (in Minuten). Nach Ablauf muss sich der Nutzer erneut anmelden.

AUTH_VERIFYTOKENHOURSconfig.yml: auth.verifyTokenHoursStandard: 24

Wie viele Stunden ein E-Mail-Bestätigungslink gültig ist (z.B. bei der Registrierung).

AUTH_PASSWORDTOKENHOURSconfig.yml: auth.passwordTokenHoursStandard: 72

Wie viele Stunden ein Passwort-Zurücksetzen-Link gültig ist.

AUTH_TOKENBYTESconfig.yml: auth.tokenBytesStandard: 32

Länge der generierten Sicherheits-Token in Bytes. Ein höherer Wert ist sicherer, aber 32 Bytes sind bereits sehr sicher.

AUTH_TOKENPEPPERconfig.yml: auth.tokenPepperStandard: -

Zusätzliches serverseitiges Geheimnis, das in die Hash-Berechnung von Sitzungs- und Recovery-Token einfließt. In der Produktion zwingend zu setzen - Ember startet sonst nicht. Beim Verlust werden alle bestehenden Sitzungen ungültig.

Standard-Kontingente und Größenlimits für hochgeladene Dateien. STORAGE_CREDENTIALENCRYPTIONKEY ist zwingend zu setzen, sobald eine Wache S3/SMB/SFTP über die Admin-Oberfläche konfigurieren soll.

STORAGE_DEFAULTTOTALconfig.yml: storage.defaultTotalStandard: 5G

Standard-Gesamtkontingent pro Wache (Summe über alle Kategorien). Wird beim Anlegen einer neuen Wache angewendet und kann pro Wache überschrieben werden.

STORAGE_DEFAULTKBconfig.yml: storage.defaultKbStandard: 4G

Standard-Kontingent für Wiki-Dateien pro Wache.

STORAGE_DEFAULTBOARDconfig.yml: storage.defaultBoardStandard: 3G

Standard-Kontingent für Board-Anhänge pro Wache.

STORAGE_DEFAULTIMAGESconfig.yml: storage.defaultImagesStandard: 1G

Standard-Kontingent für hochgeladene Bilder pro Wache (Fundsachen, Quiz-Bilder, Wiki-Bilder).

STORAGE_DEFAULTPAGESconfig.yml: storage.defaultPagesStandard: 1G

Standard-Kontingent für Seiten-Anhänge pro Wache.

STORAGE_DEFAULTPERFILEconfig.yml: storage.defaultPerFileStandard: 50M

Maximale Größe einer einzelnen hochgeladenen Datei.

STORAGE_DEFAULTPERIMAGEconfig.yml: storage.defaultPerImageStandard: 5M

Maximale Größe eines einzelnen hochgeladenen Bildes.

STORAGE_WARNINGTHRESHOLDPERCENTconfig.yml: storage.warningThresholdPercentStandard: 80

Prozentsatz der Belegung, ab dem eine Warnung im Wache-Speicher angezeigt wird. Standard 80%.

STORAGE_RECONCILIATIONINTERVALHOURSconfig.yml: storage.reconciliationIntervalHoursStandard: 24

Wie oft (in Stunden) Ember im Hintergrund die tatsächliche Speicher-Belegung mit den gespeicherten Zählern abgleicht. Korrigiert kleine Abweichungen, falls sie auftreten.

STORAGE_CREDENTIALENCRYPTIONKEYconfig.yml: storage.credentialEncryptionKeyStandard: -

AES-256-Schlüssel (base64) zur Verschlüsselung von wache-eigenen Speicher-Anmeldedaten (S3, SMB, SFTP). Erforderlich, sobald eine Wache S3/SMB/SFTP über die Admin-Oberfläche nutzen soll. Backup zwingend - bei Verlust sind alle gespeicherten Anmeldedaten nicht mehr entschlüsselbar.

Welche Forwarded-For-Header dem Reverse Proxy vertraut werden - wichtig, damit Rate Limits und Logs die richtige Besucher-IP zeigen.

NETWORK_TRUSTEDPROXIESconfig.yml: network.trustedProxiesStandard: -

Komma-getrennte Liste von CIDR-Bereichen der Reverse-Proxies, denen Forwarded-For-Header geglaubt werden darf. Leer = direkter Betrieb ohne Reverse Proxy.

NETWORK_CLOUDFLAREconfig.yml: network.cloudflareStandard: false

Wenn aktiv, wird der CF-Connecting-IP-Header von Cloudflare-Edge-Servern ausgewertet. Nur einschalten, wenn die Instanz wirklich hinter Cloudflare läuft.

FEDERATION_ALLOWPRIVATEHOSTSconfig.yml: federation.allowPrivateHostsStandard: false

Erlaubt der Föderation, mit privaten IP-Adressen oder localhost zu reden. Nur für lokale Entwicklung - in der Produktion immer false.

Umgebungsvariablen haben immer Vorrang vor den Werten in der config.yml. So kannst du z.B. pro Umgebung (Test, Produktion) unterschiedliche Datenbank-Zugangsdaten setzen, ohne die Konfigurationsdatei zu ändern.
Wenn du eine Einstellung in der config.yml nicht findest: prüfe, ob sie über eine Umgebungsvariable gesetzt ist - diese hat Vorrang.