Ein Zustand je Quelle haelt fest, wie weit gelesen wurde und ob es klappt. Der Merker ist bewusst ein freier Text: Zammad braucht darin einen Zeitstempel, Telegram den Zaehler der zuletzt geholten Nachricht. Dazu die gespiegelte Belegung ohne Titel, das Adressbuch der erlaubten Telegram-Chats und der Einmalcode, mit dem sich ein Chat anmeldet. Welche Integration eine Instanz darf, entscheidet weiterhin INSTANZ. Ein Zammad-Token in der Instanz daheim bleibt wirkungslos — das steht in den Faehigkeiten, nicht in einer Einstellung, die sich verstellen liesse. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
130 lines
4.9 KiB
Bash
130 lines
4.9 KiB
Bash
# ---------------------------------------------------------------------------
|
||
# Planer – Beispielkonfiguration
|
||
# Kopieren nach .env und ausfuellen. .env gehoert NIE ins Git.
|
||
# ---------------------------------------------------------------------------
|
||
|
||
# Welche Instanz laeuft hier? Steuert Provider, Integrationen und Routen.
|
||
# Erlaubt: firma | daheim
|
||
INSTANZ=daheim
|
||
|
||
# Oeffentliche Adresse der Anwendung, ohne abschliessenden Schraegstrich.
|
||
APP_URL=http://localhost:3000
|
||
|
||
# --- Datenbank -------------------------------------------------------------
|
||
# Muss zu den POSTGRES_*-Werten unten passen, wenn Docker Compose benutzt wird.
|
||
DATABASE_URL=postgresql://planer:bitte-aendern@localhost:5432/planer?schema=public
|
||
|
||
# Nur fuer docker compose: Zugangsdaten des Postgres-Containers.
|
||
POSTGRES_USER=planer
|
||
POSTGRES_PASSWORD=bitte-aendern
|
||
POSTGRES_DB=planer
|
||
|
||
# Nach aussen veroeffentlichte Ports. Aendern, wenn 5432 oder 3000 auf dem
|
||
# Rechner schon belegt sind; DATABASE_URL muss dann denselben Port nennen.
|
||
POSTGRES_PORT=5432
|
||
APP_PORT=3000
|
||
|
||
# --- Anmeldung -------------------------------------------------------------
|
||
# Signiert Sitzungen und Tokens. Erzeugen mit:
|
||
# openssl rand -base64 32
|
||
AUTH_SECRET=
|
||
|
||
# Hinter einem Reverse Proxy auf true setzen, damit Auth.js dem Host vertraut.
|
||
AUTH_TRUST_HOST=true
|
||
|
||
# Anmeldung per E-Mail und Passwort erlauben. In der Firma ueblicherweise
|
||
# false, damit nur ueber OIDC angemeldet wird.
|
||
ANMELDUNG_PASSWORT=true
|
||
|
||
# Erstes Verwaltungskonto, wird vom Seed angelegt. Ohne ADMIN_PASSWORT
|
||
# entsteht ein Konto ohne Passwort, das sich nur per OIDC oder Passkey
|
||
# anmelden kann. Nach der Einrichtung dürfen beide Werte wieder raus.
|
||
ADMIN_EMAIL=
|
||
ADMIN_PASSWORT=
|
||
|
||
# --- OIDC ------------------------------------------------------------------
|
||
# firma = Entra ID, daheim = authentik. Leer lassen schaltet OIDC ab.
|
||
# Der Rueckleit-URI beim Anbieter lautet:
|
||
# <APP_URL>/api/auth/callback/oidc
|
||
OIDC_NAME=
|
||
OIDC_ISSUER=
|
||
OIDC_CLIENT_ID=
|
||
OIDC_CLIENT_SECRET=
|
||
|
||
# --- Passkeys (WebAuthn) ---------------------------------------------------
|
||
# RP_ID ist die nackte Domain ohne Schema und Port, z. B. planer.example.de.
|
||
# Lokal ist "localhost" richtig.
|
||
WEBAUTHN_RP_ID=localhost
|
||
WEBAUTHN_RP_NAME=Planer
|
||
# Muss exakt der Herkunft im Browser entsprechen, inklusive Port.
|
||
WEBAUTHN_ORIGIN=http://localhost:3000
|
||
|
||
# --- Kalenderanbieter ------------------------------------------------------
|
||
# Graph gibt es in beiden Instanzen, Google nur daheim. Ein Anbieter erscheint
|
||
# erst, wenn Kennung UND Geheimnis gesetzt sind.
|
||
# Einrichtung siehe README, Abschnitt "Kalenderanbieter einrichten".
|
||
# Rueckleit-URIs:
|
||
# <APP_URL>/api/kalender/rueckleitung/graph
|
||
# <APP_URL>/api/kalender/rueckleitung/google
|
||
GRAPH_CLIENT_ID=
|
||
GRAPH_CLIENT_SECRET=
|
||
# Tenant-ID, oder "organizations" fuer jeden Arbeitsplatz-Tenant.
|
||
GRAPH_TENANT_ID=organizations
|
||
|
||
GOOGLE_CLIENT_ID=
|
||
GOOGLE_CLIENT_SECRET=
|
||
|
||
# --- Benachrichtigungen ----------------------------------------------------
|
||
# Beides ist freiwillig. Fehlt es, laeuft der Planer ohne Benachrichtigungen
|
||
# weiter und sagt es in den Einstellungen.
|
||
|
||
# Web-Push. Schluesselpaar einmalig erzeugen mit:
|
||
# npx web-push generate-vapid-keys
|
||
# Der oeffentliche Schluessel geht an den Browser, der private bleibt hier.
|
||
# Wird das Paar getauscht, muessen sich alle Geraete neu anmelden.
|
||
VAPID_OEFFENTLICH=
|
||
VAPID_PRIVAT=
|
||
# Kontakt fuer den Push-Dienst, als mailto: oder https:-Adresse.
|
||
VAPID_KONTAKT=
|
||
|
||
# E-Mail. Push braucht SMTP nicht und umgekehrt.
|
||
SMTP_HOST=
|
||
SMTP_PORT=587
|
||
SMTP_BENUTZER=
|
||
SMTP_PASSWORT=
|
||
# Absender, z. B. "Planer <planer@example.de>".
|
||
SMTP_ABSENDER=
|
||
# true bei Port 465 (SMTPS), false bei 587 mit STARTTLS.
|
||
SMTP_TLS=false
|
||
|
||
# --- Integrationen ---------------------------------------------------------
|
||
# Alles freiwillig. Was fehlt, erscheint unter "Integrationen" als nicht
|
||
# eingerichtet; der Rest laeuft weiter.
|
||
# Welche Integration eine Instanz ueberhaupt darf, entscheidet INSTANZ:
|
||
# Zammad und Wartungsplaner nur "firma", Telegram nur "daheim".
|
||
|
||
# Zammad (nur firma). Token in Zammad unter Profil > Token-Zugriff anlegen;
|
||
# er sieht genau das, was der zugehoerige Benutzer sehen darf.
|
||
ZAMMAD_URL=
|
||
ZAMMAD_TOKEN=
|
||
# Suchausdruck in Zammads Syntax. Was darauf passt, wird zur Aufgabe.
|
||
ZAMMAD_ABFRAGE=owner_id:me AND (state.name:new OR state.name:open)
|
||
|
||
# Telegram (nur daheim). Bot bei @BotFather anlegen, Token hier eintragen.
|
||
# Welche Chats mitreden duerfen, wird in der Anwendung gekoppelt.
|
||
TELEGRAM_TOKEN=
|
||
|
||
# Spiegel: firma sendet, daheim empfaengt. Dasselbe Geheimnis auf beiden
|
||
# Seiten, mindestens 32 Zeichen: openssl rand -base64 32
|
||
SPIEGEL_GEHEIMNIS=
|
||
# Nur auf der sendenden Seite (firma): die Adresse der anderen Instanz.
|
||
SPIEGEL_ZIEL=
|
||
|
||
# --- Sonstiges -------------------------------------------------------------
|
||
# Zeitzone fuer Anzeigen und Tagesgrenzen.
|
||
TZ=Europe/Berlin
|
||
|
||
# Nur fuer die Screenshot-Instanz. Schaltet den Demo-Kalenderprovider frei
|
||
# und darf in echten Umgebungen niemals true sein.
|
||
DEMO_MODUS=false
|