149 lines
4.0 KiB
Bash
Executable File
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 ""
|
|
|