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: localhostDie Adresse des PostgreSQL-Servers. Bei Docker Compose ist das der Name des Datenbank-Containers (z.B. "postgres").
DB_PORTconfig.yml: database.portStandard: 5432Der Port, auf dem PostgreSQL erreichbar ist. Der Standardport von PostgreSQL ist 5432.
DB_USERconfig.yml: database.userStandard: emberDer Benutzername für die Datenbank-Anmeldung. Muss mit dem PostgreSQL-Benutzer übereinstimmen.
DB_PASSWORDconfig.yml: database.passwordStandard: emberDas Passwort für die Datenbank-Anmeldung. Unbedingt ändern - verwende ein sicheres, zufälliges Passwort!
DB_DATABASEconfig.yml: database.databaseStandard: emberDer Name der Datenbank, die Ember verwenden soll. Wird beim ersten Start automatisch erstellt.
DB_SCHEMAconfig.yml: database.schemaStandard: emberDas Datenbankschema innerhalb der Datenbank. Normalerweise musst du das nicht ändern.
DB_POOLSIZEconfig.yml: database.poolSizeStandard: 5Wie 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.0Die 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: 8080Der Port, auf dem die Backend-API erreichbar ist. Wird intern im Docker-Netzwerk verwendet.
API_BASEURLconfig.yml: api.baseUrlStandard: http://localhost:5173Die ö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.deURL 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: 5242880Maximale 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/privacyVerzeichnis, in dem der Datenschutz-Text als Markdown liegt. Standard liegt im data/-Volumen und ist persistent.
API_CONSENTDIRconfig.yml: api.consentDirStandard: data/documents/consentVerzeichnis, in dem der Einwilligungs-Text liegt. Wie beim Datenschutz-Verzeichnis.
API_TOSDIRconfig.yml: api.tosDirStandard: data/documents/tosVerzeichnis, in dem die Nutzungsbedingungen liegen. Wie beim Datenschutz-Verzeichnis.
API_IMPRINTDIRconfig.yml: api.imprintDirStandard: data/documents/imprintVerzeichnis, in dem das Impressum liegt. Wie beim Datenschutz-Verzeichnis.
API_HTTPGZIPENABLEDconfig.yml: api.httpGzipEnabledStandard: trueKomprimiert 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: 6Kompressionsstufe 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: 1024Antworten unterhalb dieser Byte-Größe werden nicht komprimiert (lohnt sich nicht). Standard ~1 KB.
MAILING_PROVIDERconfig.yml: mailing.providerStandard: SMTPDer 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: EmberDer Absendername, der neben der E-Mail-Adresse angezeigt wird.
MAILING_DAILYSENDLIMITconfig.yml: mailing.dailySendLimitStandard: 200Maximale Anzahl an E-Mails, die pro Tag versendet werden. Schützt vor versehentlichem Massenversand.
MAILING_NOTIFICATIONDIGESTINTERVALMINUTESconfig.yml: mailing.notificationDigestIntervalMinutesStandard: 60Wie oft (in Minuten) gesammelte Benachrichtigungen als Zusammenfassung per E-Mail versendet werden. Standard ist 60 Minuten.
AUTH_SESSIONMINUTESconfig.yml: auth.sessionMinutesStandard: 43200Wie 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: 24Wie viele Stunden ein E-Mail-Bestätigungslink gültig ist (z.B. bei der Registrierung).
AUTH_PASSWORDTOKENHOURSconfig.yml: auth.passwordTokenHoursStandard: 72Wie viele Stunden ein Passwort-Zurücksetzen-Link gültig ist.
AUTH_TOKENBYTESconfig.yml: auth.tokenBytesStandard: 32Lä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: 5GStandard-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: 4GStandard-Kontingent für Wiki-Dateien pro Wache.
STORAGE_DEFAULTBOARDconfig.yml: storage.defaultBoardStandard: 3GStandard-Kontingent für Board-Anhänge pro Wache.
STORAGE_DEFAULTIMAGESconfig.yml: storage.defaultImagesStandard: 1GStandard-Kontingent für hochgeladene Bilder pro Wache (Fundsachen, Quiz-Bilder, Wiki-Bilder).
STORAGE_DEFAULTPAGESconfig.yml: storage.defaultPagesStandard: 1GStandard-Kontingent für Seiten-Anhänge pro Wache.
STORAGE_DEFAULTPERFILEconfig.yml: storage.defaultPerFileStandard: 50MMaximale Größe einer einzelnen hochgeladenen Datei.
STORAGE_DEFAULTPERIMAGEconfig.yml: storage.defaultPerImageStandard: 5MMaximale Größe eines einzelnen hochgeladenen Bildes.
STORAGE_WARNINGTHRESHOLDPERCENTconfig.yml: storage.warningThresholdPercentStandard: 80Prozentsatz der Belegung, ab dem eine Warnung im Wache-Speicher angezeigt wird. Standard 80%.
STORAGE_RECONCILIATIONINTERVALHOURSconfig.yml: storage.reconciliationIntervalHoursStandard: 24Wie 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: falseWenn 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: falseErlaubt der Föderation, mit privaten IP-Adressen oder localhost zu reden. Nur für lokale Entwicklung - in der Produktion immer false.