# ========================================================================== # Datenbank # ========================================================================== DB_NAME=einkaufsapp DB_USER=einkaufsapp DB_PASSWORD=BITTE-AENDERN-langes-zufaelliges-passwort DB_ROOT_PASSWORD=BITTE-AENDERN-anderes-langes-passwort # ========================================================================== # Anwendung # ========================================================================== # ---- Anwendungsname ---- # Erscheint in der Oberflaeche, im Browsertitel, auf dem Startbildschirm # und in allen Mails. Nach einer Aenderung genuegt: # docker compose up -d api # Der web-Container muss dafuer NICHT neu gebaut werden. APP_NAME=Einkaufsliste # Kuerzere Fassung fuer das Symbol auf dem Startbildschirm. Leer = APP_NAME. APP_SHORT_NAME=Einkauf # Einziger nach aussen veroeffentlichter Port. Dahinter liegt nginx, # das sowohl die Oberflaeche als auch /api/ ausliefert. Der api-Container # hat bewusst KEINEN eigenen Port nach aussen. HTTP_PORT=46600 # Mailpit-Weboberflaeche, nur mit "--profile dev". An 127.0.0.1 gebunden. MAILPIT_PORT=8025 # Basis-URL, wie Nutzer die App im Browser erreichen - inklusive Port, # falls kein vorgelagerter Reverse Proxy auf 80/443 steht. # Landet in Verifikations- und Einladungsmails, muss also stimmen. PUBLIC_BASE_URL=http://einkauf.example.de:46600 # Welchen Absendern von X-Forwarded-For die API glauben darf. # "*" ist in Ordnung, solange api keinen oeffentlichen Port hat. FORWARDED_ALLOW_IPS=* # Cookie nur über HTTPS ausliefern. # false bei direktem HTTP-Zugriff auf Port 46600 # true sobald ein Reverse Proxy mit TLS davorsteht (dann muss # PUBLIC_BASE_URL ebenfalls auf https:// zeigen) # Ein Secure-Cookie über reines HTTP wird vom Browser verworfen - die # Anmeldung scheitert dann kommentarlos. COOKIE_SECURE=false # Dieses Konto wird als Administrator markiert, sobald es sich registriert. ADMIN_EMAIL=admin@example.de # Optional: Startpasswort für das erste Administratorkonto. # # - Wird NUR beim allerersten Start verwendet, und auch dann nur, wenn # die Datenbank noch gar keinen Nutzer enthält. # - Das angelegte Konto muss das Passwort bei der ersten Anmeldung # ändern. Bis dahin sind alle Funktionen außer "Profil lesen" und # "Passwort ändern" gesperrt. # - Danach diesen Wert wieder entfernen. Er steht im Klartext auf der # Platte, in jedem Backup und ist über "docker inspect" für jeden # lesbar, der auf den Host kommt. # # Leer lassen, um stattdessen den regulären Registrierungsweg zu nutzen. ADMIN_INITIAL_PASSWORD= # Alternative für Docker Secrets - hat Vorrang vor der Variablen oben: # ADMIN_INITIAL_PASSWORD_FILE=/run/secrets/admin_password # ========================================================================== # Selbstregistrierung # ========================================================================== # true Immer erlaubt. Admin-API kann es NICHT abschalten. # false Immer gesperrt. Zugang nur noch per Einladung (ab Phase 5). # Admin-API kann es NICHT einschalten. # admin Die Datenbankeinstellung entscheidet, der Administrator darf # sie zur Laufzeit umschalten. (Voreinstellung) ALLOW_SELF_REGISTRATION=admin # Nur relevant bei ALLOW_SELF_REGISTRATION=admin: Startwert beim # allerersten Start. Danach wird dieser Wert ignoriert. SELF_REGISTRATION_DEFAULT=true # ========================================================================== # Produktdatenbank # ========================================================================== # Nachschlagen gescannter Strichcodes bei Open Food Facts. # openfoodfacts eingeschaltet (Voreinstellung) # off aus - nur der eigene Artikelstamm # # Die Abfrage laeuft ueber den api-Container, nicht aus dem Browser: # So erfaehrt der Dienst die IP-Adressen deiner Nutzer nicht, die # Content-Security-Policy bleibt bei connect-src 'self', und jeder Code # wird nur einmal abgefragt. # # Voraussetzung: Der api-Container muss world.openfoodfacts.org # erreichen koennen. PRODUCT_LOOKUP=openfoodfacts # Gueltigkeit der zwischengespeicherten Antworten. PRODUCT_CACHE_DAYS=180 # Fehlschlaege kuerzer merken - das Produkt kann spaeter eingepflegt sein. PRODUCT_MISS_DAYS=14 PRODUCT_LOOKUP_TIMEOUT=6 # ========================================================================== # Aufraeumen # ========================================================================== # Wie lange weich geloeschte Daten aufbewahrt werden. Solange kann ein # Geraet offline bleiben und beim naechsten Abgleich noch erfahren, dass # etwas verschwunden ist. Kuerzer einzustellen fuehrt dazu, dass # geloeschte Listen auf selten benutzten Geraeten stehenbleiben. CLEANUP_DELETED_DAYS=30 # Quittungen der Outbox - verhindern doppeltes Ausfuehren. CLEANUP_OPS_DAYS=7 # Abstand zwischen zwei Aufraeumdurchlaeufen. CLEANUP_INTERVAL_HOURS=24 # ---- Startwerte fuer Fristen ---- # Diese Werte gelten nur, solange in der Verwaltung nichts anderes # eingestellt wurde. Nach der ersten Aenderung dort ist der gespeicherte # Wert massgeblich - dasselbe Verhalten wie bei der Selbstregistrierung. # Einzusehen und zu aendern unter: # Einstellungen -> Benutzerverwaltung -> Fristen SESSION_DAYS=30 INVITE_DAYS=14 WELCOME_DAYS=14 VERIFY_HOURS=24 RESET_HOURS=1 EMAIL_CHANGE_HOURS=48 # ========================================================================== # Push-Benachrichtigungen # ========================================================================== # Schluesselpaar erzeugen mit: # docker compose exec api python3 /app/../tools/vapid-keys.py # oder lokal: # python3 tools/vapid-keys.py # # Leer lassen = Push abgeschaltet. Ein Wechsel des privaten Schluessels # entwertet alle bestehenden Geraeteanmeldungen. # ACHTUNG: Jede Variable darf nur EINMAL in dieser Datei stehen. Bei # doppelten Eintraegen nimmt Docker Compose den letzten - eine # vergessene leere Vorlagenzeile unterhalb des eingefuegten Werts # schaltet die Funktion damit still wieder ab. VAPID_PRIVATE_KEY= VAPID_PUBLIC_KEY= # Kontaktadresse fuer die Push-Dienste der Browserhersteller. # Leer = SMTP_ENVELOPE_FROM wird verwendet. VAPID_SUBJECT=mailto:admin@example.de # Hoechstens eine Benachrichtigung je Liste und Person in diesem Zeitraum. PUSH_THROTTLE_HOURS=2 PUSH_TIMEOUT=10 # ========================================================================== # SMTP-Relay # ========================================================================== # --- Beispiel: eigener Postfix/mailcow-Relay --- SMTP_HOST=mail.example.de SMTP_PORT=587 SMTP_SECURITY=starttls SMTP_USER=einkaufsapp@example.de SMTP_PASSWORD=BITTE-AENDERN # --- Beispiel: Relay mit implizitem TLS --- # SMTP_PORT=465 # SMTP_SECURITY=ssl # --- Beispiel: lokaler Mailpit-Container zum Testen --- # SMTP_HOST=mailpit # SMTP_PORT=1025 # SMTP_SECURITY=none # SMTP_USER= # SMTP_PASSWORD= # Hostname im EHLO-Kommando. Sollte ein FQDN sein, der zur sendenden # Domain passt - sonst meldet sich der Container mit seiner ID, was bei # strengen Empfängern Spampunkte kostet. SMTP_HELO_HOSTNAME=einkauf.example.de # Absender, wie der Empfänger ihn sieht. SMTP_FROM=einkaufsliste@example.de # Leer lassen, um APP_NAME zu verwenden. SMTP_FROM_NAME= # Envelope-Absender (Return-Path). SPF wird gegen DIESE Adresse geprüft, # nicht gegen SMTP_FROM. Leer lassen = identisch mit SMTP_FROM. # Eine eigene Bounce-Adresse ist sinnvoll, wenn du Rückläufer auswerten willst. SMTP_ENVELOPE_FROM=bounces@example.de # Optional: Antworten sollen an ein Postfach gehen, das jemand liest. SMTP_REPLY_TO= SMTP_TIMEOUT=20 SMTP_MAX_RETRIES=3