# 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
```bash
# 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)
```bash
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!
```bash
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!**
```bash
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.html` fehlt nach `git clone`
- Ohne Build → `npm run serve:ssr` crasht 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:
```bash
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:
```bash
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:
```bash
# 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:
1. **Seitenquelltext ansehen** (Rechtsklick → "Seitenquelltext anzeigen"):
- HTML-Inhalt ist bereits vorhanden (nicht nur ``)
- Meta-Tags sind sichtbar
2. **JavaScript deaktivieren** (Chrome DevTools → Settings → Disable JavaScript):
- Seite zeigt Inhalt an (wenn auch nicht interaktiv)
3. **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
```bash
# 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
```bash
rm -rf node_modules package-lock.json
npm install
```
### Problem 3: `Error: EADDRINUSE: address already in use :::4200`
**Lösung:** Port ist bereits belegt
```bash
# Prozess finden und beenden
lsof -i :4200
kill -9
# 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
```bash
# 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 pull` fehlt der `dist/` Ordner komplett
- `index.server.html` wird beim Build erstellt, nicht ins Git eingecheckt
- **Lösung:** Immer erst `npm run build:ssr` ausführen!
### Problem 5: "Seite lädt nicht" oder "White Screen"
**Lösung:**
1. Browser-Cache leeren (Strg+Shift+R / Cmd+Shift+R)
2. DevTools öffnen → Console-Tab → Fehler prüfen
3. 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:
```typescript
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):
```bash
# 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
1. Für normale Entwicklung: **`npm start`** verwenden
2. Vor Production-Deployment: **`npm run build:ssr`** testen
3. SSR-Funktionalität prüfen (siehe "Schritt 4: Testen")
4. Bei Problemen: Logs prüfen und obige Lösungen durchgehen
---
## Support
Bei weiteren Problemen:
1. **Logs prüfen:** `npm run serve:ssr` zeigt Fehler in der Konsole
2. **Browser DevTools:** Console + Network Tab
3. **Build-Output:** `npm run build:ssr` zeigt Build-Fehler
4. **Node-Version:** `node --version` (sollte ≥ v18 sein)