- Patch-/Minor-Updates (guzzle, commonmark, flysystem, excel, phpspreadsheet, phpseclib, laravel/framework 11.x) - barryvdh/laravel-dompdf 3.1 (dompdf 3.1.6), Test fuer den PDF-Weg inkl. eingebettetem PHP und Briefpapier - Rueckport des Laravel-12.60-Fixes gegen CRLF in der email-Regel - Protokoll: Ergebnis composer audit, offene Punkte Laravel 12 und PDF-Seitenzahlen Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 KiB
Protokoll: Umstellung auf Git-Deploy und Betriebsüberwachung (07.–08.10.2026)
Stand: 08.10.2026 · Live auf v1.3.0 · Anleitung für den laufenden Betrieb: README.md
Ergebnis
| Bereich | Vorher | Jetzt |
|---|---|---|
| Deploy | SFTP mit Dateilisten | Git-Tag, bash dev/betrieb/deploy.sh vX.Y.Z (nur auf Live, bricht vor Änderungen ab) |
| Version | unbekannt | Datei RELEASE, php artisan about --only=mivita, Systemstatus |
| Queue | QUEUE_DRIVER=sync |
Horizon (Ploi-Daemon), QUEUE_DRIVER=redis, after_commit |
| Überwachung | keine | Sysadmin → Systemstatus, /health (Token) in Uptime Kuma, Scheduler-Herzschlag |
| Alarme | keine | Mail und ntfy-Push bei fehlgeschlagener geplanter Aufgabe oder Queue-Job (1×/h je Meldung) |
| Fehlerprotokoll | Exception-Mail je Fehler | GlitchTip (Server, Fehlersignale, Browser), Alert-Regel: Mail bei neuem Fehlertyp, nur production — dev/glitch-tip/README.md |
| Git-Repository | 7,2 GB, .env und Schlüssel in der Historie |
41 MB, Historie bereinigt |
Releases
| Tag | Inhalt |
|---|---|
v1.0.0 |
erster Git-Release: deploy.sh, Version aus RELEASE, public/vendor versioniert (ausgedünnt), Horizon vorbereitet |
v1.0.1 |
Live-Abgleich: Übersetzungen und Seiten (partner, ueber-uns, erreichbarkeit) von Live übernommen, Laufzeitdateien (storage/fonts, storage/reports, OAuth-Schlüssel) und public/phpinfo.php raus |
v1.1.0 |
Systemstatus im Sysadmin-Bereich, /health, Scheduler-Herzschlag |
v1.1.1 |
bootstrap/cache nicht mehr versioniert |
v1.2.0 |
Alarm-Mails, kurze withoutOverlapping-Sperren |
v1.2.1 |
bereinigte Git-Historie (alle Hashes neu), IDE-Helper-Dateien nicht mehr versioniert |
v1.2.2 |
deploy.sh nur bei APP_ENV=production, dev/app-bak entfernt |
v1.3.0 |
GlitchTip (Server, Fehlersignale, Browser), sentry/sentry-laravel; Tests ohne lokalen Datei-Cache |
v1.4.0 |
Composer-Sicherheitsupdates, dompdf 3, email-Regel lehnt Zeilenumbrüche ab |
Alle Tags vor dem 08.10. wurden beim Bereinigen der Historie neu erzeugt; Commit-Hashes in älteren
Notizen unter dev/ gehören zur alten Historie.
Erledigt auf dem Server
- Deploy-Key (nur lesen) für
forge.adametz.media, Host-Key geprüft, FPM-Reload ohne Passwort getestet - Live-Verzeichnis in einen Git-Checkout umgewandelt; Dateien nur auf Live nach
~/vor-git/verschoben .gitnach der Historien-Bereinigung neu aufgesetzt.env:MONITORING_HEALTH_TOKEN,QUEUE_DRIVER=redis; Zugangsdaten aus der früheren.env-Historie getauscht- Horizon als Ploi-Daemon, Worker-Prüfung grün
- Uptime Kuma prüft
/health(mit Token) .env: GlitchTip-DSNs,SENTRY_ENVIRONMENT=production, ntfy; Test-Exception und Browserfehler kamen an- Cron: Ploi-Eintrag in
/etc/cron.d/(schedule:runjede Minute, Benutzerploi) — nicht incrontab -l - Branches
payment/phase-r-payone-refactoringundwip/payment-phase-r-payone-refactoring-2026-09-28gelöscht; gearbeitet wird aufmaster
Aufräumen — ab 22.10.2026, wenn bis dahin nichts aufgefallen ist
Alles hier sind Sicherungen aus der Umstellung; nichts davon wird von der App benutzt.
Auf dem Server (ploi@mivita-prod):
rm -rf ~/git-alt-2026-10-08 # altes .git vor der Bereinigung (7 GB)
rm -rf ~/vor-git # Dateien, die nur auf Live lagen (alte Views, Duplikat-Migrationen, nikki-beach-Bilder, wartung.php, .phpinfo.php, cron_script.sh, Theme-Reste aus public/vendor, IDE-Dateien)
rm -f ~/live-abweichungen.tgz # Archiv für den Abgleich
rm -f ~/backup-vor-git-2026-10-07.tgz # Sicherung des Live-Verzeichnisses vor der Umwandlung
rm -f /home/ploi/mivita.care/storage/logs/scheduler.log # Diagnose-Log vom 07.10.
Auf dem Mac (im Projektordner, alles unter _work/, also nicht versioniert):
rm -rf _work/git-alt-2026-10-08 # altes .git vor der Bereinigung (7 GB)
rm -rf _work/mivita-clean.git # bereinigte Kopie, aus der gepusht wurde
rm -rf _work/live-abweichungen _work/live-abweichungen.tgz # Abgleich mit Live
rm -rf _work/migrations-duplikate # zwei doppelte Migrationen (Klassen-Konflikt), liegen auch in ~/vor-git
rm -f _work/status-vorher.txt # Git-Status vor dem Austausch von .git
In Forgejo und Gitea (NAS): Garbage Collection auslösen, falls noch nicht geschehen — erst dann
sind die alten Objekte (.env, Schlüssel, 10-GB-Datei) auch auf den Git-Servern weg.
Noch offen
-
Exception-Mails abschalten (ab 22.10.2026, nach zwei Wochen Parallelbetrieb mit GlitchTip):
App\Exceptions\Handler::report()ruftsendEmail()— Aufruf und Methode entfernen,emails/exception.blade.phpprüfen, ob sonst noch genutzt. Betriebs-Alarme (OperationalAlert) bleiben. -
Datenschutzerklärung: Fehlerprotokollierung aufnehmen (User-ID, URL, Browser, Fehlermeldung; eigener Server; Frist = Aufbewahrung in GlitchTip; berechtigtes Interesse) — neue Erklärung ist in Arbeit.
-
Laravel 12:
composer auditmeldet noch 3 Hinweise zularavel/framework— Fixes gibt es nur in 12.x/13.x, Laravel 11 bekommt keine Sicherheitsupdates mehr. Stand 08.10.:- CRLF in der
email-Regel (hoch): Fix aus 12.60 rückportiert (App\Support\Validation\Validator, registriert inAppServiceProvider, TestEmailRuleLineBreakTest) — nach dem Update entfernen. - Temporäre signierte URLs (mittel): betrifft nur
Storage::temporaryUrl()auf dem lokalen Disk — im Code nicht genutzt. - XSS auf der Debug-Seite (niedrig): nur mit
APP_DEBUG=true, auf Live aus.
Das Update auf Laravel 12 ist ein eigenes Paket.
- CRLF in der
-
PDF-Seitenzahlen (Befund beim dompdf-Update, schon vorher so): In
pdf/invoice,delivery,creditundcancellationsteht daspage_scriptam Anfang des<body>und wirkt deshalb nur auf Seite 1 — „Seite x/y“ erscheint auf mehrseitigen Rechnungen nie. Incredit_details*steht es am Ende und funktioniert. Außerdem fehlt die Übersetzungpdf.delivery_note_no(Lieferschein zeigt den Schlüssel).
Composer-Sicherheitshinweise (08.10.2026)
composer audit: 34 Hinweise in 8 Paketen → 3 in laravel/framework (siehe oben).
-
Patch-/Minor-Updates:
guzzlehttp/guzzle7.15,league/commonmark2.10,league/flysystem3.36,maatwebsite/excel3.1.70,phpoffice/phpspreadsheet1.30.7,phpseclib/phpseclib3.0.57,laravel/framework(11.x) und Abhängigkeiten. -
barryvdh/laravel-dompdf2.2 → 3.1 (dompdf 2.0 → 3.1). Rechnung, Lieferschein und Gutschrift-Details vorher/nachher verglichen: identisch.enable_remoteist jetzt standardmäßig aus — die PDF-Vorlagen laden Schriften lokal auspublic/fonts, Bilder per URL gibt es nicht. Test:tests/Feature/Pdf. -
Testsuite vorher und nachher: dieselben 88 vorbestehenden Fehlschläge, keine neuen.
-
Passport-Schlüssel (
storage/oauth-*.key) standen bis 08.10. in der Git-Historie. Falls sie nicht mit den Zugangsdaten getauscht wurden:php artisan passport:keys --force— alle API-Tokens werden ungültig.