setup Datei erstellt für andere Kunden
This commit is contained in:
parent
9dc8f554b9
commit
98e80beacd
210
setup-kunde.sh
Normal file
210
setup-kunde.sh
Normal file
@ -0,0 +1,210 @@
|
||||
#!/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"
|
||||
Loading…
Reference in New Issue
Block a user