Files
Ninjaserver/wiki/Troubleshooting.md
2025-09-23 14:13:24 +02:00

688 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🐛 Troubleshooting
Problembehandlung und Lösungen für häufige Probleme im Ninja Cross Parkour System.
## 📋 Inhaltsverzeichnis
- [🚨 Kritische Probleme](#-kritische-probleme)
- [🔧 Installation](#-installation)
- [🗄️ Datenbank](#-datenbank)
- [🌐 API](#-api)
- [🏆 Achievements](#-achievements)
- [📊 Performance](#-performance)
- [🔒 Sicherheit](#-sicherheit)
- [📱 Frontend](#-frontend)
## 🚨 Kritische Probleme
### Server startet nicht
**Symptome:**
- `npm start` schlägt fehl
- Port-Fehler
- Abhängigkeitsfehler
**Lösungen:**
```bash
# Port freigeben
sudo lsof -ti:3000 | xargs kill -9
# Abhängigkeiten neu installieren
rm -rf node_modules package-lock.json
npm install
# Anderen Port verwenden
PORT=3001 npm start
# Logs prüfen
tail -f logs/server.log
```
### Datenbank-Verbindung fehlgeschlagen
**Symptome:**
- `ECONNREFUSED` Fehler
- `database connection failed`
- Timeout-Fehler
**Lösungen:**
```bash
# PostgreSQL-Status prüfen
sudo systemctl status postgresql
# PostgreSQL starten
sudo systemctl start postgresql
# Verbindung testen
psql -h localhost -U username -d ninjaserver
# .env-Datei prüfen
cat .env | grep DB_
```
### API antwortet nicht
**Symptome:**
- 500 Internal Server Error
- Timeout-Fehler
- Leere Antworten
**Lösungen:**
```bash
# Server-Status prüfen
curl http://localhost:3000/health
# Logs analysieren
tail -f logs/server.log
# Datenbank-Verbindung prüfen
psql -d ninjaserver -c "SELECT NOW();"
# Speicher prüfen
free -h
df -h
```
## 🔧 Installation
### Node.js-Version inkompatibel
**Symptom:**
```
Error: Node.js version 14.x is not supported. Please use Node.js 16 or higher.
```
**Lösung:**
```bash
# Node.js-Version prüfen
node --version
# Node.js aktualisieren (Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Node.js aktualisieren (macOS)
brew install node@18
# Node.js aktualisieren (Windows)
# Download von https://nodejs.org/
```
### npm install schlägt fehl
**Symptome:**
- Permission denied
- ENOENT Fehler
- Network timeout
**Lösungen:**
```bash
# Berechtigungen prüfen
sudo chown -R $(whoami) ~/.npm
# Cache leeren
npm cache clean --force
# Registry wechseln
npm config set registry https://registry.npmjs.org/
# Mit sudo installieren (nicht empfohlen)
sudo npm install
```
### PostgreSQL nicht installiert
**Symptom:**
```
Error: connect ECONNREFUSED 127.0.0.1:5432
```
**Lösung:**
```bash
# PostgreSQL installieren (Ubuntu/Debian)
sudo apt update
sudo apt install postgresql postgresql-contrib
# PostgreSQL starten
sudo systemctl start postgresql
sudo systemctl enable postgresql
# Benutzer erstellen
sudo -u postgres createuser --interactive
sudo -u postgres createdb ninjaserver
```
### Umgebungsvariablen fehlen
**Symptom:**
```
Error: Missing required environment variable: DB_HOST
```
**Lösung:**
```bash
# .env-Datei erstellen
cp .env.example .env
# .env-Datei bearbeiten
nano .env
# Beispiel-Inhalt:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=ninjaserver
DB_USER=username
DB_PASSWORD=password
JWT_SECRET=your-secret-key
```
## 🗄️ Datenbank
### Datenbank existiert nicht
**Symptom:**
```
Error: database "ninjaserver" does not exist
```
**Lösung:**
```bash
# Datenbank erstellen
sudo -u postgres createdb ninjaserver
# Oder mit psql
psql -U postgres -c "CREATE DATABASE ninjaserver;"
```
### Tabellen fehlen
**Symptom:**
```
Error: relation "players" does not exist
```
**Lösung:**
```bash
# Datenbank initialisieren
npm run init-db
# Oder manuell
psql -d ninjaserver -f scripts/init-db.js
```
### Verbindungslimit erreicht
**Symptom:**
```
Error: too many connections
```
**Lösung:**
```sql
-- Aktive Verbindungen prüfen
SELECT count(*) FROM pg_stat_activity;
-- Verbindungen beenden
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle' AND query_start < NOW() - INTERVAL '5 minutes';
-- Verbindungslimit erhöhen
ALTER SYSTEM SET max_connections = 200;
SELECT pg_reload_conf();
```
### Datenbank-Corruption
**Symptom:**
```
Error: database is not accepting commands
```
**Lösung:**
```bash
# Datenbank reparieren
pg_ctl stop
pg_ctl start -D /var/lib/postgresql/data
# Vakuum durchführen
psql -d ninjaserver -c "VACUUM FULL;"
# Backup wiederherstellen
psql -d ninjaserver < backup.sql
```
## 🌐 API
### 401 Unauthorized
**Symptom:**
```
{"success": false, "message": "API-Key erforderlich"}
```
**Lösung:**
```bash
# API-Key generieren
curl -X POST http://localhost:3000/api/v1/web/generate-api-key \
-H "Content-Type: application/json" \
-d '{"description": "Test Key"}'
# API-Key verwenden
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/v1/private/locations
```
### 403 Forbidden
**Symptom:**
```
{"success": false, "message": "Keine Berechtigung"}
```
**Lösung:**
```bash
# Admin-Token verwenden
curl -H "Authorization: Bearer ADMIN_TOKEN" \
http://localhost:3000/api/v1/admin/players
# Oder API-Key mit Admin-Rechten generieren
```
### 404 Not Found
**Symptom:**
```
{"success": false, "message": "Ressource nicht gefunden"}
```
**Lösung:**
```bash
# Korrekte URL verwenden
curl http://localhost:3000/api/v1/public/locations
# Endpoint-Liste prüfen
curl http://localhost:3000/api-docs
```
### 500 Internal Server Error
**Symptom:**
```
{"success": false, "message": "Internal Server Error"}
```
**Lösung:**
```bash
# Logs prüfen
tail -f logs/server.log
# Datenbank-Verbindung prüfen
psql -d ninjaserver -c "SELECT NOW();"
# Server neu starten
npm restart
```
### CORS-Fehler
**Symptom:**
```
Access to fetch at 'http://localhost:3000/api' from origin 'http://localhost:8080' has been blocked by CORS policy
```
**Lösung:**
```javascript
// CORS-Middleware konfigurieren
app.use(cors({
origin: ['http://localhost:8080', 'https://yourdomain.com'],
credentials: true
}));
```
## 🏆 Achievements
### Achievements werden nicht vergeben
**Symptom:**
- Spieler erfüllt Bedingungen, aber erhält kein Achievement
- Tägliche Prüfung läuft nicht
**Lösung:**
```bash
# Tägliche Prüfung manuell ausführen
node scripts/daily_achievements.js
# Cron-Job prüfen
node scripts/setup_cron.js status
# Cron-Job einrichten
node scripts/setup_cron.js setup
# Logs prüfen
tail -f /var/log/ninjaserver_achievements.log
```
### Achievement-Daten korrupt
**Symptom:**
- Achievements werden mehrfach vergeben
- Falsche Fortschrittswerte
**Lösung:**
```sql
-- Doppelte Achievements entfernen
DELETE FROM player_achievements
WHERE id NOT IN (
SELECT MIN(id)
FROM player_achievements
GROUP BY player_id, achievement_id
);
-- Fortschritt zurücksetzen
UPDATE player_achievements
SET progress = 0, is_completed = false
WHERE is_completed = false;
```
### Tägliche Prüfung schlägt fehl
**Symptom:**
```
Error: Daily achievement check failed
```
**Lösung:**
```bash
# Logs analysieren
grep "ERROR" /var/log/ninjaserver_achievements.log
# Datenbank-Verbindung prüfen
psql -d ninjaserver -c "SELECT NOW();"
# Berechtigungen prüfen
ls -la /var/log/ninjaserver_achievements.log
# Script manuell ausführen
node scripts/daily_achievements.js
```
## 📊 Performance
### Langsame API-Antworten
**Symptom:**
- API-Antworten dauern > 5 Sekunden
- Timeout-Fehler
**Lösung:**
```sql
-- Indizes prüfen
SELECT schemaname, tablename, indexname, idx_scan
FROM pg_stat_user_indexes
ORDER BY idx_scan DESC;
-- Langsame Queries identifizieren
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY mean_time DESC LIMIT 10;
-- Indizes hinzufügen
CREATE INDEX CONCURRENTLY idx_times_player_created
ON times(player_id, created_at DESC);
```
### Hohe CPU-Last
**Symptom:**
- Server verbraucht > 80% CPU
- Langsame Antwortzeiten
**Lösung:**
```bash
# Prozesse prüfen
top -p $(pgrep node)
# Speicher prüfen
free -h
# Datenbank-Verbindungen prüfen
psql -d ninjaserver -c "SELECT count(*) FROM pg_stat_activity;"
# Vakuum durchführen
psql -d ninjaserver -c "VACUUM ANALYZE;"
```
### Speicher-Leaks
**Symptom:**
- Speicherverbrauch steigt kontinuierlich
- Server stürzt ab
**Lösung:**
```bash
# Speicher-Usage prüfen
ps aux | grep node
# Server neu starten
pm2 restart ninjaserver
# Oder mit systemd
sudo systemctl restart ninjaserver
```
## 🔒 Sicherheit
### Schwache Passwörter
**Symptom:**
- Standardpasswörter in Produktion
- Sicherheitswarnungen
**Lösung:**
```bash
# Admin-Passwort ändern
npm run create-user
# Oder direkt in der Datenbank
psql -d ninjaserver -c "UPDATE adminusers SET password_hash = '\$2b\$10\$...' WHERE username = 'admin';"
```
### API-Key kompromittiert
**Symptom:**
- Unerwartete API-Aufrufe
- Unbekannte Aktivitäten
**Lösung:**
```sql
-- API-Key deaktivieren
UPDATE api_tokens SET is_active = false WHERE token = 'COMPROMISED_TOKEN';
-- Neuen API-Key generieren
-- (über API oder direkt in der Datenbank)
```
### SQL-Injection
**Symptom:**
- Unerwartete Datenbank-Abfragen
- Fehlerhafte API-Antworten
**Lösung:**
```javascript
// Parametrisierte Queries verwenden
const result = await db.query(
'SELECT * FROM players WHERE id = $1',
[playerId]
);
// Input-Validierung
if (!isValidUUID(playerId)) {
throw new Error('Invalid player ID');
}
```
## 📱 Frontend
### JavaScript-Fehler
**Symptom:**
- Konsole zeigt Fehler
- Funktionen funktionieren nicht
**Lösung:**
```javascript
// Browser-Konsole prüfen
console.error('Error details:', error);
// API-Verbindung testen
fetch('/api/v1/public/locations')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('API Error:', error));
```
### CORS-Probleme
**Symptom:**
```
Access to fetch at 'http://localhost:3000/api' from origin 'http://localhost:8080' has been blocked by CORS policy
```
**Lösung:**
```javascript
// CORS-Header setzen
fetch('/api/v1/public/locations', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
mode: 'cors'
});
```
### Session-Probleme
**Symptom:**
- Login funktioniert nicht
- Session wird nicht gespeichert
**Lösung:**
```javascript
// Session-Cookie prüfen
document.cookie
// Login-Request prüfen
fetch('/api/v1/public/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
credentials: 'include',
body: JSON.stringify({
username: 'admin',
password: 'admin123'
})
});
```
## 🔧 Allgemeine Lösungen
### Logs analysieren
```bash
# Server-Logs
tail -f logs/server.log
# Error-Logs
grep "ERROR" logs/server.log
# Achievement-Logs
tail -f /var/log/ninjaserver_achievements.log
# System-Logs
journalctl -u ninjaserver -f
```
### System-Status prüfen
```bash
# Server-Status
curl http://localhost:3000/health
# Datenbank-Status
psql -d ninjaserver -c "SELECT NOW();"
# Speicher-Status
free -h
df -h
# Prozess-Status
ps aux | grep node
```
### Backup wiederherstellen
```bash
# Vollständiges Backup
psql -d ninjaserver < backup.sql
# Nur Daten
psql -d ninjaserver < data_backup.sql
# Nur Schema
psql -d ninjaserver < schema_backup.sql
```
### System neu starten
```bash
# Mit npm
npm restart
# Mit pm2
pm2 restart ninjaserver
# Mit systemd
sudo systemctl restart ninjaserver
# Mit Docker
docker restart ninjaserver
```
## 📞 Support kontaktieren
Wenn diese Lösungen nicht helfen:
1. **Logs sammeln:**
```bash
# Alle relevanten Logs
tail -n 100 logs/server.log > error_log.txt
tail -n 100 /var/log/ninjaserver_achievements.log >> error_log.txt
```
2. **System-Info sammeln:**
```bash
# System-Informationen
uname -a > system_info.txt
node --version >> system_info.txt
npm --version >> system_info.txt
psql --version >> system_info.txt
```
3. **Problem beschreiben:**
- Was passiert ist
- Wann es passiert ist
- Welche Schritte Sie unternommen haben
- Fehlermeldungen
4. **Support kontaktieren:**
- E-Mail: support@ninjaparkour.de
- Issue-System verwenden
- Logs und System-Info anhängen
---
**Hinweis:** Diese Anleitung wird regelmäßig aktualisiert. Bei neuen Problemen wenden Sie sich an den Support.