docs: echte Umlaute in der Dokumentation
893 Stellen in Fliesstext, Tabellen und Mermaid-Beschriftungen. Dazu die sichtbaren ss-Fälle (ausschließlich, groß, außen, schließt, heißt, draußen, weiße, anstoßen, Straße). Nicht angetastet, damit die Doku weiter beschreibt, was wirklich in der Datenbank steht: - Codeblöcke und Code-Spans - dort stehen Bezeichner, SQL, Enum-Werte und Dateinamen: `mail_pool`, `'uebernommen'`, `extract.js` - in Mermaid nur der Text in Anführungszeichen; Knotennamen, Pfeile und Werte wie source = 'Mail' bleiben, wie sie sind - `empfaenger` im ER-Diagramm von crm_mail_contact_candidates: die Aufzählung dort nennt die Datenbankwerte, nicht die Anzeige Die Menü-Skizze in der Benutzeranleitung zeigt jetzt die aufgeklappten Kontakte mit "Aus Mails" samt Zähler. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
8b7ce448a6
commit
7973dc07b1
+22
-22
@@ -26,7 +26,7 @@ powershell -File deploy/deploy.ps1 -SkipBuild # ohne neuen Build
|
||||
|
||||
Das Passwort kommt aus `$env:PERINCO_CRM_SSH_PASSWORD` oder per `-Password`.
|
||||
|
||||
`deploy.ps1` laedt die systemd-Unit **nicht** mit hoch. Nach Aenderungen an
|
||||
`deploy.ps1` lädt die systemd-Unit **nicht** mit hoch. Nach Änderungen an
|
||||
`deploy/perinco-crm-backend.service` von Hand kopieren und `daemon-reload`.
|
||||
|
||||
## Dienste auf dem Server
|
||||
@@ -34,14 +34,14 @@ Das Passwort kommt aus `$env:PERINCO_CRM_SSH_PASSWORD` oder per `-Password`.
|
||||
| Unit | Verzeichnis | Port | Anmerkung |
|
||||
| --- | --- | --- | --- |
|
||||
| `perinco-crm-backend` | `/var/www/perinco_CRM/server` | 5006 | `MemoryMax=1536M` |
|
||||
| `project-scanner-backend` | `/var/www/Projekt Scanner/backend` | 5005 | alte App, laeuft bis zur Ablosung |
|
||||
| `project-scanner-backend` | `/var/www/Projekt Scanner/backend` | 5005 | alte App, läuft bis zur Ablosung |
|
||||
|
||||
Der Verzeichnisname der alten App enthaelt ein **Leerzeichen**. In Skripten und in
|
||||
der `.env` immer in Anfuehrungszeichen setzen - systemd liest `.env` als
|
||||
Der Verzeichnisname der alten App enthält ein **Leerzeichen**. In Skripten und in
|
||||
der `.env` immer in Anführungszeichen setzen - systemd liest `.env` als
|
||||
`EnvironmentFile` und trennt sonst am Leerzeichen.
|
||||
|
||||
`MemoryMax=1536M` statt der urspruenglichen 512M: ein Scan-Lauf startet Chromium
|
||||
als Kindprozess in derselben cgroup. Mit 512M wuerde der OOM-Killer das Backend
|
||||
`MemoryMax=1536M` statt der ursprünglichen 512M: ein Scan-Lauf startet Chromium
|
||||
als Kindprozess in derselben cgroup. Mit 512M würde der OOM-Killer das Backend
|
||||
mitten im Scrapen beenden.
|
||||
|
||||
## Umgebungsvariablen
|
||||
@@ -50,21 +50,21 @@ mitten im Scrapen beenden.
|
||||
|
||||
| Variable | Bedeutung |
|
||||
| --- | --- |
|
||||
| `PORT`, `HOST` | `5006`, `127.0.0.1` - von aussen nur ueber Apache |
|
||||
| `PORT`, `HOST` | `5006`, `127.0.0.1` - von außen nur über Apache |
|
||||
| `DB_*` | Verbindung zu `perinco_CRM` |
|
||||
| `JWT_SECRET`, `JWT_EXPIRES_IN` | Signatur der Sitzungen, Standard 12 h |
|
||||
| `ADMIN_*` | wird beim ersten Start angelegt, nur wenn `crm_users` leer ist |
|
||||
| `SCANNER_DB_NAME` | eigene Scanner-Datenbank, Standard `perinco_scanner` |
|
||||
| `SCANNER_ENCRYPTION_KEY` | AES-Schluessel fuer Portal-Passwoerter |
|
||||
| `SCANNER_ENCRYPTION_KEY` | AES-Schlüssel für Portal-Passwörter |
|
||||
| `SCANNER_UPLOAD_DIR` | CV-Verzeichnis, leer = `<server>/uploads` |
|
||||
| `SCANNER_SCHEDULER` | Hintergrund-Scraper, Standard an, nur `false` schaltet ab |
|
||||
| `SCANNER_SCHEDULER_OFFSET` | Minuten Versatz fuer den ersten Lauf, Standard 30 |
|
||||
| `LEGACY_*` | Quelle fuer `npm run scanner:import` |
|
||||
| `SCANNER_SCHEDULER_OFFSET` | Minuten Versatz für den ersten Lauf, Standard 30 |
|
||||
| `LEGACY_*` | Quelle für `npm run scanner:import` |
|
||||
| `MS_TENANT_ID`, `MS_CLIENT_ID`, `MS_CLIENT_SECRET` | App-only-Zugriff auf Microsoft Graph |
|
||||
| `MS_MAILBOX` | abzugleichendes Postfach, Standard `crm@perinco.de` |
|
||||
| `MS_MAIL_FOLDER` | Ordner, Standard `inbox` |
|
||||
| `MAIL_SYNC` | Postfachabgleich, Standard an, nur `false` schaltet ab |
|
||||
| `MAIL_MAX_PAGES`, `MAIL_MAX_BODY_CHARS` | Bremsen fuer Erstabgleich und Textgroesse |
|
||||
| `MAIL_MAX_PAGES`, `MAIL_MAX_BODY_CHARS` | Bremsen für Erstabgleich und Textgröße |
|
||||
|
||||
Die Scanner-Datenbank wird beim Start automatisch angelegt
|
||||
(`CREATE DATABASE IF NOT EXISTS`), Tabellen kommen aus `sequelize.sync()`, Portale
|
||||
@@ -75,16 +75,16 @@ Fehlen die `MS_*`-Werte, startet das Backend normal und protokolliert
|
||||
*Postfach* nennen die fehlende Variable beim Namen. Einrichtung in Entra und
|
||||
Exchange Online: [11 Postfachanbindung](11-postfach.md).
|
||||
|
||||
> Die `MS_*`-Werte werden **beim Start** gelesen. Nach einer Aenderung an der
|
||||
> `.env` muss der Dienst neu starten, ein Speichern in der Oberflaeche genuegt
|
||||
> Die `MS_*`-Werte werden **beim Start** gelesen. Nach einer Änderung an der
|
||||
> `.env` muss der Dienst neu starten, ein Speichern in der Oberfläche genügt
|
||||
> nicht - dort liegen nur Intervall, Schalter und Zeitraum (`crm_settings`).
|
||||
|
||||
## Playwright
|
||||
|
||||
`playwright` ist auf **exakt 1.60.0** gepinnt - dieselbe Version wie die alte App.
|
||||
Deren Chromium-Build (`chromium-1223`) liegt in `/root/.cache/ms-playwright`, also
|
||||
faellt kein zweiter Browser-Download an. Ein `^` in der Version wuerde das
|
||||
aufgeben; die Begruendung steht als `comments`-Feld in `server/package.json`.
|
||||
fällt kein zweiter Browser-Download an. Ein `^` in der Version würde das
|
||||
aufgeben; die Begründung steht als `comments`-Feld in `server/package.json`.
|
||||
|
||||
Fehlt der Browser, funktioniert alles ausser Scan-Lauf und Verbindungstest:
|
||||
|
||||
@@ -103,16 +103,16 @@ systemctl restart perinco-crm-backend
|
||||
```
|
||||
|
||||
> **Reihenfolge:** Der Import schreibt `search_interval` aus der alten App in die
|
||||
> Einstellungen. Der laufende Scheduler merkt die Aenderung binnen einer Minute
|
||||
> Einstellungen. Der laufende Scheduler merkt die Änderung binnen einer Minute
|
||||
> und plant sich neu - beim Rollout hat er direkt nach dem Import einen Scan
|
||||
> gestartet, den der folgende Restart mitten im Scrapen beendet hat. Harmlos, aber
|
||||
> vermeidbar: erst neu starten, dann importieren.
|
||||
|
||||
## Stoerungssuche
|
||||
## Störungssuche
|
||||
|
||||
| Symptom | Blick darauf |
|
||||
| --- | --- |
|
||||
| Anmeldung schlaegt fehl | `journalctl -u perinco-crm-backend -n 50`, `JWT_SECRET` gesetzt? |
|
||||
| Anmeldung schlägt fehl | `journalctl -u perinco-crm-backend -n 50`, `JWT_SECRET` gesetzt? |
|
||||
| Scanner-Reiter leer, 500er | `[Scanner] Datenbank nicht erreichbar` im Journal |
|
||||
| Kein Treffer trotz Scan | `scanning_active`, aktive Agenten mit CV, OpenAI-Key gesetzt |
|
||||
| Portal `expired` | Cookies neu importieren (Cookie-Editor) |
|
||||
@@ -120,9 +120,9 @@ systemctl restart perinco-crm-backend
|
||||
| Backend stirbt beim Scrapen | `MemoryMax` zu klein, `systemctl show ... -p MemoryCurrent` |
|
||||
| Ton bleibt aus | Schwellenwert, Dashboard-Ansicht offen, einmal auf der Seite geklickt? |
|
||||
| Keine Mails im Postfachreiter | `journalctl -u perinco-crm-backend \| grep '\[Mail\]'`, dann Verbindungstest in den Einstellungen |
|
||||
| Mail-Abgleich meldet `ErrorAccessDenied` | Administratorzustimmung fuer `Mail.Read` fehlt, oder die ApplicationAccessPolicy erlaubt das Postfach nicht |
|
||||
| Mail-Abgleich meldet `ErrorAccessDenied` | Administratorzustimmung für `Mail.Read` fehlt, oder die ApplicationAccessPolicy erlaubt das Postfach nicht |
|
||||
|
||||
Nuetzliche Abfragen:
|
||||
Nützliche Abfragen:
|
||||
|
||||
```bash
|
||||
systemctl status perinco-crm-backend
|
||||
@@ -151,6 +151,6 @@ mysqldump -u"$DB_USER" -p"$DB_PASSWORD" "$SCANNER_DB_NAME" > scanner_$(date +%F)
|
||||
tar czf uploads_$(date +%F).tar.gz -C /var/www/perinco_CRM/server uploads
|
||||
```
|
||||
|
||||
Die `.env` gehoert **nicht** ins Repository, aber in die Sicherung - ohne
|
||||
`SCANNER_ENCRYPTION_KEY` sind die Portal-Passwoerter verloren. Genau das ist der
|
||||
Die `.env` gehört **nicht** ins Repository, aber in die Sicherung - ohne
|
||||
`SCANNER_ENCRYPTION_KEY` sind die Portal-Passwörter verloren. Genau das ist der
|
||||
alten App passiert.
|
||||
|
||||
Reference in New Issue
Block a user