7.3 KiB
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:
mysql -h 85.215.63.122 -u root -p
Führe das Schema aus:
mysql -h 85.215.63.122 -u root -p < database/schema.sql
Erstelle einen dedizierten DB-User (sicherer als root):
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):
# 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:
# 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)
# 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
cd /var/www/plusfit24
npm install
2.4 Umgebungsvariablen konfigurieren
cp .env.example .env # oder direkt:
nano .env
Fülle die .env aus:
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:
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
2.5 Test-Start (einmalig zum Prüfen)
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)
# 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:
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
# 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
# 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)
# 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
-
Datenbank-Verbindung:
node -e "require('./config/database').query('SELECT 1').then(()=>console.log('DB OK')).catch(console.error)" -
App läuft:
pm2 status→ Status sollte "online" sein -
Webseite: https://plusfit24.software-joksch.com aufrufen
-
Admin-Bereich: https://plusfit24.software-joksch.com/admin/login
- Benutzername:
admin(oder was du in .env gesetzt hast) - Passwort: aus der
.envDatei
- Benutzername:
📋 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:
pm2 logs plusfit24 --lines 50
# Häufige Ursachen: DB nicht erreichbar, .env fehlt, Port belegt
DB-Verbindungsfehler:
# Verbindung testen
mysql -h 85.215.63.122 -u plusfit24 -p plusfit24
NGINX 502 Bad Gateway:
# Prüfen ob App läuft
pm2 status
# Prüfen ob Port erreichbar
curl http://192.168.0.163:3100
Nach Code-Updates:
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
.envniemals in Git einchecken (ist in.gitignore)- Starke Passwörter für DB und Admin verwenden
- DB-User nur von App-Server-IP Zugriff erlauben
- SESSION_SECRET muss ein langer, zufälliger String sein
- Admin-URL ist
/admin/login– nicht öffentlich bewerben