326 lines
7.3 KiB
Markdown
326 lines
7.3 KiB
Markdown
# 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
|