9.7 KiB
9.7 KiB
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)
-
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)
-
Maintenance-Mode aktivieren (empfohlen für 15–30 min)
php artisan down --render="errors::503" --secret="dein-geheimer-preview-token"Mit
--secretkannst du überhttps://domain/dein-geheimer-preview-tokenweiter auf Live zugreifen, während alle anderen die 503-Seite sehen. -
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 installvor dem Deploy auf einem Staging-Server ausführen und dasvendor/-Verzeichnis mitsyncen
- Läuft auf Live mindestens PHP 8.1 (Laravel-10-Anforderung)? Prüfen:
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:
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()stattgetAdapter()->getPathPrefix())app/Libraries/CreatePDF.phproutes/web.php(neue/contacts-Routen)resources/views/layouts/application.blade.php,resources/views/layouts/includes/layout-sidenav.blade.phpconfig/trustedproxy.phppackages/digital-bird/shoppingcart/**,packages/iqcontent/laravel-filemanager/**(Package-Updates)composer.json,composer.lockphpunit.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 perphp artisan config:cachefrisch 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-Datenvendor/— wird auf Live percomposer installgeneriert (außer Managed Hosting, siehe oben)node_modules/— genauso.git/— Repo-Metadatentests/— 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-Dateidocker-compose.yml— lokale Dev-Orchestrierung
Beispiel rsync-Kommando (als Orientierung)
# 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):
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:
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 (
/contactsoder/contactje nach Route) - NEU: Kontakte-Duplikats-Übersicht lädt (
/contacts/duplicatesoder ä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)
- Maintenance-Mode aktivieren:
php artisan down - DB-Rollback:
oder — falls das fehlschlägt — das zuvor erstellte DB-Backup einspielen.php artisan migrate:rollback --step=2 - Dateisystem-Rollback: das zuvor erstellte Dateisystem-Backup zurückspielen (überschreiben).
- Caches leeren + Up:
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan up
Nach erfolgreichem Live-Deploy
- Lokal im Workspace: Restore-Script laufen lassen, um Phase 2 + Offers zurückzuholen:
cd /workspace/mein.sterntours.de bash dev/backups/phase2-offers-2026-04-17/restore.sh - 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)
- Master-Branch im Git kann bei Gelegenheit mit dem WIP-Commit
e3dc1afaktualisiert werden (push), damit der Remote-Stand den aktuellen Arbeitsstand abbildet.
Dateien in diesem Backup
dev/backups/phase2-offers-2026-04-17/MANIFEST.md— detaillierte Übersichtdev/backups/phase2-offers-2026-04-17/FILES/migrations/— 18 Migrations-Dateiendev/backups/phase2-offers-2026-04-17/FILES/models/— 6 Offer-Modelsdev/backups/phase2-offers-2026-04-17/PATCHES/— 11 Diff-Dateien zur Dokumentationdev/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:
e3dc1afauf lokalemmaster(nicht gepusht) — enthält Phase 1 + 2 + Offers gemischt