From 2b4db04ea123916a44c43c752f7a3b362aa35acd Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Tue, 21 Oct 2025 16:32:19 +0200 Subject: [PATCH] Add deployment script and documentation for production data safety --- .gitignore | 4 ++ DEPLOYMENT.md | 125 +++++++++++++++++++++++++++++++++++++++++++ deploy-production.sh | 72 +++++++++++++++++++++++++ 3 files changed, 201 insertions(+) create mode 100644 DEPLOYMENT.md create mode 100755 deploy-production.sh diff --git a/.gitignore b/.gitignore index 60f7054..ce9788f 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,10 @@ out .nuxt dist +# Build output (but keep production data!) +.output +!.output/.gitkeep + # Gatsby files .cache/ # Comment in the public line in if your project uses Gatsby and not Next.js diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..727881a --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,125 @@ +# 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 SIND im Git** (werden versioniert) +- **Bei Deployment:** Immer Backup → Build → Restore +- **Bei Problemen:** Script verwenden oder manuell Daten sichern + diff --git a/deploy-production.sh b/deploy-production.sh new file mode 100755 index 0000000..8213f36 --- /dev/null +++ b/deploy-production.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# Deployment Script für Harheimer TC Website +# Sichert Produktivdaten vor dem Build und stellt sie danach wieder her + +echo "=== Harheimer TC Deployment ===" +echo "" + +# 1. Git Pull +echo "1. Pulling latest changes from git..." +git pull +if [ $? -ne 0 ]; then + echo "ERROR: Git pull failed!" + exit 1 +fi + +# 2. Backup Production Data +echo "" +echo "2. Backing up production data..." +mkdir -p .backup +cp -r server/data .backup/data_backup 2>/dev/null || echo "No server/data to backup" +cp public/data/termine.csv .backup/termine.csv 2>/dev/null || echo "No termine.csv to backup" +cp public/data/mannschaften.csv .backup/mannschaften.csv 2>/dev/null || echo "No mannschaften.csv to backup" +cp public/data/spielsysteme.csv .backup/spielsysteme.csv 2>/dev/null || echo "No spielsysteme.csv to backup" +cp public/data/vereinsmeisterschaften.csv .backup/vereinsmeisterschaften.csv 2>/dev/null || echo "No vereinsmeisterschaften.csv to backup" + +# 3. Install dependencies +echo "" +echo "3. Installing dependencies..." +npm install +if [ $? -ne 0 ]; then + echo "ERROR: npm install failed!" + exit 1 +fi + +# 4. Remove old build (but keep data!) +echo "" +echo "4. Removing old build output..." +rm -rf .output + +# 5. Build +echo "" +echo "5. Building application..." +npm run build +if [ $? -ne 0 ]; then + echo "ERROR: Build failed!" + exit 1 +fi + +# 6. Restore Production Data +echo "" +echo "6. Restoring production data..." +cp -r .backup/data_backup/* server/data/ 2>/dev/null || echo "No data to restore" +cp .backup/termine.csv public/data/termine.csv 2>/dev/null || echo "No termine.csv to restore" +cp .backup/mannschaften.csv public/data/mannschaften.csv 2>/dev/null || echo "No mannschaften.csv to restore" +cp .backup/spielsysteme.csv public/data/spielsysteme.csv 2>/dev/null || echo "No spielsysteme.csv to restore" +cp .backup/vereinsmeisterschaften.csv public/data/vereinsmeisterschaften.csv 2>/dev/null || echo "No vereinsmeisterschaften.csv to restore" + +# 7. Cleanup backup +echo "" +echo "7. Cleaning up backup..." +rm -rf .backup + +# 8. Restart PM2 +echo "" +echo "8. Restarting PM2..." +pm2 restart harheimertc + +echo "" +echo "=== Deployment completed successfully! ===" +echo "The application is now running with the latest code and your production data preserved." +