Some checks failed
Deploy to production / deploy (push) Failing after 1m46s
- Updated update-backend.sh and update-frontend.sh to accept a target directory as a parameter, improving flexibility. - Refactored paths to use the target directory for all operations, ensuring consistency and reducing hardcoded values. - Added error handling with 'set -euo pipefail' for better script reliability. - Improved user feedback by displaying the target directory during updates.
114 lines
3.6 KiB
Bash
Executable File
114 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
TARGET_DIR="${1:?Zielverzeichnis fehlt: ./update-backend.sh <z. B. /opt/yourpart-green> [STAGE]}"
|
|
# Zweiter Parameter: STAGE für DB-Sync (früher erster Parameter)
|
|
STAGE="${2:-production}"
|
|
BACKEND_TARGET="$TARGET_DIR/backend"
|
|
|
|
echo "Updating YourPart Backend..."
|
|
echo "Ziel: $BACKEND_TARGET"
|
|
echo "Using STAGE: $STAGE"
|
|
echo "NOTE: .env files will NOT be overwritten"
|
|
|
|
# Zum Backend-Verzeichnis wechseln
|
|
cd backend
|
|
|
|
# Alle generierten Verzeichnisse löschen
|
|
echo "Lösche alle generierten Verzeichnisse..."
|
|
rm -rf node_modules/.cache/
|
|
rm -rf logs/
|
|
rm -rf tmp/
|
|
|
|
# Dependencies installieren
|
|
echo "Installing dependencies..."
|
|
npm ci --production
|
|
|
|
# Sichere .env-Dateien aus dem Ziel-Backend temporär
|
|
TEMP_ENV_DIR="/tmp/yourpart-env-backup-$$"
|
|
echo "Sichere .env-Dateien aus $BACKEND_TARGET..."
|
|
sudo mkdir -p "$TEMP_ENV_DIR"
|
|
if [ -d "$BACKEND_TARGET" ]; then
|
|
sudo find "$BACKEND_TARGET" -maxdepth 1 -name '.env*' -type f -exec cp {} "$TEMP_ENV_DIR/" \; 2>/dev/null || true
|
|
if [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then
|
|
echo "✓ .env-Dateien gesichert: $(ls $TEMP_ENV_DIR)"
|
|
else
|
|
echo "⚠ Keine .env-Dateien in $BACKEND_TARGET gefunden"
|
|
fi
|
|
fi
|
|
|
|
# Altes Backend löschen
|
|
echo "Lösche altes Backend..."
|
|
sudo rm -rf "$BACKEND_TARGET"
|
|
|
|
# Erstelle Backend-Verzeichnis
|
|
echo "Erstelle Backend-Verzeichnis..."
|
|
sudo mkdir -p "$BACKEND_TARGET"
|
|
sudo mkdir -p /opt/yourpart-data/adult-verification
|
|
|
|
# Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis)
|
|
echo "Kopiere neues Backend..."
|
|
if command -v rsync &> /dev/null; then
|
|
sudo rsync -av --exclude='.env*' --exclude='node_modules' . "$BACKEND_TARGET/" 2>/dev/null
|
|
if [ -d node_modules ]; then
|
|
sudo rsync -av --exclude='.env*' node_modules/ "$BACKEND_TARGET/node_modules/" 2>/dev/null || \
|
|
sudo cp -r node_modules "$BACKEND_TARGET/" 2>/dev/null
|
|
fi
|
|
else
|
|
# Fallback: Kopiere alles außer .env
|
|
sudo cp -r * "$BACKEND_TARGET/" 2>/dev/null
|
|
fi
|
|
|
|
# Stelle .env-Dateien wieder her
|
|
echo "Stelle .env-Dateien wieder her..."
|
|
if [ -d "$TEMP_ENV_DIR" ] && [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then
|
|
sudo cp "$TEMP_ENV_DIR"/.env* "$BACKEND_TARGET/" 2>/dev/null || true
|
|
echo "✓ .env-Dateien wiederhergestellt"
|
|
else
|
|
echo "⚠ Keine .env-Dateien zum Wiederherstellen vorhanden"
|
|
fi
|
|
sudo rm -rf "$TEMP_ENV_DIR"
|
|
|
|
# Prüfe ob .env vorhanden ist
|
|
if [ -f "$BACKEND_TARGET/.env" ]; then
|
|
echo "✓ .env-Datei ist vorhanden"
|
|
else
|
|
echo "⚠ WARNUNG: Keine .env-Datei in $BACKEND_TARGET gefunden!"
|
|
echo " Bitte manuell erstellen: sudo nano $BACKEND_TARGET/.env"
|
|
fi
|
|
|
|
# Berechtigungen setzen
|
|
echo "Setting permissions..."
|
|
sudo chown -R yourpart:yourpart "$BACKEND_TARGET"
|
|
sudo chmod -R 755 "$BACKEND_TARGET"
|
|
sudo chown -R yourpart:yourpart /opt/yourpart-data
|
|
sudo chmod -R 755 /opt/yourpart-data
|
|
# Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben
|
|
if [ -f "$BACKEND_TARGET/.env" ]; then
|
|
sudo chmod 600 "$BACKEND_TARGET/.env"
|
|
fi
|
|
|
|
# Systemd-Service aktualisieren und neu laden
|
|
echo "Updating systemd service..."
|
|
sudo cp yourpart.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
|
|
# Datenbank-Synchronisation durchführen
|
|
echo "Running database synchronization..."
|
|
cd "$BACKEND_TARGET"
|
|
|
|
# STAGE für Schema-Updates verwenden
|
|
echo "Running database sync with STAGE=$STAGE..."
|
|
export STAGE=$STAGE && npm run sync-db
|
|
|
|
# Service neu starten
|
|
echo "Restarting yourpart service..."
|
|
sudo systemctl restart yourpart
|
|
|
|
# Kurz warten und Status prüfen
|
|
sleep 2
|
|
echo "Checking service status..."
|
|
sudo systemctl status yourpart --no-pager
|
|
|
|
echo "Backend update completed!"
|