Files
singlechat/deploy-to-opt.sh

149 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# SingleChat Deployment nach /opt/ypchat
# Dieses Skript kopiert die Anwendung nach /opt/ypchat und installiert sie dort
set -e
SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET_DIR="/opt/ypchat"
USER="www-data"
GROUP="www-data"
echo "=========================================="
echo "SingleChat Deployment nach /opt/ypchat"
echo "=========================================="
# Prüfe ob als root ausgeführt
if [ "$EUID" -ne 0 ]; then
echo "FEHLER: Dieses Skript muss als root ausgeführt werden!"
echo "Bitte führe aus: sudo ./deploy-to-opt.sh"
exit 1
fi
# Prüfe ob Source-Verzeichnis existiert
if [ ! -d "$SOURCE_DIR" ]; then
echo "FEHLER: Source-Verzeichnis $SOURCE_DIR existiert nicht!"
exit 1
fi
echo "Source-Verzeichnis: $SOURCE_DIR"
echo "Target-Verzeichnis: $TARGET_DIR"
echo ""
# Erstelle Target-Verzeichnis falls nicht vorhanden
if [ ! -d "$TARGET_DIR" ]; then
echo "Erstelle Target-Verzeichnis..."
mkdir -p "$TARGET_DIR"
echo "✓ Verzeichnis erstellt"
fi
# Kopiere Dateien (ausschließlich node_modules, .git, dist, logs, npm cache)
echo "Kopiere Dateien nach $TARGET_DIR..."
rsync -av --progress \
--exclude 'node_modules' \
--exclude '.git' \
--exclude 'client/node_modules' \
--exclude 'client/dist' \
--exclude 'docroot/dist' \
--exclude 'logs' \
--exclude '.env' \
--exclude '.npm-cache' \
--exclude '.npm' \
"$SOURCE_DIR/" "$TARGET_DIR/"
echo "✓ Dateien kopiert"
# Setze Besitzer
echo "Setze Besitzer auf $USER:$GROUP..."
chown -R $USER:$GROUP "$TARGET_DIR"
echo "✓ Besitzer gesetzt"
# Wechsle ins Target-Verzeichnis und führe Installation durch
echo ""
echo "Führe Installation in $TARGET_DIR durch..."
cd "$TARGET_DIR"
# Repariere npm Cache für www-data falls nötig
echo ""
echo "Prüfe npm Cache-Berechtigungen..."
if [ -d "/var/www/.npm" ]; then
chown -R $USER:$GROUP "/var/www/.npm" 2>/dev/null || true
fi
# Setze npm Cache auf ein Verzeichnis im App-Verzeichnis
NPM_CACHE_DIR="$TARGET_DIR/.npm-cache"
mkdir -p "$NPM_CACHE_DIR"
chown -R $USER:$GROUP "$NPM_CACHE_DIR"
# Installiere Dependencies
echo ""
echo "Installiere Dependencies..."
sudo -u $USER bash -c "cd '$TARGET_DIR' && HOME='$TARGET_DIR' npm config set cache '$NPM_CACHE_DIR' && HOME='$TARGET_DIR' npm run install:all"
if [ $? -ne 0 ]; then
echo "FEHLER: Installation der Dependencies fehlgeschlagen!"
exit 1
fi
echo "✓ Dependencies installiert"
# Baue Client
echo ""
echo "Baue Client für Production..."
sudo -u $USER bash -c "cd '$TARGET_DIR' && HOME='$TARGET_DIR' npm config set cache '$NPM_CACHE_DIR' && cd client && HOME='$TARGET_DIR' npm config set cache '$NPM_CACHE_DIR' && cd .. && HOME='$TARGET_DIR' npm run build"
if [ $? -ne 0 ]; then
echo "FEHLER: Build fehlgeschlagen!"
exit 1
fi
echo "✓ Client gebaut"
# Kopiere dist nach docroot
echo ""
echo "Kopiere gebaute Dateien nach docroot..."
if [ -d "$TARGET_DIR/docroot/dist" ]; then
rm -rf "$TARGET_DIR/docroot/dist"
fi
cp -r "$TARGET_DIR/client/dist" "$TARGET_DIR/docroot/"
chown -R $USER:$GROUP "$TARGET_DIR/docroot/dist"
echo "✓ Dateien kopiert"
# Erstelle .env Datei falls nicht vorhanden
if [ ! -f "$TARGET_DIR/.env" ]; then
echo ""
echo "Erstelle .env Datei..."
SESSION_SECRET=$(openssl rand -hex 32)
cat > "$TARGET_DIR/.env" << EOF
NODE_ENV=production
PORT=4000
SESSION_SECRET=$SESSION_SECRET
EOF
chown $USER:$GROUP "$TARGET_DIR/.env"
echo "✓ .env Datei erstellt"
echo "SESSION_SECRET wurde generiert: $SESSION_SECRET"
else
echo "✓ .env Datei existiert bereits"
fi
echo ""
echo "=========================================="
echo "Deployment abgeschlossen!"
echo "=========================================="
echo ""
echo "Nächste Schritte:"
echo "1. Installiere den Service:"
echo " cd $TARGET_DIR"
echo " sudo ./install-service-ypchat.sh"
echo ""
echo "2. Stoppe den alten Service:"
echo " sudo systemctl stop ypchat"
echo ""
echo "3. Starte den neuen Service:"
echo " sudo systemctl start ypchat"
echo " sudo systemctl status ypchat"
echo ""