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

12 KiB

🐛 Troubleshooting

Problembehandlung und Lösungen für häufige Probleme im Ninja Cross Parkour System.

📋 Inhaltsverzeichnis

🚨 Kritische Probleme

Server startet nicht

Symptome:

  • npm start schlägt fehl
  • Port-Fehler
  • Abhängigkeitsfehler

Lösungen:

# 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:

# 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:

# 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:

# 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:

# 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:

# 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:

# .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:

# 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:

# 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:

-- 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:

# 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:

# 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:

# 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:

# 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:

# 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:

// 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:

# 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:

-- 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:

# 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:

-- 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:

# 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:

# 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:

# 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:

-- 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:

// 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:

// 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:

// 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:

// 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

# 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

# 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

# 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

# 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:

    # 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:

    # 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:


Hinweis: Diese Anleitung wird regelmäßig aktualisiert. Bei neuen Problemen wenden Sie sich an den Support.