⚠️ Warning: Da wir das Backend von.json
-Dateien auf eine MySQL-Datenbank umgestellt haben, finden sich in den verschiedenen Services immer noch Codeabschnitte, die entweder nicht genutzt werden oder auf MySQL angepasst wurden, aber wir vergessen haben, diese umzubenennen.
Dieses Projekt ist ein vollständiges Dashboard- und Verwaltungssystem für eine Schulolympiade. Es besteht aus mehreren Services (Microservices), die alle auf eine zentrale MySQL-Datenbank zugreifen. Die Verwaltung und das Monitoring erfolgen über moderne Web-Oberflächen. Das System ist für Docker optimiert und kann einfach auf einem Server oder im lokalen Netzwerk betrieben werden.
- Features
- Projektstruktur
- Services & Komponenten
- Datenbank
- Docker & Backups
- Sicherheit
- Nützliche Kommandos
- Erweiterungsideen
- Lizenz
- Live-Dashboard mit Ranglisten, Statistiken und aktuellen Ergebnissen
- Admin-Panel zum Bearbeiten aller Ergebnisse (mit Login)
- Emoji-Mapping-Editor für Disziplin-Icons (mit Login)
- Automatische Datenbank-Backups (Docker-basiert)
- IP-Logging für bestimmte Aktionen
- REST-API für Frontend und externe Tools
- Docker-Compose für einfachen Betrieb
- phpMyAdmin & CloudBeaver für DB-Management
schulolympiade-mysql/
│
├── dashboard/ # Haupt-Dashboard (Frontend & Backend)
│ ├── public/ # Statische Dateien (HTML, JS, CSS)
│ └── server.js # Express-Server für das Dashboard
│
├── edit-data-dashboard/ # Admin-Panel für Ergebnisse
│ ├── index.html, script.js, style.css
│ └── server.js
│
├── edit-emoji-dashboard/ # Admin-Panel für Emoji-Mappings
│ ├── index.html, script.js, style.css
│ └── server.js
│
├── success-emoji/ # Erfolgsseite für Emoji-Eintrag
│ ├── public/
│ └── server.js
│
├── success-event/ # Erfolgsseite für Event-Eintrag
│ ├── public/
│ └── server.js
│
├── ip-logging/ # IP-Logging-Service
│ └── server.js
│
├── shared/ # Gemeinsame Module (z.B. DB)
│ └── db.js
│
├── docker/ # Docker-Setup
│ ├── docker-compose.yaml
│ ├── mysql-backups/ # Backup-Ordner (wird automatisch befüllt)
│ └── mysql-init/ # SQL-Init-Skripte
│
├── docker-nginx/ # Reverse Proxy (optional)
│ └── docker-compose.yaml
│
├── docker-n8n/ # Automatisierung (optional)
│ └── n8n-compose.yaml
│
└── README.md # Diese Datei
- Frontend: Zeigt Ranglisten, Statistiken, Disziplinen und aktuelle Ergebnisse.
- Backend: Express.js-Server, REST-API (
/api/stats
,/api/leaderboard
,/api/disciplines
,/api/recent
,/api/emoji-map
). - IP-Logging: Jeder API-Zugriff wird mit IP, Zeit und User-Agent geloggt.
- Admin-Panel: Ergebnisse ansehen, bearbeiten, löschen, hinzufügen.
- Login: SHA256-Hash, Token-basiert.
- API:
/api/login
,/data/results.json
,/api/save
(nur mit Token).
- Admin-Panel: Emoji-Trigger für Disziplinen verwalten.
- Login: Wie oben.
- API:
/api/login
,/data/emojiMap.json
,/api/save
(nur mit Token).
- Frontend: Zeigt nach erfolgreichem Eintrag eine Bestätigungsseite.
- Backend: Statischer Express-Server.
- Backend: HTTP-Server, der IP-Adressen und Zeitstempel in eine Datei schreibt und weiterleitet.
- MySQL Connection Pool für alle Services.
- Testfunktion für DB-Verbindung.
- MySQL 8 (Docker)
- Tabellen:
results
,emoji_mappings
(und ggf. weitere) - User:
olympiade_user
- Passwort: Siehe
.env
oderdocker-compose.yaml
- Init-Skripte: Im Ordner
docker/mysql-init/
(werden beim ersten Start ausgeführt)
cd docker
docker compose up -d
- Automatisch: Das Service
mysql_backup
(Image:fradelg/mysql-cron-backup
) erstellt alle 10 Minuten ein Backup der Datenbank im Ordnerdocker/mysql-backups/
. - Backup-Intervalle: Über die Umgebungsvariable
CRON_TIME
einstellbar. - Backup-Ordner:
docker/mysql-backups/
(auf dem Host, einfach kopierbar) - Maximale Backups: Über
MAX_BACKUPS
einstellbar.
- phpMyAdmin: http://192.168.100.73:8080
- CloudBeaver: http://localhost:8081
- Admin-Panels: Login mit Benutzername & Passwort, Token-basiert (kein OAuth).
- Datenbank: Kein Root-Zugriff von außen, nur dedizierter User.
- Backups: Werden im Host-Ordner gespeichert, Zugriff nur für berechtigte Nutzer.
- CORS: Nur lokale Zugriffe erlaubt (anpassbar in
server.js
).
Alle Container starten/stoppen:
docker compose up -d
docker compose down
Logs anzeigen:
docker compose logs -f
Backup manuell auslesen:
ls docker/mysql-backups/
In die Datenbank einloggen:
docker exec -it schulolympiade_mysql mysql -uolympiade_user -polympiade2025 schulolympiade
- Live-Updates (WebSockets) für das Dashboard
- Benutzer- und Rechteverwaltung für mehrere Admins
- Import/Export von Ergebnissen (CSV, Excel)
- Mehrsprachigkeit (DE/EN)
- Erweiterte Statistiken (Diagramme, Trends)
- E-Mail-Benachrichtigungen bei neuen Ergebnissen
- Mobile-Optimierung für alle Dashboards
Copyright (c) 2025 BEGA Team (Otto-Nagel-Gymnasium)
Diese Software darf ohne ausdrückliche, schriftliche Genehmigung des Autors nicht verwendet, kopiert, verändert, verbreitet oder weitergegeben werden.
Die Nutzung dieser Software für kommerzielle Zwecke oder zur Gewinnerzielung – direkt oder indirekt – ist ausdrücklich untersagt.
Die Software wird "wie sie ist" bereitgestellt, ohne jegliche ausdrückliche oder implizite Garantie. Der Autor haftet nicht für Schäden, die durch die Nutzung der Software entstehen. Es besteht keine Verpflichtung zur Wartung, Fehlerbehebung oder Unterstützung.
Durch das Herunterladen, Kopieren oder Verwenden der Software erklären Sie sich mit diesen Bedingungen einverstanden.