# Deployment-Anleitung für Harheimer TC Website

## Wichtig: Produktivdaten schützen!

Die folgenden Dateien enthalten **Produktivdaten** und dürfen beim Deployment **NICHT überschrieben** werden:

### Server-Daten (authentifizierungskritisch):
- `server/data/users.json` - Benutzerkonten & Passwörter
- `server/data/sessions.json` - Aktive Sessions
- `server/data/members.json` - Manuelle Mitgliederliste
- `server/data/news.json` - Interne & öffentliche News

### Public-Daten (CSV):
- `public/data/termine.csv` - Vereinstermine
- `public/data/mannschaften.csv` - Team-Informationen
- `public/data/spielsysteme.csv` - Spielsysteme
- `public/data/vereinsmeisterschaften.csv` - Meisterschaftsergebnisse

---

## Deployment-Methode 1: Automatisches Script (Empfohlen)

```bash
cd /var/www/harheimertc
./deploy-production.sh
```

Das Script:
1. ✅ Pullt neuesten Code
2. ✅ **Sichert alle Produktivdaten**
3. ✅ Installiert Dependencies
4. ✅ Löscht `.output/` (Build-Artefakte)
5. ✅ Baut neu
6. ✅ **Stellt Produktivdaten wieder her**
7. ✅ Startet PM2 neu

---

## Deployment-Methode 2: Manuell

```bash
cd /var/www/harheimertc

# 1. Backup erstellen
mkdir -p .backup
cp -r server/data .backup/
cp public/data/*.csv .backup/

# 2. Code aktualisieren
git pull

# 3. Dependencies installieren
npm install

# 4. Alten Build entfernen
rm -rf .output

# 5. Neu bauen
npm run build

# 6. Produktivdaten wiederherstellen
cp -r .backup/data/* server/data/
cp .backup/*.csv public/data/

# 7. Cleanup
rm -rf .backup

# 8. PM2 neu starten
pm2 restart harheimertc
```

---

## Bei Git-Merge-Konflikten in `.output/`

Falls Git meldet, dass `.output/` Dateien überschrieben würden:

```bash
# Einfach löschen und neu bauen
rm -rf .output
git pull
npm run build
pm2 restart harheimertc
```

**Wichtig:** Vorher Produktivdaten sichern (siehe oben)!

---

## Erste Einrichtung auf neuem Server

```bash
# 1. Repository klonen
git clone git@tsschulz.de:/home/git/harheimertc.git
cd harheimertc

# 2. Dependencies installieren
npm install

# 3. Produktivdaten erstellen (nur beim ersten Mal!)
mkdir -p server/data
echo '[]' > server/data/users.json
echo '[]' > server/data/sessions.json
echo '[]' > server/data/members.json
echo '[]' > server/data/news.json

# 4. Admin-Benutzer erstellen (siehe README.md)

# 5. Bauen
npm run build

# 6. PM2 einrichten
pm2 start harheimertc.config.cjs
pm2 save
```

---

## Notizen

- **`.output/` ist NICHT im Git** (steht in `.gitignore`)
- **Produktivdaten SOLLEN NICHT im Git sein** (werden per `.gitignore` ausgeschlossen und in Produktion außerhalb des Repos persistiert, z.B. unter `/var/lib/harheimertc`)
- **Bei Deployment:** Immer Backup → Build → Restore
- **Bei Problemen:** Script verwenden oder manuell Daten sichern

---

## Security Operations (Empfehlungen)

### Sicherheitsupdates (OS/Libs)

- **OS Updates**: mindestens monatlich (besser: automatisiert via unattended-upgrades) + Reboot-Fenster einplanen
- **Node/NPM Dependencies**: Renovate ist vorhanden (`renovate.json`). Zusätzlich regelmäßig `npm audit` prüfen und Updates einspielen.

### Backup / Wiederherstellung

- **Backup-Inhalt**: mindestens `server/data/` + `public/data/` (+ optional `public/uploads/` / `server/data/galerie/`)
- **Frequenz**: täglich (inkrementell) + wöchentlich (voll) als Richtwert
- **Ablage**: getrennt vom Server (Offsite), z.B. verschlüsselt (restic/borg) auf Storage
- **Restore-Drill**: mindestens quartalsweise Wiederherstellung testen

### SSH-Härtung

- **Nur Key-Auth** (PasswordAuthentication=no), Root-Login deaktivieren (PermitRootLogin=no)
- **2FA/MFA** optional via SSH-CA / PAM / Bastion Host
- **Fail2ban** oder äquivalente Schutzmaßnahmen für SSH in Betracht ziehen

### Logging / Audit

- Audit-Log (JSONL) liegt unter `server/data/audit.log.jsonl` (abschaltbar via `AUDIT_LOG_ENABLED=false`)
- Empfehlung: Log-Rotation + gesicherte Aufbewahrung (z.B. journald/rotate + offsite)

