Appearance
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, einmaligLäuft täglich um 02:30 im Container admin-scheduler (withoutOverlapping).
Ablauf (admin/app/Console/Commands/ArchiveLogsCommand.php):
- Stichtag: Tagesbeginn vor
retention_daysTagen (Standard 30). - Sammeln: Einträge des Aktivitätsprotokolls älter als der Stichtag und
*.log-Dateien instorage/logs, deren Änderungszeit davor liegt (praktisch die rotierten Tageslogs). - ZIP schreiben nach
storage/app/…/log-archives/logs-bis-JJJJ-MM-TT-HHMMSS.zipmitaktivitaeten.csv(Semikolon, UTF-8 mit BOM) undlogs/*.log. - Mail „Protokoll-Archiv“ synchron an alle Empfänger. Anhang nur bis
max_attachment_mb(Standard 15 MB), sonst nur der Hinweis auf den Pfad. - 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.
- Abgeschlossene Excel-/CSV-Importläufe älter als der Stichtag samt hochgeladener Dateien löschen.
- Archive älter als
keep_archives_days(Standard 365) löschen.
Konfiguration admin/config/pim_logs.php:
| Schlüssel | Variable | Standard |
|---|---|---|
retention_days | LOG_RETENTION_DAYS | 30 |
recipients | LOG_ARCHIVE_RECIPIENTS (kommagetrennt) | leer |
keep_archives_days | LOG_ARCHIVE_KEEP_DAYS | 365 |
max_attachment_mb | LOG_ARCHIVE_MAX_ATTACHMENT_MB | 15 |
| 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.testPrü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.testMailversand 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.testVor dem Eintragen prüfen:
- Erreichbarkeit vom Host (
nc -zv <relay-ip> 25) und aus dem Container. Der Container hat keinnc:bashdocker 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/12kann 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.testBei 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).