Skip to content

Betrieb: Protokolle und Mail ​

Protokoll-Archiv: logs:archive ​

bash
php artisan logs:archive --dry-run      # zeigt, was passieren würde
php artisan logs:archive                # wie der nächtliche Lauf
php artisan logs:archive --days=60      # andere Aufbewahrung, einmalig

Läuft täglich um 02:30 im Container admin-scheduler (withoutOverlapping).

Ablauf (admin/app/Console/Commands/ArchiveLogsCommand.php):

  1. Stichtag: Tagesbeginn vor retention_days Tagen (Standard 30).
  2. Sammeln: Einträge des Aktivitätsprotokolls älter als der Stichtag und *.log-Dateien in storage/logs, deren Änderungszeit davor liegt (praktisch die rotierten Tageslogs).
  3. ZIP schreiben nach storage/app/…/log-archives/logs-bis-JJJJ-MM-TT-HHMMSS.zip mit aktivitaeten.csv (Semikolon, UTF-8 mit BOM) und logs/*.log.
  4. Mail „Protokoll-Archiv“ synchron an alle Empfänger. Anhang nur bis max_attachment_mb (Standard 15 MB), sonst nur der Hinweis auf den Pfad.
  5. Löschen der archivierten Aktivitäten und Logdateien. Das passiert auch, wenn die Mail scheitert; die ZIP-Datei ist dann die Kopie. Wird die ZIP-Datei nicht geschrieben, bleibt alles stehen.
  6. Abgeschlossene Excel-/CSV-Importläufe älter als der Stichtag samt hochgeladener Dateien löschen.
  7. Archive älter als keep_archives_days (Standard 365) löschen.

Konfiguration admin/config/pim_logs.php:

SchlüsselVariableStandard
retention_daysLOG_RETENTION_DAYS30
recipientsLOG_ARCHIVE_RECIPIENTS (kommagetrennt)leer
keep_archives_daysLOG_ARCHIVE_KEEP_DAYS365
max_attachment_mbLOG_ARCHIVE_MAX_ATTACHMENT_MB15
Disk / Ordner–local / log-archives

Empfänger sind die Adressen aus LOG_ARCHIVE_RECIPIENTS plus die unter Systemverwaltung → Systemmails → „Empfänger des Archivs“ eingetragenen, ohne Doppelte. Es gibt keinen automatischen Empfänger. Ohne Empfänger oder ohne echten Mailer warnt der Befehl nur; das Archiv liegt dann nur auf dem Server.

Folge für das Undo

Mit dem Löschen der alten Aktivitäten verschwindet auch die Möglichkeit, diese Änderungen im PIM rückgängig zu machen. Das ist beabsichtigt (Datensparsamkeit), sollte aber bekannt sein.

Testmail: mail:test ​

bash
php artisan mail:test empfaenger@example.test

Prüft die Adresse, gibt Mailer, Host und Port aus und schickt die Systemmail „Testmail“ sofort (nicht über die Queue). Ausgabe: „Testmail an … verschickt.“ oder „Testmail konnte nicht verschickt werden: …“.

Auf dem Server:

bash
cd ~/stacks/apps && docker compose exec admin php artisan mail:test empfaenger@example.test

Mailversand auf Produktion ​

Produktion verschickt über einen internen SMTP-Relay, der Absender anhand der IP-Adresse zulässt. Es gibt deshalb keine Zugangsdaten. Die Werte stehen nur in /var/www/admin/.env auf dem Server (vom rsync ausgeschlossen) und sind in admin/.env.example dokumentiert:

bash
MAIL_MAILER=smtp
MAIL_HOST=<relay-ip>
MAIL_PORT=25
MAIL_SCHEME=null
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_FROM_ADDRESS="noreply@example.test"
MAIL_FROM_NAME="matev PIM"
LOG_ARCHIVE_RECIPIENTS=archiv@example.test

Vor dem Eintragen prüfen:

  • Erreichbarkeit vom Host (nc -zv <relay-ip> 25) und aus dem Container. Der Container hat kein nc:
    bash
    docker compose exec admin php -r 'var_dump(@fsockopen("<relay-ip>", 25, $e, $s, 5), $s);'
  • Der Relay sieht wegen Docker-NAT die Host-IP. Die muss auf seiner Allowlist stehen.
  • Dockers Standard-Adresspool 172.16.0.0/12 kann mit dem Netz des Relays kollidieren. Prüfen: docker network inspect gateway.

Übernehmen: Die .env ist als einzelne Datei in den Container eingebunden, und Octane und die Worker halten die Konfiguration im Speicher. Daher alle drei Dienste neu erzeugen:

bash
docker compose up -d --force-recreate admin admin-queue admin-scheduler
docker compose exec admin php artisan mail:test empfaenger@example.test

Bei TLS- oder Zertifikatsfehlern: MAIL_AUTO_TLS=false ergänzen.

Absender: SystemMailComposer nimmt Absendername und -adresse aus den Systemmail-Einstellungen in der Datenbank und fällt nur ohne Eintrag auf MAIL_FROM_ADDRESS zurück. Der Relay (und SPF) muss diese Adresse annehmen.

Was mit funktionierendem Versand zusätzlich passiert:

  • Einladungen und Passwort-Zurücksetzen gehen als Mail raus statt als angezeigter Link.
  • Das nächtliche Protokoll-Archiv wird verschickt.
  • Im Profil steht die Anmeldung per E-Mail-Code als zweiter Faktor zur Wahl. Erzwungen wird sie nicht.

Die ausführliche Fassung steht in Deployment (Betrieb).