Files
perinco-CRM/server/.env.example
T
Sascha WolfandClaude Opus 5 3c9d83161e chore(scanner): alte Scanner-App zurueckgebaut
Die eigenstaendige Vorgaenger-App unter scanner.perinco.de ist auf dem Server
entfernt: Unit project-scanner-backend (Port 5005), beide Apache-Vhosts, das
Let's-Encrypt-Zertifikat samt Renewal-Config, /var/www/Projekt Scanner (486 MB)
und die Datenbank project_scanner (Dump unter /root/backups). Damit entfallen
die LEGACY_*-Variablen und das Importskript, dessen Quelle es nicht mehr gibt.

/root/.cache/ms-playwright bleibt bewusst stehen: der Cache stammt aus der
Installation der alten App, liegt aber ausserhalb beider Verzeichnisse und wird
vom CRM-Scanner benutzt - playwright ist auf 1.60.0 gepinnt, damit es genau
dieser Build (chromium-1223) bleibt. Der Hinweis steht jetzt in README und
docs/06-betrieb.md, damit ihn beim naechsten Aufraeumen niemand mitnimmt.

SCANNER_SCHEDULER_OFFSET geht auf 0: der Versatz sollte verhindern, dass beide
Instanzen mit denselben Portal-Cookies gleichzeitig losziehen. Ohne zweite
Instanz hat er keinen Zweck mehr, die Mechanik bleibt fuer kuenftige Erststarts
im Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 17:45:42 +02:00

97 lines
3.6 KiB
Bash

# perinco CRM Backend
# Kopie als .env anlegen und Werte setzen. .env niemals committen.
PORT=5006
# Nur lokal binden - von aussen erreichbar ist die App ausschliesslich
# ueber den Apache-Reverse-Proxy.
HOST=127.0.0.1
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=changeme
DB_NAME=perinco_CRM
# Signiert die JWT-Sessions. Muss ein langer Zufallswert sein.
JWT_SECRET=changeme-langer-zufallswert
JWT_EXPIRES_IN=12h
# Wird beim ersten Start angelegt, falls noch kein Benutzer existiert.
ADMIN_USERNAME=admin
ADMIN_NAME=Administrator
ADMIN_EMAIL=admin@perinco.de
ADMIN_PASSWORD=changeme-starkes-passwort
# Das Diktat braucht hier keine Konfiguration: Whisper laeuft im Browser des
# Benutzers, eingestellt wird es im Reiter "Whisper" der Anwendung.
# ---------------------------------------------------------------------------
# Postfachanbindung Microsoft 365 (crm@perinco.de)
# ---------------------------------------------------------------------------
# Lesender Zugriff ueber Microsoft Graph mit App-only-Berechtigung
# (Client Credentials). Benoetigt wird in Entra genau eine
# Anwendungsberechtigung: Mail.Read, mit Administratorzustimmung. Kein
# Schreibzugriff, kein Redirect-URI, kein interaktiver Login.
#
# Fehlen diese Werte, startet das CRM normal - die Postfachanbindung meldet in
# den Einstellungen, welche Angabe fehlt, und der Abgleich bleibt aus.
#
# In Exchange Online zusaetzlich den Zugriff auf dieses eine Postfach begrenzen,
# sonst darf die App jedes Postfach im Tenant lesen:
# New-ApplicationAccessPolicy -AppId <MS_CLIENT_ID> `
# -PolicyScopeGroupId crm@perinco.de -AccessRight RestrictAccess `
# -Description "perinco CRM: nur crm@perinco.de"
MS_TENANT_ID=
MS_CLIENT_ID=
MS_CLIENT_SECRET=
MS_MAILBOX=crm@perinco.de
# Ordner im Postfach. "inbox" ist ein von Graph vorgegebener Name.
# MS_MAIL_FOLDER=inbox
# Hintergrundabgleich. Standard ist AN; nur "false" schaltet ihn hart ab.
# Intervall, Zeitraum und automatische Kontaktuebernahme stehen dagegen in den
# Einstellungen der Anwendung (Tabelle crm_settings).
MAIL_SYNC=true
# Bremse fuer den Erstabgleich: so viele Delta-Seiten holt ein Lauf hoechstens.
# Der naechste Lauf setzt an derselben Stelle fort.
# MAIL_MAX_PAGES=20
# Obergrenze fuer den gespeicherten Mailtext je Nachricht (Zeichen).
# MAIL_MAX_BODY_CHARS=400000
# ---------------------------------------------------------------------------
# Projekt Scanner (portiert)
# ---------------------------------------------------------------------------
# Eigene Datenbank, eigener Schluessel, eigenes Upload-Verzeichnis, eigener
# Scheduler. Die eigenstaendige Vorgaenger-App wurde am 09.09.2026
# zurueckgebaut, es gibt keine zweite Instanz mehr.
# Wird beim Start automatisch angelegt, falls sie fehlt.
SCANNER_DB_NAME=perinco_scanner
# SCANNER_DB_HOST=localhost
# SCANNER_DB_PORT=3306
# SCANNER_DB_USER=root
# SCANNER_DB_PASSWORD=
# Schluessel fuer die Portal-Passwoerter (AES).
# Langer Zufallswert, z. B.: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
SCANNER_ENCRYPTION_KEY=
# Verzeichnis fuer die CV-PDFs. Leer = <server>/uploads.
SCANNER_UPLOAD_DIR=
# Hintergrund-Scraper (Playwright + OpenAI). Standard ist AN; nur "false"
# schaltet ihn ab.
SCANNER_SCHEDULER=true
# Minuten Versatz fuer den allerersten Lauf. Stammt aus dem Parallelbetrieb mit
# der alten App und ist seit deren Rueckbau ohne Wirkung, solange in der
# Datenbank ein last_scan_at steht - der traegt den Zeitplan ueber Neustarts.
# 0 = sofort loslegen.
SCANNER_SCHEDULER_OFFSET=0
# Fallback fuer den OpenAI-Key; bevorzugt wird der Wert aus den Einstellungen.
# OPENAI_API_KEY=