# PlusFit24 – Mitgliedschafts-Anmeldesystem ## Vollständige Installationsanleitung --- ## 🏗️ Übersicht deiner Server-Infrastruktur ``` Internet │ ▼ NGINX (192.168.0.157) ← SSL Zertifikat hier │ plusfit24.software-joksch.com │ Proxy → Port 3100 ▼ Node.js App Server (192.168.0.163:3100) │ ▼ MariaDB (85.215.63.122:3306) ``` --- ## SCHRITT 1: Datenbank einrichten (MariaDB 85.215.63.122) Verbinde dich mit deinem MariaDB Server: ```bash mysql -h 85.215.63.122 -u root -p ``` Führe das Schema aus: ```bash mysql -h 85.215.63.122 -u root -p < database/schema.sql ``` Erstelle einen dedizierten DB-User (sicherer als root): ```sql CREATE USER 'plusfit24'@'192.168.0.163' IDENTIFIED BY 'DEIN_SICHERES_PASSWORT'; GRANT ALL PRIVILEGES ON plusfit24.* TO 'plusfit24'@'192.168.0.163'; FLUSH PRIVILEGES; ``` ⚠️ **Wichtig:** Ersetze `DEIN_SICHERES_PASSWORT` mit einem echten starken Passwort! --- ## SCHRITT 2: App auf Node.js Server einrichten (192.168.0.163) ### 2.1 Projekt auf den Server übertragen **Option A – via Gitea (empfohlen):** ```bash # Auf dem Gitea-Server (192.168.0.221): Neues Repository anlegen # Dann auf dem App-Server: ssh user@192.168.0.163 cd /var/www git clone http://192.168.0.221/dein-user/plusfit24.git cd plusfit24 ``` **Option B – direkt per SCP:** ```bash # Von deinem lokalen Rechner: scp -r /pfad/zu/plusfit24 user@192.168.0.163:/var/www/plusfit24 ``` ### 2.2 Node.js installieren (falls noch nicht vorhanden) ```bash # Node.js 20 LTS installieren curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs # Version prüfen node --version # sollte v20.x.x zeigen npm --version ``` ### 2.3 Abhängigkeiten installieren ```bash cd /var/www/plusfit24 npm install ``` ### 2.4 Umgebungsvariablen konfigurieren ```bash cp .env.example .env # oder direkt: nano .env ``` Fülle die `.env` aus: ```env DB_HOST=85.215.63.122 DB_PORT=3306 DB_USER=plusfit24 DB_PASSWORD=DEIN_SICHERES_PASSWORT ← gleich wie in Schritt 1 DB_NAME=plusfit24 SESSION_SECRET=ein-sehr-langer-zufaelliger-string-hier-aendern ADMIN_USER=admin ADMIN_PASSWORD=DeinSicheresAdminPasswort123! PORT=3100 ``` 🔐 **Tipp:** Session Secret generieren: ```bash node -e "console.log(require('crypto').randomBytes(48).toString('hex'))" ``` ### 2.5 Test-Start (einmalig zum Prüfen) ```bash node app.js # Ausgabe: 🚀 PlusFit24 Server läuft auf Port 3100 # Ausgabe: ✅ Admin Account erstellt: admin ``` Mit Ctrl+C stoppen. --- ## SCHRITT 3: PM2 installieren (Prozess-Manager) ```bash # PM2 global installieren sudo npm install -g pm2 # App mit PM2 starten cd /var/www/plusfit24 pm2 start ecosystem.config.js # Status prüfen pm2 status # Logs ansehen pm2 logs plusfit24 # PM2 beim Systemstart automatisch starten pm2 startup # Den angezeigten Befehl kopieren und ausführen, dann: pm2 save ``` **Wichtige PM2 Befehle:** ```bash pm2 restart plusfit24 # App neu starten pm2 stop plusfit24 # App stoppen pm2 logs plusfit24 # Live-Logs anzeigen pm2 monit # Monitor-Ansicht ``` --- ## SCHRITT 4: NGINX konfigurieren (192.168.0.157) ### 4.1 NGINX Konfiguration kopieren ```bash # Auf dem NGINX Server einloggen ssh user@192.168.0.157 # Konfigurationsdatei erstellen sudo nano /etc/nginx/sites-available/plusfit24 ``` Inhalt aus der Datei `nginx/plusfit24.conf` einfügen. ⚠️ **SSL Pfade anpassen!** Suche im File nach: ``` ssl_certificate /etc/ssl/certs/... ssl_certificate_key /etc/ssl/private/... ``` Passe die Pfade auf deine tatsächlichen Zertifikat-Dateien an. ### 4.2 Site aktivieren ```bash # Symlink erstellen sudo ln -s /etc/nginx/sites-available/plusfit24 /etc/nginx/sites-enabled/ # Konfiguration prüfen sudo nginx -t # Bei "syntax is ok": NGINX neu laden sudo systemctl reload nginx ``` ### 4.3 Firewall prüfen (falls aktiv) ```bash # Auf App-Server: Port 3100 für NGINX-Server freigeben sudo ufw allow from 192.168.0.157 to any port 3100 ``` --- ## SCHRITT 5: DNS einrichten Bei deinem DNS-Anbieter einen A-Record erstellen: ``` Typ: A Name: plusfit24.software-joksch.com Ziel: [Öffentliche IP deines NGINX-Servers] TTL: 300 ``` --- ## SCHRITT 6: Testen 1. **Datenbank-Verbindung:** `node -e "require('./config/database').query('SELECT 1').then(()=>console.log('DB OK')).catch(console.error)"` 2. **App läuft:** `pm2 status` → Status sollte "online" sein 3. **Webseite:** https://plusfit24.software-joksch.com aufrufen 4. **Admin-Bereich:** https://plusfit24.software-joksch.com/admin/login - Benutzername: `admin` (oder was du in .env gesetzt hast) - Passwort: aus der `.env` Datei --- ## 📋 Admin-Bereich Anleitung ### Tarife verwalten - **Neuer Tarif:** Button "+ Neuer Tarif" → Formular ausfüllen - **Deaktivieren:** Tarif-Card → "⏸ Deaktivieren" (Tarif bleibt erhalten, erscheint nicht mehr auf der Webseite) - **Preis ändern:** Alten Tarif deaktivieren → Neuen Tarif mit neuem Preis erstellen - **Löschen:** Nur möglich wenn keine Mitglieder den Tarif haben ### Mitglieder ansehen - Vollständige Liste aller angemeldeten Mitglieder - Suchfunktion nach Name oder E-Mail - ⚠️-Symbol zeigt Minderjährige ### Passwort ändern - Admin → Einstellungen → Passwort ändern --- ## 🔧 Troubleshooting **App startet nicht:** ```bash pm2 logs plusfit24 --lines 50 # Häufige Ursachen: DB nicht erreichbar, .env fehlt, Port belegt ``` **DB-Verbindungsfehler:** ```bash # Verbindung testen mysql -h 85.215.63.122 -u plusfit24 -p plusfit24 ``` **NGINX 502 Bad Gateway:** ```bash # Prüfen ob App läuft pm2 status # Prüfen ob Port erreichbar curl http://192.168.0.163:3100 ``` **Nach Code-Updates:** ```bash cd /var/www/plusfit24 git pull # falls Gitea genutzt npm install # falls neue Dependencies pm2 restart plusfit24 ``` --- ## 📁 Projektstruktur ``` plusfit24/ ├── app.js # Haupt-Einstiegspunkt ├── package.json ├── .env # ⚠️ Nicht in Git einchecken! ├── ecosystem.config.js # PM2 Konfiguration ├── config/ │ └── database.js # DB-Verbindung ├── middleware/ │ └── auth.js # Admin-Authentifizierung ├── routes/ │ ├── index.js # Öffentliche Routen (Tarife, Anmeldung) │ ├── admin.js # Admin-Routen │ └── api.js # API (E-Mail-Prüfung, Formular-Submit) ├── views/ │ ├── index.ejs # Tarif-Auswahl │ ├── signup.ejs # Anmelde-Formular (4 Schritte) │ ├── success.ejs # Erfolgsseite │ ├── error.ejs # Fehlerseite │ └── admin/ │ ├── login.ejs # Admin Login │ └── dashboard.ejs # Admin Dashboard ├── public/ │ ├── css/style.css # Alle Styles │ └── pdfs/ │ └── Einverstaendniserklaerung.pdf ├── database/ │ └── schema.sql # Datenbank-Schema └── nginx/ └── plusfit24.conf # NGINX Konfiguration ``` --- ## 🔐 Sicherheitshinweise 1. `.env` niemals in Git einchecken (ist in `.gitignore`) 2. Starke Passwörter für DB und Admin verwenden 3. DB-User nur von App-Server-IP Zugriff erlauben 4. SESSION_SECRET muss ein langer, zufälliger String sein 5. Admin-URL ist `/admin/login` – nicht öffentlich bewerben