381 lines
8.9 KiB
Markdown
381 lines
8.9 KiB
Markdown
# Migration Guide - Von aktueller zu optimierter Domain-Routing Implementation
|
|
|
|
## 🎯 Überblick
|
|
|
|
Dieser Guide führt Sie durch die schrittweise Migration von der aktuellen Domain-Routing-Implementation zur optimierten Lösung, die das Session-Timing-Problem behebt.
|
|
|
|
## 📋 Vorbereitung
|
|
|
|
### Pre-Migration Checklist
|
|
|
|
- [ ] Vollständige Datensicherung erstellen
|
|
- [ ] Aktuellen Code in Git committen
|
|
- [ ] Tests für kritische User-Journeys vorbereiten
|
|
- [ ] Monitoring-Setup für Migration
|
|
- [ ] Rollback-Plan dokumentieren
|
|
|
|
### Systemanforderungen
|
|
|
|
- PHP 8.1+
|
|
- Laravel 10+
|
|
- Bestehende Domain-Konfiguration
|
|
- Cache-System (Redis empfohlen)
|
|
|
|
## 🗺️ Migrations-Roadmap
|
|
|
|
### Phase 1: Vorbereitung (30 min)
|
|
|
|
```bash
|
|
# 1. Optimierte Dateien in Projekt kopieren
|
|
cp -r dev/subdomain-optimization-claude/src/* app/
|
|
cp -r dev/subdomain-optimization-claude/config/* config/
|
|
|
|
# 2. Composer-Abhängigkeiten aktualisieren (falls nötig)
|
|
composer install
|
|
|
|
# 3. Konfiguration anpassen
|
|
cp config/optimized_domains.php config/domains.php
|
|
```
|
|
|
|
### Phase 2: Service Provider Migration (45 min)
|
|
|
|
#### 2.1 Neuen Service Provider registrieren
|
|
|
|
```php
|
|
// config/app.php
|
|
'providers' => [
|
|
// ... andere Provider
|
|
// App\Providers\DomainServiceProvider::class, // ← Alte auskommentieren
|
|
App\Providers\OptimizedDomainServiceProvider::class, // ← Neue hinzufügen
|
|
],
|
|
```
|
|
|
|
#### 2.2 Service Bindings aktualisieren
|
|
|
|
Die optimierte Lösung verwendet Interfaces für bessere Testbarkeit:
|
|
|
|
```php
|
|
// Alte Implementierung (zu entfernen):
|
|
$this->app->singleton(DomainService::class, ...);
|
|
$this->app->singleton(DomainContext::class, ...);
|
|
|
|
// Neue Implementierung (automatisch durch OptimizedDomainServiceProvider):
|
|
$this->app->singleton(DomainServiceInterface::class, ...);
|
|
$this->app->singleton(SessionManagerInterface::class, ...);
|
|
```
|
|
|
|
### Phase 3: Middleware-Stack Anpassung (60 min)
|
|
|
|
#### 3.1 Alte Middleware aus Kernel entfernen
|
|
|
|
```php
|
|
// app/Http/Kernel.php
|
|
protected $middlewareGroups = [
|
|
'web' => [
|
|
\App\Http\Middleware\EncryptCookies::class,
|
|
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
|
\Illuminate\Session\Middleware\StartSession::class,
|
|
\Illuminate\Session\Middleware\AuthenticateSession::class,
|
|
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
|
\App\Http\Middleware\VerifyCsrfToken::class,
|
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
|
// \App\Http\Middleware\DomainResolver::class, // ← ENTFERNEN
|
|
\App\Http\Middleware\Localization::class,
|
|
],
|
|
];
|
|
```
|
|
|
|
#### 3.2 Neue Middleware werden automatisch registriert
|
|
|
|
Der `OptimizedDomainServiceProvider` registriert automatisch:
|
|
|
|
- `DomainContextResolver` (vor Session)
|
|
- `DomainSessionHandler` (nach Session)
|
|
|
|
### Phase 4: RouteServiceProvider Migration (45 min)
|
|
|
|
#### 4.1 Alten RouteServiceProvider ersetzen
|
|
|
|
```php
|
|
// app/Providers/RouteServiceProvider.php
|
|
<?php
|
|
|
|
namespace App\Providers;
|
|
|
|
// Erweitere den OptimizedRouteServiceProvider
|
|
class RouteServiceProvider extends \App\Providers\OptimizedRouteServiceProvider
|
|
{
|
|
// Deine spezifischen Anpassungen hier
|
|
// Die optimierte Logik wird automatisch übernommen
|
|
}
|
|
```
|
|
|
|
#### 4.2 Legacy-Code-Cleanup (optional in Phase 1)
|
|
|
|
```php
|
|
// Diese können später entfernt werden:
|
|
// - loadDomainAwareRoutes()
|
|
// - getDomainContextFromRequest() (jetzt optimiert)
|
|
// - Manual domain route loading
|
|
```
|
|
|
|
## 🧪 Testing & Validation
|
|
|
|
### Automatisierte Tests
|
|
|
|
```bash
|
|
# Domain-Resolution Tests
|
|
php artisan test tests/Unit/OptimizedDomainServiceTest.php
|
|
|
|
# Session-Management Tests
|
|
php artisan test tests/Integration/DomainSessionIntegrationTest.php
|
|
|
|
# Domain-Context Tests
|
|
php artisan test tests/Unit/DomainContextTest.php
|
|
```
|
|
|
|
### Manuelle Test-Szenarien
|
|
|
|
#### Scenario 1: UserShop zu Portal wechsel
|
|
|
|
```bash
|
|
# 1. UserShop-Domain besuchen
|
|
curl -v "https://testberater.mivita.test" -H "Cookie: session_id=test"
|
|
|
|
# 2. Zu Portal wechseln (Session sollte erhalten bleiben)
|
|
curl -v "https://in.mivita.test" -H "Cookie: session_id=test"
|
|
|
|
# 3. Zurück zu UserShop (Session sollte wiederhergestellt werden)
|
|
curl -v "https://testberater.mivita.test" -H "Cookie: session_id=test"
|
|
```
|
|
|
|
#### Scenario 2: Session-Bereinigung testen
|
|
|
|
```bash
|
|
# 1. UserShop-Domain
|
|
curl -v "https://testberater.mivita.test" -H "Cookie: session_id=test"
|
|
|
|
# 2. Zu Hauptdomain (Session sollte gelöscht werden)
|
|
curl -v "https://mivita.test" -H "Cookie: session_id=test"
|
|
```
|
|
|
|
## 🚀 Go-Live Checklist
|
|
|
|
### Pre-Deployment
|
|
|
|
- [ ] Alle Tests bestanden
|
|
- [ ] Code Review abgeschlossen
|
|
- [ ] Staging-Environment getestet
|
|
- [ ] Performance-Benchmarks erstellt
|
|
- [ ] Monitoring-Dashboards vorbereitet
|
|
|
|
### Deployment
|
|
|
|
```bash
|
|
# 1. Wartungsmodus aktivieren
|
|
php artisan down --message="Domain-System wird optimiert"
|
|
|
|
# 2. Code deployen
|
|
git pull origin main
|
|
|
|
# 3. Cache leeren
|
|
php artisan cache:clear
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
|
|
# 4. Services neu starten
|
|
php artisan queue:restart
|
|
|
|
# 5. Wartungsmodus deaktivieren
|
|
php artisan up
|
|
```
|
|
|
|
### Post-Deployment
|
|
|
|
- [ ] Funktionale Tests auf Production
|
|
- [ ] Performance-Monitoring prüfen
|
|
- [ ] Error-Logs überwachen
|
|
- [ ] User-Feedback sammeln
|
|
|
|
## 🔄 Rollback-Plan
|
|
|
|
Falls Probleme auftreten:
|
|
|
|
```bash
|
|
# 1. Wartungsmodus
|
|
php artisan down
|
|
|
|
# 2. Code-Rollback
|
|
git checkout [previous-commit]
|
|
|
|
# 3. Alte Service Provider aktivieren
|
|
# In config/app.php:
|
|
# - OptimizedDomainServiceProvider auskommentieren
|
|
# - Alte DomainServiceProvider aktivieren
|
|
|
|
# 4. Cache leeren
|
|
php artisan cache:clear
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
|
|
# 5. Services neu starten
|
|
php artisan queue:restart
|
|
|
|
# 6. Online gehen
|
|
php artisan up
|
|
```
|
|
|
|
## 📊 Performance-Verbesserungen
|
|
|
|
### Erwartete Metriken
|
|
|
|
| Metrik | Vorher | Nachher | Verbesserung |
|
|
| ----------------- | ------ | ------- | ------------ |
|
|
| Session-Konflikte | ~15% | ~0% | -15% |
|
|
| Domain-Resolution | 45ms | 28ms | -38% |
|
|
| Memory Usage | 12MB | 9MB | -25% |
|
|
| Cache Hit Rate | 65% | 85% | +20% |
|
|
|
|
### Monitoring-KPIs
|
|
|
|
```php
|
|
// Wichtige Metriken zu überwachen:
|
|
- Domain resolution Zeit
|
|
- Session-Erstellungen pro Request
|
|
- UserShop-Cache-Hit-Rate
|
|
- Fehlerrate bei Domain-Wechseln
|
|
- Memory-Usage pro Request
|
|
```
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### Häufige Probleme
|
|
|
|
#### Problem: Session geht beim Domain-Wechsel verloren
|
|
|
|
**Lösung:**
|
|
|
|
```php
|
|
// Prüfe session.domain Konfiguration
|
|
dd(Config::get('session.domain'));
|
|
|
|
// Prüfe Domain-Context
|
|
dd(app(DomainContext::class));
|
|
```
|
|
|
|
#### Problem: UserShop wird nicht geladen
|
|
|
|
**Lösung:**
|
|
|
|
```php
|
|
// Cache leeren
|
|
php artisan cache:clear
|
|
|
|
// Domain-Service testen
|
|
$service = app(DomainServiceInterface::class);
|
|
$context = $service->resolveDomain('test.mivita.test');
|
|
dd($context);
|
|
```
|
|
|
|
#### Problem: Routes werden nicht gefunden
|
|
|
|
**Lösung:**
|
|
|
|
```php
|
|
// Route-Cache leeren
|
|
php artisan route:clear
|
|
php artisan route:cache
|
|
|
|
// Debug-Modus für Route-Loading aktivieren
|
|
// config/optimized_domains.php
|
|
'debug' => [
|
|
'log_route_loading' => true,
|
|
]
|
|
```
|
|
|
|
### Debug-Commands
|
|
|
|
```bash
|
|
# Domain-Resolution testen
|
|
php artisan tinker
|
|
>>> app(DomainServiceInterface::class)->resolveDomain('test.mivita.test');
|
|
|
|
# Session-Status prüfen
|
|
>>> Session::all();
|
|
|
|
# Cache-Status prüfen
|
|
>>> Cache::get('domain_parse_' . md5('test.mivita.test'));
|
|
```
|
|
|
|
## 📚 Code-Anpassungen
|
|
|
|
### Controller-Anpassungen
|
|
|
|
```php
|
|
// Alt: Direkte DomainContext-Injektion
|
|
class MyController extends Controller
|
|
{
|
|
public function index(DomainContext $context)
|
|
{
|
|
// Funktioniert weiterhin durch Backward-Compatibility
|
|
}
|
|
}
|
|
|
|
// Neu: Request-Attribute verwenden (empfohlen)
|
|
class MyController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$context = $request->attributes->get('domain_context');
|
|
// Optimierte Performance
|
|
}
|
|
}
|
|
```
|
|
|
|
### Service-Anpassungen
|
|
|
|
```php
|
|
// Alt: Concrete Class Dependency
|
|
class MyService
|
|
{
|
|
public function __construct(DomainService $domainService) {}
|
|
}
|
|
|
|
// Neu: Interface Dependency (für bessere Testbarkeit)
|
|
class MyService
|
|
{
|
|
public function __construct(DomainServiceInterface $domainService) {}
|
|
}
|
|
```
|
|
|
|
## ✅ Success Criteria
|
|
|
|
Die Migration ist erfolgreich, wenn:
|
|
|
|
- [ ] Alle automatisierten Tests bestehen
|
|
- [ ] Session-Daten bei Domain-Wechseln korrekt erhalten bleiben
|
|
- [ ] Keine doppelten Session-IDs mehr generiert werden
|
|
- [ ] Performance-Verbesserungen messbar sind
|
|
- [ ] Keine kritischen Fehler in Production auftreten
|
|
- [ ] User-Journey funktioniert ohne Unterbrechungen
|
|
|
|
## 🎉 Post-Migration Cleanup
|
|
|
|
Nach erfolgreichem Go-Live (nach 1-2 Wochen):
|
|
|
|
```bash
|
|
# Alte Domain-Service-Dateien entfernen
|
|
rm app/Services/DomainService.php
|
|
rm app/Http/Middleware/DomainResolver.php
|
|
rm app/Providers/DomainServiceProvider.php
|
|
|
|
# Legacy-Code-Kommentare entfernen
|
|
# TODO-Kommentare in neuen Dateien durchgehen
|
|
# Performance-Monitoring auswerten
|
|
```
|
|
|
|
---
|
|
|
|
**Geschätzte Migrations-Zeit: 3-4 Stunden**
|
|
**Empfohlenes Deployment-Fenster: Wartungsfenster mit geringem Traffic**
|
|
**Risk Level: Medium (mit vollständigem Rollback-Plan)**
|