mivita/dev/betrieb/2026-10-08-protokoll-umstellung.md
Kevin Adametz 4274bff9e2 Composer-Sicherheitsupdates, dompdf 3, email-Regel ohne Zeilenumbrueche
- 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>
2026-10-08 12:50:31 +00:00

7 KiB
Raw Blame History

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
  • .git nach 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:run jede Minute, Benutzer ploi) — nicht in crontab -l
  • Branches payment/phase-r-payone-refactoring und wip/payment-phase-r-payone-refactoring-2026-09-28 gelöscht; gearbeitet wird auf master

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() ruft sendEmail() — Aufruf und Methode entfernen, emails/exception.blade.php prü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 audit meldet noch 3 Hinweise zu laravel/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 in AppServiceProvider, Test EmailRuleLineBreakTest) — 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.

  • PDF-Seitenzahlen (Befund beim dompdf-Update, schon vorher so): In pdf/invoice, delivery, credit und cancellation steht das page_script am Anfang des <body> und wirkt deshalb nur auf Seite 1 — „Seite x/y“ erscheint auf mehrseitigen Rechnungen nie. In credit_details* steht es am Ende und funktioniert. Außerdem fehlt die Übersetzung pdf.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/guzzle 7.15, league/commonmark 2.10, league/flysystem 3.36, maatwebsite/excel 3.1.70, phpoffice/phpspreadsheet 1.30.7, phpseclib/phpseclib 3.0.57, laravel/framework (11.x) und Abhängigkeiten.

  • barryvdh/laravel-dompdf 2.2 → 3.1 (dompdf 2.0 → 3.1). Rechnung, Lieferschein und Gutschrift-Details vorher/nachher verglichen: identisch. enable_remote ist jetzt standardmäßig aus — die PDF-Vorlagen laden Schriften lokal aus public/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.