Files
einkaufsapp/.env.example

193 lines
7.5 KiB
Plaintext

# ==========================================================================
# 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=8080
# 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:8080
# 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 8080
# 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