diff --git a/setup-kunde.sh b/setup-kunde.sh new file mode 100644 index 0000000..f5ed7bc --- /dev/null +++ b/setup-kunde.sh @@ -0,0 +1,210 @@ +#!/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"