#!/bin/bash # ============================================ # PlusFit24 – Neuen Kunden einrichten # Verwendung: ./setup-kunde.sh # Beispiel: ./setup-kunde.sh fitnessstudio-berlin # ============================================ set -e # ---- Parameter prüfen ---- if [ -z "$1" ]; then echo "❌ Verwendung: ./setup-kunde.sh " echo " Beispiel: ./setup-kunde.sh fitnessstudio-berlin" exit 1 fi KUNDE=$1 APP_DIR="/opt/apps/$KUNDE" DB_NAME=$(echo $KUNDE | tr '-' '_' | tr '.' '_') SERVICE_NAME=$KUNDE # ---- Nächsten freien Port finden ---- START_PORT=3100 PORT=$START_PORT echo "🔍 Suche freien Port ab $START_PORT..." while true; do # Prüfen ob Port in einer .env Datei schon verwendet wird PORT_IN_USE=$(grep -r "^PORT=$PORT$" /opt/apps/*/env 2>/dev/null || \ grep -r "^PORT=$PORT$" /opt/apps/*/.env 2>/dev/null || true) # Prüfen ob Port wirklich offen ist if [ -z "$PORT_IN_USE" ] && ! ss -tlnp | grep -q ":$PORT "; then echo "✅ Freier Port gefunden: $PORT" break fi PORT=$((PORT + 1)) if [ $PORT -gt 3200 ]; then echo "❌ Kein freier Port zwischen 3100 und 3200 gefunden!" exit 1 fi done echo "" echo "================================================" echo " PlusFit24 – Kunde einrichten" echo " Kunde: $KUNDE" echo " Port: $PORT (automatisch gewählt)" echo " Ordner: $APP_DIR" echo " DB: $DB_NAME" echo "================================================" echo "" # ---- Prüfen ob Kunde bereits existiert ---- if [ -d "$APP_DIR" ]; then echo "❌ Ordner $APP_DIR existiert bereits!" exit 1 fi # ---- Zugangsdaten abfragen ---- read -p "DB Root Passwort (MariaDB): " DB_ROOT_PW read -p "DB User Passwort (wird neu erstellt): " DB_USER_PW read -p "Admin Benutzername: " ADMIN_USER read -p "Admin Passwort: " ADMIN_PW read -p "E-Mail Absender (Ionos): " MAIL_USER read -p "E-Mail Passwort: " MAIL_PW read -p "Domain (z.B. kunde.software-joksch.com): " DOMAIN read -p "Studio-Name (für E-Mails): " STUDIO_NAME echo "" echo "▶ Starte Einrichtung für '$KUNDE' auf Port $PORT..." echo "" # ---- 1. App-Ordner kopieren ---- echo "[1/7] 📁 Kopiere App-Dateien..." cp -r /opt/apps/Vertragsverwaltung_Plusfit24 $APP_DIR rm -f $APP_DIR/.env rm -f $APP_DIR/setup-kunde.sh # ---- 2. Datenbank erstellen ---- echo "[2/7] 🗄️ Erstelle Datenbank und User..." mysql -h 85.215.63.122 -u root -p"$DB_ROOT_PW" << SQL CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS '${DB_NAME}'@'192.168.0.163' IDENTIFIED BY '${DB_USER_PW}'; GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_NAME}'@'192.168.0.163'; FLUSH PRIVILEGES; SQL echo "[3/7] 📋 Erstelle Tabellen..." mysql -h 85.215.63.122 -u root -p"$DB_ROOT_PW" $DB_NAME < $APP_DIR/database/schema.sql for f in billing_migration finance_migration nfc_migration renewal_migration \ agreed_price_migration startpackage_migration confirmation_migration; do mysql -h 85.215.63.122 -u root -p"$DB_ROOT_PW" $DB_NAME < $APP_DIR/database/${f}.sql 2>/dev/null || true done # ---- 3. .env erstellen ---- echo "[4/7] ⚙️ Erstelle Konfiguration..." SESSION_SECRET=$(node -e "console.log(require('crypto').randomBytes(48).toString('hex'))") cat > $APP_DIR/.env << ENV # Datenbank DB_HOST=85.215.63.122 DB_PORT=3306 DB_USER=${DB_NAME} DB_PASSWORD=${DB_USER_PW} DB_NAME=${DB_NAME} # Session SESSION_SECRET=${SESSION_SECRET} # Admin ADMIN_USER=${ADMIN_USER} ADMIN_PASSWORD=${ADMIN_PW} # App PORT=${PORT} APP_URL=https://${DOMAIN} # E-Mail (Ionos) MAIL_HOST=smtp.ionos.de MAIL_PORT=587 MAIL_SECURE=false MAIL_USER=${MAIL_USER} MAIL_PASSWORD=${MAIL_PW} MAIL_FROM=${STUDIO_NAME} <${MAIL_USER}> ENV # ---- 4. npm install ---- echo "[5/7] 📦 Installiere Abhängigkeiten..." cd $APP_DIR && npm install --silent # ---- 5. Systemd Service erstellen ---- echo "[6/7] 🔧 Erstelle und starte Service..." cat > /etc/systemd/system/${SERVICE_NAME}.service << SERVICE [Unit] Description=${STUDIO_NAME} – PlusFit24 App After=network.target [Service] Type=simple User=root WorkingDirectory=${APP_DIR} ExecStart=/usr/bin/node ${APP_DIR}/app.js Restart=always RestartSec=10 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target SERVICE systemctl daemon-reload systemctl enable $SERVICE_NAME systemctl start $SERVICE_NAME # ---- 6. NGINX Config erstellen ---- echo "[7/7] 🌐 Erstelle NGINX Konfiguration..." NGINX_CONF="/etc/nginx/sites-available/$DOMAIN" cat > $NGINX_CONF << NGINX server { listen 443 ssl http2; server_name ${DOMAIN}; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/software-joksch.com.key; client_max_body_size 10M; location / { proxy_pass http://192.168.0.163:${PORT}; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Upgrade \$http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_read_timeout 3600; } } NGINX # ---- 7. Ergebnis ---- sleep 3 echo "" if systemctl is-active --quiet $SERVICE_NAME; then STATUS="✅ LÄUFT" else STATUS="❌ FEHLER" fi echo "================================================" echo " $STATUS – $STUDIO_NAME" echo "================================================" echo " 🌐 URL: https://$DOMAIN" echo " 🔑 Admin: https://$DOMAIN/admin/login" echo " 👤 Benutzer: $ADMIN_USER" echo " 🔌 Port: $PORT" echo " 🗄️ Datenbank: $DB_NAME" echo " 📁 Ordner: $APP_DIR" echo "================================================" echo "" echo "⚠️ Noch auf dem NGINX-Server ausführen:" echo " ssh user@192.168.0.157" echo " ln -s $NGINX_CONF /etc/nginx/sites-enabled/" echo " nginx -t && systemctl reload nginx" echo "" # Port-Übersicht speichern echo "$PORT $KUNDE $DOMAIN" >> /opt/apps/ports.txt echo "📋 Port-Übersicht gespeichert in /opt/apps/ports.txt"