dev: Git-Deploy live seit v1.1.3 (06.10.2026) — Protokoll, Befunde der Umwandlung, Runbook §10 und GlitchTip-Doku angepasst

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-06 13:43:01 +00:00
parent 2a61122b11
commit 5782297dca
3 changed files with 38 additions and 15 deletions

View file

@ -372,10 +372,11 @@ Newsroom-Übersicht, eine alte PM-Detailseite (lädt Bild + Anhang?), Firmenlogo
## 10. Betrieb nach Go-Live (Stand 20.07.2026 — System ist LIVE)
Live-Setup: Hetzner-Cloud-Server via **Ploi**, App unter `~/pressekonto.com`,
Deploys liefen bis `v1.1.0` per **SFTP-Datei-Upload**. **Ab `v1.1.1` per Git-Tag**
Deploys liefen bis `v1.1.0` per **SFTP-Datei-Upload**. **Seit `v1.1.3` (06.10.2026) per Git-Tag**
mit `dev/betrieb/deploy.sh`; Ablauf, einmalige Umstellung und Rollback in
`dev/betrieb/git-deploy.md`. Die SFTP-Checkliste unten gilt nur noch bis zur
Umstellung. Echte Domains
`dev/betrieb/git-deploy.md`. Die SFTP-Checkliste unten ist historisch. Auf
Live nichts mehr per SFTP in `~/pressekonto.com` ablegen, auch keine Doku, sonst
stoppt der nächste Deploy an der Abweichungsprüfung. Echte Domains
(pressekonto.com, presseecho.de, businessportal24.com) inkl. www-DNS geschaltet,
Stripe im Live-Mode, `legacy:verify` 0 failures. Migration/Cutover: erledigt,
Doku archiviert unter `dev/archive/optimize/cutover-runbook.md`.

View file

@ -1,6 +1,6 @@
# Git-Deploy
**Stand:** 06.10.2026 · **Status:** vorbereitet, Umstellung steht aus (erstes Release über Git: `v1.1.1`)
**Stand:** 06.10.2026 · **Status:** umgestellt am 06.10.2026, erster Git-Deploy `v1.1.3` (Protokoll unten)
Bis `v1.1.0` gingen Deploys als Paket per SFTP auf den Server
([`deploy-v1.1.0.md`](deploy-v1.1.0.md)). Künftig ist `~/pressekonto.com` ein
@ -37,7 +37,8 @@ Git-Checkout, und ausgeliefert wird ein Tag aus `origin`.
cat ~/.ssh/forge_pressekonto.pub
```
3. `~/.ssh/config` ergänzen:
3. `~/.ssh/config` anlegen bzw. ergänzen (`chmod 600 ~/.ssh/config`). Ploi verwaltet nur
`authorized_keys`, die Datei kommt ihm nicht in die Quere:
```
Host forge.adametz.media
@ -173,17 +174,35 @@ beides für den alten Tag neu auf. Migrationen sind additiv. Der alte Code läuf
mit den neuen Spalten, ein `migrate:rollback` gibt es auf Live nicht. Nur bei
Datenproblemen das DB-Backup einspielen und danach Runbook Abschnitt 9 (Archiv) befolgen.
## F — Erste Umstellung mit `v1.1.1`
## F — Erste Umstellung (erledigt 06.10.2026)
`v1.1.1` dient nur dazu, den neuen Weg zu testen. Das Release enthält keine
Migration und keine Fachänderung.
Gedacht war `v1.1.1` als reines Test-Release. Live ging direkt `v1.1.3`. Dazwischen
lagen ein Hotfix (`v1.1.2`) und ein Fehler, der erst bei der Umwandlung auffiel (`v1.1.3`).
| Schritt | Inhalt |
|---|---|
| lokal | `/public/build` aus der `.gitignore`; `deploy.sh`, diese Datei und Runbook §10 committen; Doku-Commits seit `v1.1.0`; Build-Commit; Tag `v1.1.1`; Push auf beide Remotes |
| Server | A (Zugang), B (Umwandlung auf `v1.1.0`), dann `bash dev/betrieb/deploy.sh v1.1.1` |
| Prüfung | D 17. Zusätzlich `git status --porcelain`: Bis `v1.1.0` war `public/build` ignoriert, ab `v1.1.1` ist es versioniert. Alte Build-Reste auf Live (z. B. `public/build/admin/`, `public/build/assets/`, `public/build/manifest.json` aus der stillgelegten `vite.config.js`) erscheinen erst jetzt als `??`. Nach `~/vor-git/` verschieben, sonst bricht der nächste Deploy an der Abweichungsprüfung ab. |
| danach | `~/deploy-v1.1.0.tgz`, `~/backup-vor-v1.1.0.tgz` und nach ein paar stabilen Tagen `~/backup-vor-git.tgz` löschen |
Was bei der Umwandlung (B) auftrat, für den Fall, dass ein weiterer Server so umgestellt wird:
- **Auf Live fehlte die `.gitignore`**, sie war nie im Paket. Deshalb zeigte Schritt 9
auch `.env`, `vendor/`, `storage/` und `public/build` als `??`. Nach dem Checkout
verschwinden diese Zeilen.
- **Pfade mit Umlauten oder Leerzeichen** gibt Git in Anführungszeichen aus. Sie rutschen
am Filter in Schritt 9 vorbei. Das betraf nur Entwicklerdateien.
- **Per SFTP gelöschte Dateien liegen noch auf Live.** Gefunden wurde
`app/Actions/Fortify/UpdateUserProfileInformation.php` (seit 18.09. gelöscht). Sie ist
nach `~/vor-git/` verschoben.
- **Eigene Flux-Icons waren nie im Repository.** Das macOS-Muster `Icon` in der `.gitignore`
traf wegen `core.ignorecase` auch `resources/views/flux/icon/`. Behoben in `v1.1.3`.
Für den ersten Deploy war der Ordner per `.git/info/exclude` ausgeblendet, damit der
Checkout die identischen Dateien aus dem Tag übernimmt.
- **Doku war nach dem Checkout noch per SFTP hochgeladen worden** (`dev/betrieb/`). Die
Abweichungsprüfung hat den Deploy gestoppt, bevor etwas verändert war. Die Dateien sind
nach `~/vor-git/` gesichert und auf den Repo-Stand zurückgesetzt.
- **`deploy.sh` gab es in `v1.1.0` noch nicht.** Beim ersten Mal lief es aus dem Tag:
`git show v1.1.3:dev/betrieb/deploy.sh > /tmp/deploy.sh && bash /tmp/deploy.sh v1.1.3`.
- **Alte Build-Dateien** tauchten nach dem Deploy als `??` auf. Bis `v1.1.0` war
`public/build` ignoriert. Sie sind als `~/vor-git/build-reste.tgz` gesichert und entfernt.
Aufräumen nach ein paar stabilen Tagen: `~/deploy-v1.1.0.tgz`,
`~/backup-vor-v1.1.0.tgz`, `~/backup-vor-git.tgz`, `~/vor-git/`.
## Später: Changelog
@ -200,3 +219,6 @@ Ausfall des Anbieters keinen Deploy abbricht.
|---|---|---|
| 06.10.2026 | Vorbereitung | `origin` auf Forgejo (Hetzner) umgestellt, NAS als zweites Remote, Push erledigt. `deploy.sh` gegen ein simuliertes Repository geprüft: Abbruch bei neuen Migrationen ohne Option, Deploy, wiederholter Aufruf, Rollback, unbekannter Tag, Fehler mitten im Lauf. Die Umwandlung eines bestehenden Verzeichnisses (B) wurde ebenso simuliert: Abweichungen werden sichtbar, `.env` und ungetrackte Dateien bleiben, ignorierte Builds werden beim Checkout überschrieben. |
| 06.10.2026 | `v1.1.1` lokal | `/public/build` versioniert. Alte Build-Reste von 2025 lokal entfernt (nicht mehr referenziert). Suite 2.316 grün, einer übersprungen (parallel, 96 s); Larastan ohne Meldung. Build-Commit und Tag `v1.1.1` gesetzt, Push auf `origin`/`NAS` nach Freigabe. |
| 06.10.2026 | `v1.1.2` | Hotfix nach GlitchTip-Auswertung (anderer Chat). Gepusht ohne Tags, Tags mit `git push origin --tags` nachgeholt. Künftig `--follow-tags`. |
| 06.10.2026 | Umwandlung Live (A, B) | Server-Zugang zu Forgejo per Deploy-Key (nur lesen). Git 2.43. Befunde siehe F: fehlende `.gitignore`, Altdatei Fortify, Flux-Icons nicht im Repository. |
| 06.10.2026 | `v1.1.3` | `.gitignore`-Muster `Icon` korrigiert, vier Icons versioniert. Erster Git-Deploy `v1.1.0` → `v1.1.3`: keine Migration, Composer „Nothing to install", Caches, Worker, FPM ohne Fehler, Version `v1.1.3`. Danach alte Build-Dateien entfernt. `v1.1.1` und `v1.1.2` waren nie einzeln live. |

View file

@ -136,7 +136,7 @@ Wenn der Auftrag lautet „schau in GlitchTip“, „was sagt GlitchTip“ o. Ä
4. **Reproduzieren mit rotem Test**, dann Fix (Projektregel: jede Änderung mit Test). Ist der Fehler ein Muster, das wieder auftreten kann, einen **Wächtertest** über alle Dateien schreiben (Beispiele: `BladePhpBlockGuardTest`, `BladeAlpineTranslationGuardTest`).
5. **Qualitätsgates:** betroffene Tests, dann `php artisan test --compact --parallel`, `vendor/bin/phpstan analyse --memory-limit=2G`, `vendor/bin/pint --dirty --format agent`; bei JS `npm run build`.
6. **Dokumentieren:** Eintrag in Abschnitt 7 (ID, Klasse, Ursache, Fix, Commit). Commit-Nachricht nennt die GlitchTip-ID.
7. **Ausliefern** über den nächsten Deploy (Hotfix: letzte Versionsstelle erhöhen). Ablauf seit `v1.1.1`: Git-Deploy per Tag, [`../betrieb/git-deploy.md`](../betrieb/git-deploy.md) Abschnitte C und D (Assets bauen und committen, Tag, Push, auf dem Server `deploy.sh`).
7. **Ausliefern** über den nächsten Deploy (Hotfix: letzte Versionsstelle erhöhen). Ablauf seit `v1.1.3`: Git-Deploy per Tag, [`../betrieb/git-deploy.md`](../betrieb/git-deploy.md) Abschnitte C und D (Assets bauen und committen, Tag, Push, auf dem Server `deploy.sh`).
8. **Auflösen** in GlitchTip macht der Betreiber (Token ist nur lesend) — erst nach dem Deploy. Kommt der Fehler mit neuem Release wieder, öffnet GlitchTip den Eintrag erneut.
---