diff --git a/.env b/.env new file mode 100644 index 0000000..a648d8a --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +NODE_ENV=production +PORT=4000 +SESSION_SECRET=0cd0526f8dd9ab9149bca24010f6207d16d0c4ae28dde53330277b8fcffb2c8b diff --git a/deploy-to-opt.sh b/deploy-to-opt.sh new file mode 100755 index 0000000..549d0f7 --- /dev/null +++ b/deploy-to-opt.sh @@ -0,0 +1,134 @@ +#!/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) +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' \ + "$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" + +# Installiere Dependencies +echo "" +echo "Installiere Dependencies..." +sudo -u $USER bash -c "cd '$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' && 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 "" +