113 lines
3.5 KiB
Markdown
113 lines
3.5 KiB
Markdown
# 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*
|