deplay phase 1
This commit is contained in:
parent
e3dc1afd8e
commit
5a7478907e
68 changed files with 2831 additions and 818 deletions
241
dev/customer-bookings/phase-1-live-deploy.md
Normal file
241
dev/customer-bookings/phase-1-live-deploy.md
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
# Phase-1-Live-Deploy — Anleitung
|
||||
|
||||
**Ausgangssituation:**
|
||||
- Test-System läuft mit Phase 1 (Laravel-10-Upgrade, Contacts-Modul, Duplicats-Commands, Soft-Delete- & Merge-Fields auf `customer`-Tabelle)
|
||||
- Live-Server ist bei Git-Commit `389d5d1` (Januar 2026) — noch ohne Phase 1
|
||||
- Der Workspace wurde per `dev/backups/phase2-offers-2026-04-17/` um Phase 2 + Offers bereinigt und ist jetzt **exakt auf Phase-1-Stand** wie Test
|
||||
|
||||
---
|
||||
|
||||
## Vorbereitung (einmalig)
|
||||
|
||||
1. **Backup auf Live-Server**
|
||||
- Vollständiges DB-Backup (mysqldump oder Hoster-Tool) — speichere mit Zeitstempel
|
||||
- Vollständiges Dateisystem-Backup (zumindest `/app`, `/config`, `/routes`, `/resources`, `/database/migrations`, `/composer.json`, `/composer.lock`)
|
||||
|
||||
2. **Maintenance-Mode aktivieren** (empfohlen für 15–30 min)
|
||||
```bash
|
||||
php artisan down --render="errors::503" --secret="dein-geheimer-preview-token"
|
||||
```
|
||||
Mit `--secret` kannst du über `https://domain/dein-geheimer-preview-token` weiter auf Live zugreifen, während alle anderen die 503-Seite sehen.
|
||||
|
||||
3. **Abhängigkeiten abklären**
|
||||
- Läuft auf Live mindestens **PHP 8.1** (Laravel-10-Anforderung)? Prüfen: `php -v`
|
||||
- Ist **Composer** auf dem Live-Server installiert? Falls Managed Hosting: `composer install` vor dem Deploy auf einem Staging-Server ausführen und das `vendor/`-Verzeichnis mitsyncen
|
||||
|
||||
---
|
||||
|
||||
## Upload (rsync / scp / SFTP)
|
||||
|
||||
### Was **muss** hochgeladen werden
|
||||
|
||||
**Neue Dateien:**
|
||||
```
|
||||
database/migrations/2025_04_15_100001_phase1_add_merge_fields_to_customer_table.php
|
||||
database/migrations/2025_04_15_100002_phase1_add_soft_delete_to_customer_table.php
|
||||
app/Models/Contact.php
|
||||
app/Repositories/ContactRepository.php
|
||||
app/Http/Controllers/ContactController.php
|
||||
app/Console/Commands/ContactsFindDuplicates.php
|
||||
app/Console/Commands/ContactsMergeDuplicates.php
|
||||
app/Services/MailDirService.php
|
||||
resources/views/contact/_detail_contact.blade.php
|
||||
resources/views/contact/_detail_history.blade.php
|
||||
resources/views/contact/detail.blade.php
|
||||
resources/views/contact/duplicates.blade.php
|
||||
resources/views/contact/index.blade.php
|
||||
database/factories/BookingFactory.php
|
||||
database/factories/CustomerFactory.php
|
||||
database/factories/LeadFactory.php
|
||||
tests/Feature/Api/BookingImportTest.php
|
||||
tests/Feature/Auth/LoginTest.php
|
||||
tests/Feature/BookingControllerTest.php
|
||||
tests/Unit/Services/UtilTest.php
|
||||
```
|
||||
|
||||
**Modifizierte Dateien** — vollständige Upload-Liste generieren:
|
||||
|
||||
```bash
|
||||
cd /workspace/mein.sterntours.de
|
||||
git diff --name-only HEAD^ \
|
||||
| grep -Ev "^(dev/|tests/|\.env|\.mcp\.json$|CLAUDE\.md$|boost\.json$|_ide_helper|\.devcontainer/|bootstrap/cache/|mein\.sterntours\.de\.code-workspace$|docker-compose\.yml$|public/storage$)" \
|
||||
> /tmp/phase1-files-to-upload.txt
|
||||
cat /tmp/phase1-files-to-upload.txt
|
||||
wc -l /tmp/phase1-files-to-upload.txt
|
||||
```
|
||||
|
||||
Das filtert die unerwünschten Dateien automatisch raus.
|
||||
|
||||
Die wichtigsten modifizierten Dateien (komplette Liste in der generierten Textdatei):
|
||||
- `app/Models/Customer.php`, `Booking.php`, `Lead.php` (und viele weitere Models — Laravel-10-Upgrade)
|
||||
- `app/Http/Controllers/*.php` (Controllers mit Laravel-10-Anpassungen)
|
||||
- `app/Http/Kernel.php`, `app/Console/Kernel.php`, `app/Providers/*.php`, `app/Http/Middleware/TrustProxies.php` (Laravel-10-Upgrade)
|
||||
- `app/Repositories/*.php` (Laravel-10: `Storage::disk()->path()` statt `getAdapter()->getPathPrefix()`)
|
||||
- `app/Libraries/CreatePDF.php`
|
||||
- `routes/web.php` (neue `/contacts`-Routen)
|
||||
- `resources/views/layouts/application.blade.php`, `resources/views/layouts/includes/layout-sidenav.blade.php`
|
||||
- `config/trustedproxy.php`
|
||||
- `packages/digital-bird/shoppingcart/**`, `packages/iqcontent/laravel-filemanager/**` (Package-Updates)
|
||||
- `composer.json`, `composer.lock`
|
||||
- `phpunit.xml`
|
||||
|
||||
### Was **nicht** hochgeladen werden darf
|
||||
|
||||
- **Alles unter `dev/`** — dort liegt Entwicklungsdokumentation und die Backups (Phase 2, Offers)
|
||||
- `.env`, `.env.*` — enthält produktive Credentials, wird separat verwaltet
|
||||
- `_ide_helper.php`, `_ide_helper_models.php` — lokale IDE-Hilfen (von barryvdh/laravel-ide-helper generiert)
|
||||
- `bootstrap/cache/config.php` — wird auf Live per `php artisan config:cache` frisch generiert
|
||||
- `.mcp.json`, `CLAUDE.md`, `boost.json` — Dev-Tools-Konfiguration
|
||||
- `.devcontainer/` — Entwicklungsumgebung (VSCode-Devcontainer)
|
||||
- `storage/logs/*`, `storage/framework/cache/*`, `storage/framework/views/*`, `storage/framework/sessions/*` — Runtime-Daten
|
||||
- `vendor/` — wird auf Live per `composer install` generiert (außer Managed Hosting, siehe oben)
|
||||
- `node_modules/` — genauso
|
||||
- `.git/` — Repo-Metadaten
|
||||
- `tests/` — nur auf Test relevant; auf Live-Production nicht nötig (aber nicht schädlich, falls mit rauf kommt)
|
||||
- `mein.sterntours.de.code-workspace` — IDE-Workspace-Datei
|
||||
- `docker-compose.yml` — lokale Dev-Orchestrierung
|
||||
|
||||
### Beispiel rsync-Kommando (als Orientierung)
|
||||
|
||||
```bash
|
||||
# Von lokal → Live
|
||||
# Achtung: --dry-run zuerst, dann ohne --dry-run wiederholen!
|
||||
rsync -av --dry-run \
|
||||
--exclude='.git/' \
|
||||
--exclude='dev/' \
|
||||
--exclude='node_modules/' \
|
||||
--exclude='vendor/' \
|
||||
--exclude='storage/logs/' \
|
||||
--exclude='storage/framework/cache/' \
|
||||
--exclude='storage/framework/views/' \
|
||||
--exclude='storage/framework/sessions/' \
|
||||
--exclude='storage/app/public/temp/' \
|
||||
--exclude='public/storage' \
|
||||
--exclude='.env*' \
|
||||
--exclude='bootstrap/cache/' \
|
||||
--exclude='_ide_helper*' \
|
||||
--exclude='.mcp.json' \
|
||||
--exclude='CLAUDE.md' \
|
||||
--exclude='boost.json' \
|
||||
--exclude='.devcontainer/' \
|
||||
/workspace/mein.sterntours.de/ \
|
||||
user@live-server:/pfad/zu/mein.sterntours.de/
|
||||
```
|
||||
|
||||
Falls du **nur geänderte Dateien** syncen möchtest (sicherer bei großer Codebase):
|
||||
```bash
|
||||
git diff --name-only HEAD^ | grep -v "^dev/" > /tmp/phase1-files.txt
|
||||
rsync -av --files-from=/tmp/phase1-files.txt . user@live-server:/pfad/zu/mein.sterntours.de/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ausführung auf Live-Server
|
||||
|
||||
Nach dem Upload, per SSH auf dem Live-Server:
|
||||
|
||||
```bash
|
||||
cd /pfad/zu/mein.sterntours.de
|
||||
|
||||
# 1. Composer Dependencies aktualisieren (Laravel 10 Upgrade!)
|
||||
composer install --no-dev --optimize-autoloader
|
||||
|
||||
# 2. Alle Caches leeren (wichtig wegen Struktur-Änderungen)
|
||||
php artisan config:clear
|
||||
php artisan route:clear
|
||||
php artisan view:clear
|
||||
php artisan cache:clear
|
||||
|
||||
# 3. DB-Migrationen ausführen (nur die 2 Phase-1-Migrationen)
|
||||
php artisan migrate --force
|
||||
# Sollte zeigen:
|
||||
# Running: 2025_04_15_100001_phase1_add_merge_fields_to_customer_table
|
||||
# Running: 2025_04_15_100002_phase1_add_soft_delete_to_customer_table
|
||||
|
||||
# 4. Autoload neu generieren (neue Klassen: Contact, ContactRepository, MailDirService)
|
||||
composer dump-autoload --optimize
|
||||
|
||||
# 5. Duplicats-Analyse (read-only, erzeugt Reports)
|
||||
php artisan contacts:find-duplicates
|
||||
# → Reports unter storage/app/contacts/duplicates/*.csv
|
||||
|
||||
# 6. Duplicats-Merging (DRY-RUN zuerst!)
|
||||
php artisan contacts:merge-duplicates --dry-run
|
||||
# Review der Ausgabe. Wenn OK:
|
||||
|
||||
# 7. Duplicats-Merging (echt)
|
||||
php artisan contacts:merge-duplicates --confidence=HIGH --force
|
||||
# Merged nur hochkonfidente Duplikate automatisch.
|
||||
# Mittlere/niedrige Konfidenz bleibt für manuelle Review.
|
||||
|
||||
# 8. Production-Caches wieder aufbauen (für Performance)
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan view:cache
|
||||
# Optional: php artisan event:cache
|
||||
# NICHT php artisan optimize (das cached auch, aber einige Setups haben damit Probleme)
|
||||
|
||||
# 9. Maintenance-Mode deaktivieren
|
||||
php artisan up
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Smoke-Tests nach dem Deploy
|
||||
|
||||
Nach dem `php artisan up` diese Kernfunktionen manuell testen:
|
||||
|
||||
- [ ] Login funktioniert (`/login`)
|
||||
- [ ] Buchungsliste lädt (`/booking`)
|
||||
- [ ] Einzelne Buchung öffnen, Detailseite lädt
|
||||
- [ ] Anfragenliste lädt (`/lead`)
|
||||
- [ ] Einzelne Anfrage öffnen, Detailseite lädt
|
||||
- [ ] **NEU**: Kontakte-Liste lädt (`/contacts` oder `/contact` je nach Route)
|
||||
- [ ] **NEU**: Kontakte-Duplikats-Übersicht lädt (`/contacts/duplicates` oder ähnlich)
|
||||
- [ ] PDF-Erzeugung funktioniert (Buchungsbestätigung, Voucher, Storno) — testet `Storage::disk()->path()`-Änderung
|
||||
- [ ] Mail-Versand über CustomerMail funktioniert
|
||||
- [ ] Admin-Report läuft durch (`/admin/report`)
|
||||
|
||||
---
|
||||
|
||||
## Rollback-Plan (falls etwas schiefgeht)
|
||||
|
||||
1. **Maintenance-Mode aktivieren:** `php artisan down`
|
||||
2. **DB-Rollback:**
|
||||
```bash
|
||||
php artisan migrate:rollback --step=2
|
||||
```
|
||||
oder — falls das fehlschlägt — das zuvor erstellte DB-Backup einspielen.
|
||||
3. **Dateisystem-Rollback:** das zuvor erstellte Dateisystem-Backup zurückspielen (überschreiben).
|
||||
4. **Caches leeren + Up:**
|
||||
```bash
|
||||
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan up
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Nach erfolgreichem Live-Deploy
|
||||
|
||||
1. **Lokal** im Workspace: Restore-Script laufen lassen, um Phase 2 + Offers zurückzuholen:
|
||||
```bash
|
||||
cd /workspace/mein.sterntours.de
|
||||
bash dev/backups/phase2-offers-2026-04-17/restore.sh
|
||||
```
|
||||
2. Der Workspace enthält dann wieder Phase 2 Code + Offers-Modul. Weitermachen nach Plan in:
|
||||
- `dev/customer-bookings/umsetzung.md` (Phase 2–4)
|
||||
- `dev/offers/umsetzung.md` (Offers-Modul)
|
||||
3. **Master-Branch** im Git kann bei Gelegenheit mit dem WIP-Commit `e3dc1af` aktualisiert werden (push), damit der Remote-Stand den aktuellen Arbeitsstand abbildet.
|
||||
|
||||
---
|
||||
|
||||
## Dateien in diesem Backup
|
||||
|
||||
- `dev/backups/phase2-offers-2026-04-17/MANIFEST.md` — detaillierte Übersicht
|
||||
- `dev/backups/phase2-offers-2026-04-17/FILES/migrations/` — 18 Migrations-Dateien
|
||||
- `dev/backups/phase2-offers-2026-04-17/FILES/models/` — 6 Offer-Models
|
||||
- `dev/backups/phase2-offers-2026-04-17/PATCHES/` — 11 Diff-Dateien zur Dokumentation
|
||||
- `dev/backups/phase2-offers-2026-04-17/restore.sh` — automatisches Restore
|
||||
|
||||
**Zusätzliche Sicherheitsnetze:**
|
||||
- Tarball: `../backups-safety/workspace-pre-phase1-rollback-2026-04-17.tar.gz` (182 MB, kompletter Workspace-State vor dem Rückbau)
|
||||
- Git-Commit: `e3dc1af` auf lokalem `master` (nicht gepusht) — enthält Phase 1 + 2 + Offers gemischt
|
||||
Loading…
Add table
Add a link
Reference in a new issue