6.1 KiB
BizMatch SSR - Schritt-für-Schritt-Anleitung
Problem: SSR startet nicht auf neuem Laptop?
Diese Anleitung hilft Ihnen, BizMatch mit Server-Side Rendering (SSR) auf einem neuen Rechner zum Laufen zu bringen.
Voraussetzungen prüfen
# Node.js Version prüfen (mind. v18 erforderlich)
node --version
# npm Version prüfen
npm --version
# Falls Node.js fehlt oder veraltet ist:
# https://nodejs.org/ → LTS Version herunterladen
Schritt 1: Repository klonen (falls noch nicht geschehen)
git clone https://gitea.bizmatch.net/aknuth/bizmatch-project.git
cd bizmatch-project/bizmatch
Schritt 2: Dependencies installieren
WICHTIG: Dieser Schritt ist essentiell und wird oft vergessen!
cd ~/bizmatch-project/bizmatch
npm install
Tipp: Bei Problemen versuchen Sie:
rm -rf node_modules package-lock.json && npm install
⚠️ WICHTIG: Erstes Setup auf neuem Laptop
Wenn Sie das Projekt zum ersten Mal auf einem neuen Rechner klonen, müssen Sie ZUERST einen Build erstellen!
cd ~/bizmatch-project/bizmatch
# 1. Dependencies installieren
npm install
# 2. Build erstellen (erstellt dist/bizmatch/server/index.server.html)
npm run build:ssr
Warum?
- Die
dist/Folder werden NICHT ins Git eingecheckt (.gitignore) - Die Datei
dist/bizmatch/server/index.server.htmlfehlt nachgit clone - Ohne Build →
npm run serve:ssrcrasht mit "Cannot find index.server.html"
Nach dem ersten Build können Sie dann Development-Befehle nutzen.
Schritt 3: Umgebung wählen
Option A: Entwicklung (OHNE SSR)
Schnellster Weg für lokale Entwicklung:
npm start
- Öffnet automatisch: http://localhost:4200
- Hot-Reload aktiv (Code-Änderungen werden sofort sichtbar)
- Kein SSR (schneller für Entwicklung)
Option B: Development mit SSR
Für SSR-Testing während der Entwicklung:
npm run dev:ssr
- Öffnet: http://localhost:4200
- Hot-Reload aktiv
- SSR aktiv (simuliert Production)
- Nutzt DOM-Polyfills via
ssr-dom-preload.mjs
Option C: Production Build mit SSR
Für finalen Production-Test:
# 1. Build erstellen
npm run build:ssr
# 2. Server starten
npm run serve:ssr
- Server läuft auf: http://localhost:4200
- Vollständiges SSR (wie in Production)
- Kein Hot-Reload (für Änderungen erneut builden)
Schritt 4: Testen
Öffnen Sie http://localhost:4200 im Browser.
SSR funktioniert, wenn:
-
Seitenquelltext ansehen (Rechtsklick → "Seitenquelltext anzeigen"):
- HTML-Inhalt ist bereits vorhanden (nicht nur
<app-root></app-root>) - Meta-Tags sind sichtbar
- HTML-Inhalt ist bereits vorhanden (nicht nur
-
JavaScript deaktivieren (Chrome DevTools → Settings → Disable JavaScript):
- Seite zeigt Inhalt an (wenn auch nicht interaktiv)
-
Network-Tab (Chrome DevTools → Network → Doc):
- HTML-Response enthält bereits gerenderten Content
Häufige Probleme und Lösungen
Problem 1: npm: command not found
Lösung: Node.js installieren
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# macOS
brew install node
# Windows
# https://nodejs.org/ → Installer herunterladen
Problem 2: Cannot find module '@angular/ssr'
Lösung: Dependencies neu installieren
rm -rf node_modules package-lock.json
npm install
Problem 3: Error: EADDRINUSE: address already in use :::4200
Lösung: Port ist bereits belegt
# Prozess finden und beenden
lsof -i :4200
kill -9 <PID>
# Oder anderen Port nutzen
PORT=4300 npm run serve:ssr
Problem 4: Error loading @angular/platform-server oder "Cannot find index.server.html"
Lösung: Build fehlt oder ist veraltet
# dist-Ordner löschen und neu builden
rm -rf dist
npm run build:ssr
# Dann starten
npm run serve:ssr
Häufiger Fehler auf neuem Laptop:
- Nach
git pullfehlt derdist/Ordner komplett index.server.htmlwird beim Build erstellt, nicht ins Git eingecheckt- Lösung: Immer erst
npm run build:ssrausführen!
Problem 5: "Seite lädt nicht" oder "White Screen"
Lösung:
- Browser-Cache leeren (Strg+Shift+R / Cmd+Shift+R)
- DevTools öffnen → Console-Tab → Fehler prüfen
- Sicherstellen, dass Backend läuft (falls API-Calls)
Problem 6: "Module not found: Error: Can't resolve 'window'"
Lösung: Browser-spezifischer Code wird im SSR-Build verwendet
- Prüfen Sie
ssr-dom-polyfill.ts- DOM-Mocks sollten vorhanden sein - Code mit
isPlatformBrowser()schützen:
import { isPlatformBrowser } from '@angular/common';
import { PLATFORM_ID } from '@angular/core';
constructor(@Inject(PLATFORM_ID) private platformId: Object) {}
ngOnInit() {
if (isPlatformBrowser(this.platformId)) {
// Nur im Browser ausführen
window.scrollTo(0, 0);
}
}
Production Deployment mit PM2
Für dauerhaften Betrieb (Server-Umgebung):
# PM2 global installieren
npm install -g pm2
# Production Build
npm run build:ssr
# Server mit PM2 starten
pm2 start dist/bizmatch/server/server.mjs --name "bizmatch"
# Auto-Start bei Server-Neustart
pm2 startup
pm2 save
# Logs anzeigen
pm2 logs bizmatch
# Server neustarten nach Updates
npm run build:ssr && pm2 restart bizmatch
Unterschiede der Befehle
| Befehl | SSR | Hot-Reload | Verwendung |
|---|---|---|---|
npm start |
❌ | ✅ | Entwicklung (schnell) |
npm run dev:ssr |
✅ | ✅ | Entwicklung mit SSR |
npm run build:ssr |
✅ Build | ❌ | Production Build erstellen |
npm run serve:ssr |
✅ | ❌ | Production Server starten |
Nächste Schritte
- Für normale Entwicklung:
npm startverwenden - Vor Production-Deployment:
npm run build:ssrtesten - SSR-Funktionalität prüfen (siehe "Schritt 4: Testen")
- Bei Problemen: Logs prüfen und obige Lösungen durchgehen
Support
Bei weiteren Problemen:
- Logs prüfen:
npm run serve:ssrzeigt Fehler in der Konsole - Browser DevTools: Console + Network Tab
- Build-Output:
npm run build:ssrzeigt Build-Fehler - Node-Version:
node --version(sollte ≥ v18 sein)