refactor(update scripts): enhance directory handling and error management
Some checks failed
Deploy to production / deploy (push) Failing after 1m46s
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.
This commit is contained in:
23
deploy-yourpart-bluegreen.sh
Executable file
23
deploy-yourpart-bluegreen.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Blue-Green: Deploy in einen Slot (TARGET), ohne /opt/yourpart als echtes Verzeichnis anzulegen.
|
||||||
|
# Live-Umschaltung: ln -sfn <slot> /opt/yourpart
|
||||||
|
#
|
||||||
|
# Aufruf (auf dem Server, im Repo-Root nach git pull):
|
||||||
|
# ./deploy-yourpart-bluegreen.sh /opt/yourpart-green
|
||||||
|
#
|
||||||
|
# Voraussetzung: /opt/yourpart ist ein Symlink auf den aktiven Slot.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
CURRENT_LINK="${CURRENT_LINK:-/opt/yourpart}"
|
||||||
|
TARGET="${1:?Ziel-Slot-Verzeichnis fehlt (z. B. /opt/yourpart-green)}"
|
||||||
|
|
||||||
|
if [ ! -L "$CURRENT_LINK" ]; then
|
||||||
|
echo "❌ ERROR: $CURRENT_LINK ist kein Symlink! (Blue-Green erfordert Symlink auf den aktiven Slot.)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
exec ./update.sh "$TARGET"
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
# Optionaler Parameter für STAGE (Standard: production)
|
TARGET_DIR="${1:?Zielverzeichnis fehlt: ./update-backend.sh <z. B. /opt/yourpart-green> [STAGE]}"
|
||||||
STAGE=${1:-production}
|
# Zweiter Parameter: STAGE für DB-Sync (früher erster Parameter)
|
||||||
|
STAGE="${2:-production}"
|
||||||
|
BACKEND_TARGET="$TARGET_DIR/backend"
|
||||||
|
|
||||||
echo "Updating YourPart Backend..."
|
echo "Updating YourPart Backend..."
|
||||||
|
echo "Ziel: $BACKEND_TARGET"
|
||||||
echo "Using STAGE: $STAGE"
|
echo "Using STAGE: $STAGE"
|
||||||
echo "NOTE: .env files will NOT be overwritten"
|
echo "NOTE: .env files will NOT be overwritten"
|
||||||
|
|
||||||
@@ -20,45 +24,45 @@ rm -rf tmp/
|
|||||||
echo "Installing dependencies..."
|
echo "Installing dependencies..."
|
||||||
npm ci --production
|
npm ci --production
|
||||||
|
|
||||||
# Sichere .env-Dateien aus /opt/yourpart/backend temporär
|
# Sichere .env-Dateien aus dem Ziel-Backend temporär
|
||||||
TEMP_ENV_DIR="/tmp/yourpart-env-backup-$$"
|
TEMP_ENV_DIR="/tmp/yourpart-env-backup-$$"
|
||||||
echo "Sichere .env-Dateien aus /opt/yourpart/backend..."
|
echo "Sichere .env-Dateien aus $BACKEND_TARGET..."
|
||||||
sudo mkdir -p "$TEMP_ENV_DIR"
|
sudo mkdir -p "$TEMP_ENV_DIR"
|
||||||
if [ -d /opt/yourpart/backend ]; then
|
if [ -d "$BACKEND_TARGET" ]; then
|
||||||
sudo find /opt/yourpart/backend -maxdepth 1 -name '.env*' -type f -exec cp {} "$TEMP_ENV_DIR/" \; 2>/dev/null || true
|
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
|
if [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then
|
||||||
echo "✓ .env-Dateien gesichert: $(ls $TEMP_ENV_DIR)"
|
echo "✓ .env-Dateien gesichert: $(ls $TEMP_ENV_DIR)"
|
||||||
else
|
else
|
||||||
echo "⚠ Keine .env-Dateien in /opt/yourpart/backend gefunden"
|
echo "⚠ Keine .env-Dateien in $BACKEND_TARGET gefunden"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Altes Backend löschen
|
# Altes Backend löschen
|
||||||
echo "Lösche altes Backend..."
|
echo "Lösche altes Backend..."
|
||||||
sudo rm -rf /opt/yourpart/backend
|
sudo rm -rf "$BACKEND_TARGET"
|
||||||
|
|
||||||
# Erstelle Backend-Verzeichnis
|
# Erstelle Backend-Verzeichnis
|
||||||
echo "Erstelle Backend-Verzeichnis..."
|
echo "Erstelle Backend-Verzeichnis..."
|
||||||
sudo mkdir -p /opt/yourpart/backend
|
sudo mkdir -p "$BACKEND_TARGET"
|
||||||
sudo mkdir -p /opt/yourpart-data/adult-verification
|
sudo mkdir -p /opt/yourpart-data/adult-verification
|
||||||
|
|
||||||
# Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis)
|
# Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis)
|
||||||
echo "Kopiere neues Backend..."
|
echo "Kopiere neues Backend..."
|
||||||
if command -v rsync &> /dev/null; then
|
if command -v rsync &> /dev/null; then
|
||||||
sudo rsync -av --exclude='.env*' --exclude='node_modules' . /opt/yourpart/backend/ 2>/dev/null
|
sudo rsync -av --exclude='.env*' --exclude='node_modules' . "$BACKEND_TARGET/" 2>/dev/null
|
||||||
if [ -d node_modules ]; then
|
if [ -d node_modules ]; then
|
||||||
sudo rsync -av --exclude='.env*' node_modules/ /opt/yourpart/backend/node_modules/ 2>/dev/null || \
|
sudo rsync -av --exclude='.env*' node_modules/ "$BACKEND_TARGET/node_modules/" 2>/dev/null || \
|
||||||
sudo cp -r node_modules /opt/yourpart/backend/ 2>/dev/null
|
sudo cp -r node_modules "$BACKEND_TARGET/" 2>/dev/null
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# Fallback: Kopiere alles außer .env
|
# Fallback: Kopiere alles außer .env
|
||||||
sudo cp -r * /opt/yourpart/backend/ 2>/dev/null
|
sudo cp -r * "$BACKEND_TARGET/" 2>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Stelle .env-Dateien wieder her
|
# Stelle .env-Dateien wieder her
|
||||||
echo "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
|
if [ -d "$TEMP_ENV_DIR" ] && [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then
|
||||||
sudo cp "$TEMP_ENV_DIR"/.env* /opt/yourpart/backend/ 2>/dev/null || true
|
sudo cp "$TEMP_ENV_DIR"/.env* "$BACKEND_TARGET/" 2>/dev/null || true
|
||||||
echo "✓ .env-Dateien wiederhergestellt"
|
echo "✓ .env-Dateien wiederhergestellt"
|
||||||
else
|
else
|
||||||
echo "⚠ Keine .env-Dateien zum Wiederherstellen vorhanden"
|
echo "⚠ Keine .env-Dateien zum Wiederherstellen vorhanden"
|
||||||
@@ -66,22 +70,22 @@ fi
|
|||||||
sudo rm -rf "$TEMP_ENV_DIR"
|
sudo rm -rf "$TEMP_ENV_DIR"
|
||||||
|
|
||||||
# Prüfe ob .env vorhanden ist
|
# Prüfe ob .env vorhanden ist
|
||||||
if [ -f /opt/yourpart/backend/.env ]; then
|
if [ -f "$BACKEND_TARGET/.env" ]; then
|
||||||
echo "✓ .env-Datei ist vorhanden"
|
echo "✓ .env-Datei ist vorhanden"
|
||||||
else
|
else
|
||||||
echo "⚠ WARNUNG: Keine .env-Datei in /opt/yourpart/backend gefunden!"
|
echo "⚠ WARNUNG: Keine .env-Datei in $BACKEND_TARGET gefunden!"
|
||||||
echo " Bitte manuell erstellen: sudo nano /opt/yourpart/backend/.env"
|
echo " Bitte manuell erstellen: sudo nano $BACKEND_TARGET/.env"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Berechtigungen setzen
|
# Berechtigungen setzen
|
||||||
echo "Setting permissions..."
|
echo "Setting permissions..."
|
||||||
sudo chown -R yourpart:yourpart /opt/yourpart/backend
|
sudo chown -R yourpart:yourpart "$BACKEND_TARGET"
|
||||||
sudo chmod -R 755 /opt/yourpart/backend
|
sudo chmod -R 755 "$BACKEND_TARGET"
|
||||||
sudo chown -R yourpart:yourpart /opt/yourpart-data
|
sudo chown -R yourpart:yourpart /opt/yourpart-data
|
||||||
sudo chmod -R 755 /opt/yourpart-data
|
sudo chmod -R 755 /opt/yourpart-data
|
||||||
# Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben
|
# Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben
|
||||||
if [ -f /opt/yourpart/backend/.env ]; then
|
if [ -f "$BACKEND_TARGET/.env" ]; then
|
||||||
sudo chmod 600 /opt/yourpart/backend/.env
|
sudo chmod 600 "$BACKEND_TARGET/.env"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Systemd-Service aktualisieren und neu laden
|
# Systemd-Service aktualisieren und neu laden
|
||||||
@@ -91,7 +95,7 @@ sudo systemctl daemon-reload
|
|||||||
|
|
||||||
# Datenbank-Synchronisation durchführen
|
# Datenbank-Synchronisation durchführen
|
||||||
echo "Running database synchronization..."
|
echo "Running database synchronization..."
|
||||||
cd /opt/yourpart/backend
|
cd "$BACKEND_TARGET"
|
||||||
|
|
||||||
# STAGE für Schema-Updates verwenden
|
# STAGE für Schema-Updates verwenden
|
||||||
echo "Running database sync with STAGE=$STAGE..."
|
echo "Running database sync with STAGE=$STAGE..."
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
TARGET_DIR="${1:?Zielverzeichnis fehlt: ./update-frontend.sh <z. B. /opt/yourpart-green>}"
|
||||||
|
FRONTEND_TARGET="$TARGET_DIR/frontend"
|
||||||
|
|
||||||
echo "=== YourPart Frontend Update ==="
|
echo "=== YourPart Frontend Update ==="
|
||||||
|
echo "Ziel: $FRONTEND_TARGET"
|
||||||
echo "NOTE: .env files will NOT be overwritten"
|
echo "NOTE: .env files will NOT be overwritten"
|
||||||
|
|
||||||
# 1. Zum Frontend-Verzeichnis wechseln
|
# 1. Zum Frontend-Verzeichnis wechseln
|
||||||
@@ -21,9 +26,9 @@ rm -rf node_modules/.cache/
|
|||||||
# 4. Verwende bestehende .env-Dateien im Zielverzeichnis für Build
|
# 4. Verwende bestehende .env-Dateien im Zielverzeichnis für Build
|
||||||
# Kopiere temporär die bestehende .env vom Ziel, falls vorhanden
|
# Kopiere temporär die bestehende .env vom Ziel, falls vorhanden
|
||||||
TEMP_ENV="/tmp/yourpart-frontend-env-$$"
|
TEMP_ENV="/tmp/yourpart-frontend-env-$$"
|
||||||
if [ -f /opt/yourpart/frontend/.env ]; then
|
if [ -f "$FRONTEND_TARGET/.env" ]; then
|
||||||
echo "Nutze bestehende .env-Datei vom Zielverzeichnis für Build..."
|
echo "Nutze bestehende .env-Datei vom Zielverzeichnis für Build..."
|
||||||
sudo cp /opt/yourpart/frontend/.env "$TEMP_ENV"
|
sudo cp "$FRONTEND_TARGET/.env" "$TEMP_ENV"
|
||||||
sudo chown $USER:$USER "$TEMP_ENV"
|
sudo chown $USER:$USER "$TEMP_ENV"
|
||||||
cp "$TEMP_ENV" .env
|
cp "$TEMP_ENV" .env
|
||||||
elif [ -f .env.production ]; then
|
elif [ -f .env.production ]; then
|
||||||
@@ -73,36 +78,36 @@ rm -f "$TEMP_ENV"
|
|||||||
|
|
||||||
# 6. Zielverzeichnis erstellen (falls nicht vorhanden)
|
# 6. Zielverzeichnis erstellen (falls nicht vorhanden)
|
||||||
echo "Erstelle Zielverzeichnis..."
|
echo "Erstelle Zielverzeichnis..."
|
||||||
sudo mkdir -p /opt/yourpart/frontend/dist
|
sudo mkdir -p "$FRONTEND_TARGET/dist"
|
||||||
|
|
||||||
# 7. Altes Frontend löschen (außer .env-Dateien)
|
# 7. Altes Frontend löschen (außer .env-Dateien)
|
||||||
echo "Lösche altes Frontend (außer .env-Dateien)..."
|
echo "Lösche altes Frontend (außer .env-Dateien)..."
|
||||||
sudo find /opt/yourpart/frontend/dist -mindepth 1 -exec rm -rf {} + 2>/dev/null || true
|
sudo find "$FRONTEND_TARGET/dist" -mindepth 1 -exec rm -rf {} + 2>/dev/null || true
|
||||||
|
|
||||||
# 8. Neues Frontend kopieren
|
# 8. Neues Frontend kopieren
|
||||||
echo "Kopiere neues Frontend..."
|
echo "Kopiere neues Frontend..."
|
||||||
sudo cp -r dist/* /opt/yourpart/frontend/dist/
|
sudo cp -r dist/* "$FRONTEND_TARGET/dist/"
|
||||||
|
|
||||||
# 9. .env-Dateien NICHT überschreiben - bestehende beibehalten
|
# 9. .env-Dateien NICHT überschreiben - bestehende beibehalten
|
||||||
if [ -f /opt/yourpart/frontend/.env ]; then
|
if [ -f "$FRONTEND_TARGET/.env" ]; then
|
||||||
echo "✓ Bestehende .env-Datei wurde beibehalten (nicht überschrieben)"
|
echo "✓ Bestehende .env-Datei wurde beibehalten (nicht überschrieben)"
|
||||||
else
|
else
|
||||||
echo "⚠ Keine .env-Datei im Zielverzeichnis gefunden"
|
echo "⚠ Keine .env-Datei im Zielverzeichnis gefunden"
|
||||||
# Falls .env im Quellverzeichnis existiert, kopiere sie nur wenn sie im Ziel nicht existiert
|
# Falls .env im Quellverzeichnis existiert, kopiere sie nur wenn sie im Ziel nicht existiert
|
||||||
if [ -f .env ]; then
|
if [ -f .env ]; then
|
||||||
echo "Kopiere .env-Datei (nur wenn nicht vorhanden)..."
|
echo "Kopiere .env-Datei (nur wenn nicht vorhanden)..."
|
||||||
sudo cp .env /opt/yourpart/frontend/
|
sudo cp .env "$FRONTEND_TARGET/"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 10. Berechtigungen setzen
|
# 10. Berechtigungen setzen
|
||||||
echo "Setze Berechtigungen..."
|
echo "Setze Berechtigungen..."
|
||||||
sudo chown -R www-data:www-data /opt/yourpart/frontend/dist
|
sudo chown -R www-data:www-data "$FRONTEND_TARGET/dist"
|
||||||
if [ -f /opt/yourpart/frontend/.env ]; then
|
if [ -f "$FRONTEND_TARGET/.env" ]; then
|
||||||
sudo chown www-data:www-data /opt/yourpart/frontend/.env
|
sudo chown www-data:www-data "$FRONTEND_TARGET/.env"
|
||||||
sudo chmod 644 /opt/yourpart/frontend/.env
|
sudo chmod 644 "$FRONTEND_TARGET/.env"
|
||||||
fi
|
fi
|
||||||
sudo chmod -R 755 /opt/yourpart/frontend/dist
|
sudo chmod -R 755 "$FRONTEND_TARGET/dist"
|
||||||
|
|
||||||
# 11. Apache neu laden
|
# 11. Apache neu laden
|
||||||
echo "Lade Apache neu..."
|
echo "Lade Apache neu..."
|
||||||
@@ -115,4 +120,3 @@ echo "✅ Frontend aktualisiert"
|
|||||||
echo "✅ .env-Dateien wurden NICHT überschrieben"
|
echo "✅ .env-Dateien wurden NICHT überschrieben"
|
||||||
echo "✅ Apache neu geladen"
|
echo "✅ Apache neu geladen"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
TARGET_DIR="${1:?Zielverzeichnis fehlt: ./update.sh <z. B. /opt/yourpart-green>}"
|
||||||
|
|
||||||
echo "=== YourPart Update Script ==="
|
echo "=== YourPart Update Script ==="
|
||||||
|
echo "Ziel-Slot: $TARGET_DIR"
|
||||||
echo "Aktualisiert die Anwendung, ohne .env-Dateien zu überschreiben"
|
echo "Aktualisiert die Anwendung, ohne .env-Dateien zu überschreiben"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
@@ -35,11 +38,11 @@ fi
|
|||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "=== Updating Backend ==="
|
echo "=== Updating Backend ==="
|
||||||
./update-backend.sh
|
./update-backend.sh "$TARGET_DIR"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "=== Building and Updating Frontend ==="
|
echo "=== Building and Updating Frontend ==="
|
||||||
./update-frontend.sh
|
./update-frontend.sh "$TARGET_DIR"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "=== Update Completed! ==="
|
echo "=== Update Completed! ==="
|
||||||
|
|||||||
Reference in New Issue
Block a user