211 lines
6.1 KiB
Bash
211 lines
6.1 KiB
Bash
#!/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"
|