MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m4s
- Per-user routing (own mail / own Discord webhook) for task alarms
(sent at once), shares, completed shared tasks and watched tasks;
settings as JSON on the user (GET /auth/me, PATCH /auth/settings).
- Everything but alarms is queued and sent as one message per user
after NOTIFY_DIGEST_MINUTES (default 5); mails now multipart with an
HTML version, Discord as one embed. Three failed attempts drop it.
- Own changes never notify the actor, except on watched tasks when
asked for; "paused" stops everything including alarms.
- Task watchers: POST/DELETE /tasks/{id}/watch, isWatching on tasks.
- Daily summary at a chosen time: overdue, today, tomorrow, plus the
count of the next 7 days; nothing due, nothing sent.
- Migration 7; jobs do not run in the demo.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
132 lines
7.7 KiB
Bash
132 lines
7.7 KiB
Bash
# MindSift – Einstellungen
|
||
# Kopieren nach .env (cp .env.example .env) und anpassen; docker-compose.yml liest die Werte von dort.
|
||
# Leer gelassene Werte nehmen den Standard aus docker-compose.yml. Nach Änderungen: docker compose up -d
|
||
|
||
# ─── Grundeinstellungen ────────────────────────────────────────────────────────────────────────────
|
||
|
||
# Port auf dem Host, unter dem MindSift erreichbar ist (im Container immer 8080).
|
||
PORT=8080
|
||
|
||
# Geheimer Schlüssel für die Anmeldung, mindestens 32 zufällige Zeichen, z. B. von: openssl rand -hex 32
|
||
# Bekannte Beispielwerte (wie dieser) werden ignoriert; dann erzeugt MindSift selbst einen und legt ihn in data/ ab..
|
||
JWT_SECRET=change_this_to_a_secure_random_key_min_32_chars
|
||
|
||
# Öffentliche Adresse der Instanz, so wie sie im Browser aufgerufen wird. Wird für Links in E-Mails
|
||
# (Passwort zurücksetzen) gebraucht und beschränkt, von welcher Adresse Live-Verbindungen kommen dürfen.
|
||
BASE_URL=http://localhost:8080
|
||
|
||
# Zeitzone für Fälligkeiten und Alarme (Standard Europe/Berlin).
|
||
TZ=Europe/Berlin
|
||
|
||
# true = jeder darf sich ein Konto anlegen; false = nur mit Einladungscode vom Admin.
|
||
# Lässt sich später in Administration → Server & Isolation ändern.
|
||
ALLOW_REGISTRATION=false
|
||
|
||
# ─── Sicherheit ────────────────────────────────────────────────────────────────────────────────────
|
||
|
||
# Wessen Angaben zur Besucher-Adresse (X-Forwarded-For / X-Real-IP) geglaubt werden. Wichtig für die
|
||
# Login-Sperre hinter einem Reverse-Proxy.
|
||
# private Proxys im lokalen Netz, Docker-Netz oder Tailscale (Standard, passt für die meisten Setups)
|
||
# none keinem Proxy glauben (MindSift direkt im Internet)
|
||
# all jedem glauben (schaltet die Prüfung ab)
|
||
# Liste zusätzlich eigene Adressen, z. B. private,203.0.113.0/24 (Cloudflare und andere externe Proxys)
|
||
TRUSTED_PROXIES=private
|
||
|
||
# Sperre nach Fehlversuchen beim Login und Limits für Registrierung und „Passwort vergessen“.
|
||
# false schaltet beides ab (nur sinnvoll, wenn ein vorgeschalteter Dienst das übernimmt).
|
||
LOGIN_PROTECTION=true
|
||
|
||
# ─── Protokoll ─────────────────────────────────────────────────────────────────────────────────────
|
||
|
||
# Wie ausführlich das Container-Log ist: debug, info, warn oder error.
|
||
LOG_LEVEL=info
|
||
# true = ausführliches Protokoll aller Anfragen und der Synchronisation (wie LOG_LEVEL=debug).
|
||
DEBUG=false
|
||
|
||
# ─── Demo ──────────────────────────────────────────────────────────────────────────────────────────
|
||
|
||
# true = öffentliche Demo: legt die Konten admin/admin und user/user mit Beispieldaten an. Die Demo
|
||
# verschickt nichts (keine Mails, Webhooks, Alarme) und schützt die gemeinsam genutzten Konten.
|
||
MINDA_DEMO=false
|
||
# Nur in der Demo: alle so viele Minuten auf die Beispieldaten zurücksetzen (0 = nie).
|
||
DEMO_RESET_MINUTES=20
|
||
|
||
# ─── E-Mail (optional) ─────────────────────────────────────────────────────────────────────────────
|
||
# Für Alarm-Mails und „Passwort vergessen“. Lässt sich alternativ in Administration → E-Mail einstellen;
|
||
# Werte dort haben Vorrang.
|
||
|
||
# Mailserver, z. B. smtp.example.com. Leer = kein Mailversand.
|
||
SMTP_HOST=
|
||
# 587 (STARTTLS) oder 465 (TLS ab Verbindungsbeginn).
|
||
SMTP_PORT=587
|
||
# Anmeldung am Mailserver; leer, wenn der Server keine verlangt.
|
||
SMTP_USER=
|
||
SMTP_PASS=
|
||
# Absenderadresse, z. B. noreply@example.com. Leer = SMTP_USER bzw. noreply@mindsift.local.
|
||
SMTP_FROM=
|
||
# Name, den Mailprogramme als Absender zeigen (wenn SMTP_FROM nur eine Adresse ist).
|
||
# Ein Name direkt in SMTP_FROM ("Mein Dienst <noreply@example.com>") hat Vorrang.
|
||
SMTP_FROM_NAME=MindSift
|
||
# Benachrichtigungen (Freigaben, beobachtete Aufgaben …) werden gesammelt und höchstens alle so viele
|
||
# Minuten als eine Nachricht verschickt. Fällige Aufgaben kommen immer sofort.
|
||
NOTIFY_DIGEST_MINUTES=5
|
||
# true = nur verschlüsselt senden.
|
||
SMTP_TLS=true
|
||
# true = selbstsignierte Zertifikate akzeptieren (nur für interne Mailserver).
|
||
SMTP_SKIP_VERIFY=false
|
||
|
||
# ─── Impressum und Datenschutz (optional) ──────────────────────────────────────────────────────────
|
||
# Werden auf der Anmeldeseite und in den Einstellungen verlinkt. Entweder als Link auf eine externe
|
||
# Seite (nur http/https) oder als Markdown-Text, direkt hier oder als Datei (per Volume einbinden).
|
||
# Ohne Angaben bleiben die Links unsichtbar.
|
||
LEGAL_IMPRINT_URL=
|
||
LEGAL_PRIVACY_URL=
|
||
LEGAL_IMPRINT_CONTENT=
|
||
LEGAL_PRIVACY_CONTENT=
|
||
# Pfad im Container, z. B. /legal/impressum.md
|
||
LEGAL_IMPRINT_CONTENT_FILE=
|
||
LEGAL_PRIVACY_CONTENT_FILE=
|
||
|
||
# ─── Bilder und Audio in Notizen ───────────────────────────────────────────────────────────────────
|
||
# Dateien liegen in data/media/ und sind nur für Personen sichtbar, die die Notiz lesen dürfen. Nicht mehr
|
||
# verwendete Dateien räumt MindSift nach einem Tag selbst weg.
|
||
|
||
# Größtes Bild in MB (der Browser verkleinert Fotos vorher auf höchstens 2048 Pixel).
|
||
MEDIA_MAX_IMAGE_MB=15
|
||
# Größte Audiodatei in MB (Sprachnotiz oder hochgeladene Datei).
|
||
MEDIA_MAX_AUDIO_MB=50
|
||
# Speicherplatz für Medien pro Person in MB; 0 = unbegrenzt.
|
||
MEDIA_QUOTA_MB=0
|
||
# Nur in der Demo: größte Datei in MB (Dateien verschwinden beim Demo-Reset).
|
||
MEDIA_DEMO_MAX_MB=3
|
||
|
||
# ─── Spracherkennung (optional) ────────────────────────────────────────────────────────────────────
|
||
# Ohne STT_URL nutzt MindSift die Spracherkennung des Browsers (Chrome, Edge, Safari; die Aufnahme geht
|
||
# dabei an Google, Microsoft bzw. Apple). Mit eigenem Whisper-Server bleibt alles auf deinem Server und
|
||
# es funktioniert in allen Browsern. Dazu den Block „whisper“ in docker-compose.yml einkommentieren
|
||
# (Anleitung steht dort). Fehler stehen im Log: docker compose logs mindsift whisper
|
||
|
||
# Adresse des Whisper-Servers (OpenAI-kompatibel, z. B. speaches). Gesetzt = Server-Modus.
|
||
STT_URL=
|
||
# Modell: deepdml/faster-whisper-large-v3-turbo-ct2 (beste Erkennung, ca. 2 GB RAM, langsamer)
|
||
# Systran/faster-whisper-small (ca. 1 GB RAM, deutlich schneller, kleine Fehler)
|
||
STT_MODEL=deepdml/faster-whisper-large-v3-turbo-ct2
|
||
# Sprachcode, z. B. de oder en; auto = automatisch erkennen.
|
||
STT_LANGUAGE=de
|
||
# Nur falls der Whisper-Server einen Schlüssel verlangt (bei speaches: dessen API_KEY).
|
||
STT_API_KEY=
|
||
# true = Mikrofon überall ausblenden, auch die Browser-Erkennung.
|
||
STT_DISABLED=false
|
||
|
||
# Schutzwerte für den Server-Modus
|
||
# Längste Aufnahme in Sekunden; danach beendet der Browser die Aufnahme selbst.
|
||
STT_MAX_SECONDS=600
|
||
# Größte Aufnahme in MB.
|
||
STT_MAX_UPLOAD_MB=25
|
||
# Wie viele Erkennungen gleichzeitig laufen; weitere warten in der Schlange. 1 schont schwache CPUs.
|
||
STT_MAX_PARALLEL=1
|
||
# Erkennungen pro Person und Stunde.
|
||
STT_PER_USER_PER_HOUR=60
|
||
# Höchstdauer einer Erkennung in Sekunden, Warten in der Schlange eingeschlossen.
|
||
STT_TIMEOUT_SECONDS=120
|