Initial commit: Beisel Rallye Graz Project with full documentation
This commit is contained in:
+112
@@ -0,0 +1,112 @@
|
||||
# Architektur-Dokumentation: Beisel Rallye 🍺
|
||||
|
||||
## Systemübersicht
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||
│ Browser │──────→│ Express Server │──────→│ SQLite DB │
|
||||
│ (Client) │ │ (:8083) │ │ │
|
||||
└─────────────────┘ └──────────────────┘ └─────────────────┘
|
||||
↕ ↕
|
||||
Nginx Reverse Proxy beisel_rally.db
|
||||
(aufeins.click.jetzt) :8083
|
||||
```
|
||||
|
||||
## Komponenten
|
||||
|
||||
### 1. Frontend (Browser)
|
||||
- **Technologie:** Vanilla JavaScript + EJS Templates
|
||||
- **Responsibility:** UI-Rendering, User-Interaktion, Client-Side Validation
|
||||
- **Speicherung:** Aktuelle Implementierung nutzt localStorage (→ wird durch Server API ersetzt)
|
||||
|
||||
### 2. Backend (Express.js)
|
||||
- **Port:** 8083
|
||||
- **Routing:** Express Router
|
||||
- **Datenbank:** SQLite via `sqlite3` Package
|
||||
- **Middleware:** body-parser, CORS (geplant)
|
||||
|
||||
### 3. Datenbank (SQLite)
|
||||
- **Datei:** `beisel_rally.db`
|
||||
- **Schema:** Einfache Tabelle `rally_logs`
|
||||
- **Skalierung:** Ausreichend für erwartete User-Anzahl (<1000)
|
||||
|
||||
## Datenfluss
|
||||
|
||||
### Aktuelle Implementierung (localStorage-basiert):
|
||||
```
|
||||
User → Browser UI → localStorage → (keine Server-Kommunikation)
|
||||
```
|
||||
|
||||
### Ziel-Implementierung (Server-seitig):
|
||||
```
|
||||
User → Browser UI → API Request → Express Server → SQLite DB
|
||||
↑ |
|
||||
└─────────────── API Response ←────────────────┘
|
||||
```
|
||||
|
||||
## Datenbank-Schema
|
||||
|
||||
```sql
|
||||
CREATE TABLE rally_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_name TEXT NOT NULL,
|
||||
district TEXT NOT NULL,
|
||||
beisel_name TEXT NOT NULL,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Index für häufige Queries
|
||||
CREATE INDEX idx_user_district ON rally_logs(user_name, district);
|
||||
```
|
||||
|
||||
## Deployment-Architektur
|
||||
|
||||
### Nginx Reverse Proxy
|
||||
- **Funktion:** SSL-Terminierung, Load Balancing (geplant)
|
||||
- **Domain:** aufeins.click.jetzt
|
||||
- **Backend:** 192.168.0.187:8083
|
||||
- **SSL:** Let's Encrypt automatisch
|
||||
|
||||
### Server-Setup
|
||||
```bash
|
||||
# Abhängigkeiten installieren
|
||||
cd /home/claw/.openclaw/agents/wisp/workspace/beisel-rally
|
||||
npm install
|
||||
|
||||
# Server starten
|
||||
node index.js
|
||||
|
||||
# Im Hintergrund laufen lassen (optional)
|
||||
nohup node index.js > server.log 2>&1 &
|
||||
```
|
||||
|
||||
## Skalierungsbetrachtung
|
||||
|
||||
### Aktuelle Kapazitäten
|
||||
- **SQLite:** Bis ~1M Einträge performant
|
||||
- **Express:** Bis ~100 req/s ohne Optimierung
|
||||
- **Nginx:** Hoch skalierbar
|
||||
|
||||
### Erweiterungsmöglichkeiten
|
||||
1. **PostgreSQL Migration** bei >10k Usern
|
||||
2. **Redis Caching** für statische Daten (Bezirke, Beiseln)
|
||||
3. **Load Balancing** mit mehreren Express Instanzen
|
||||
4. **WebSocket** für Echtzeit-Updates
|
||||
|
||||
## Sicherheitshinweise
|
||||
|
||||
### Aktuelle Schwachstellen
|
||||
- ❌ Keine Input Validation auf Server-Side
|
||||
- ❌ Keine Rate Limiting
|
||||
- ❌ SQL Injection möglich (bei korrekter Implementierung)
|
||||
- ❌ CORS nicht konfiguriert
|
||||
|
||||
### Verbesserungen
|
||||
- ✅ Parameterisierte Queries verwenden
|
||||
- ✅ Rate Limiting implementieren
|
||||
- ✅ CORS Headers setzen
|
||||
- ✅ Input Sanitization hinzufügen
|
||||
- ✅ HTTPS erzwingen (bereits durch Nginx gegeben)
|
||||
|
||||
---
|
||||
*Stand: 2026-06-29 | Version: 1.0*
|
||||
Reference in New Issue
Block a user