Vertragsverwaltung_Plusfit24/setup-kunde.sh

211 lines
6.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================
# PlusFit24 Neuen Kunden einrichten
# Verwendung: ./setup-kunde.sh <kundenname>
# Beispiel: ./setup-kunde.sh fitnessstudio-berlin
# ============================================
set -e
# ---- Parameter prüfen ----
if [ -z "$1" ]; then
echo "❌ Verwendung: ./setup-kunde.sh <kundenname>"
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"