332 Zeilen
12 KiB
Markdown
332 Zeilen
12 KiB
Markdown
# v2-Docker Projekt Journal
|
|
|
|
## Projektübersicht
|
|
Lizenzmanagement-System für Social Media Account-Erstellungssoftware mit Docker-basierter Architektur.
|
|
|
|
### Technische Anforderungen
|
|
- **Lokaler Betrieb**: Docker mit 4GB RAM und 40GB Speicher
|
|
- **Internet-Zugriff**:
|
|
- Admin Panel: https://admin-panel-undso.z5m7q9dk3ah2v1plx6ju.com
|
|
- API Server: https://api-software-undso.z5m7q9dk3ah2v1plx6ju.com
|
|
- **Datenbank**: PostgreSQL mit 2 Admin-Usern (rac00n, w@rh@mm3r)
|
|
- **Ziel**: PoC für spätere VPS-Migration
|
|
|
|
---
|
|
|
|
## Aktueller Stand (2025-01-06)
|
|
|
|
### ✅ Implementiert
|
|
1. **Docker-Infrastruktur**
|
|
- docker-compose.yaml mit 3 Services (PostgreSQL, Admin Panel, License Server)
|
|
- Interne Bridge-Netzwerkkommunikation
|
|
- Resource Limits konfiguriert (2 CPUs, 4GB RAM pro Service)
|
|
|
|
2. **PostgreSQL Datenbank**
|
|
- Tabellen: customers, licenses
|
|
- Init-Script vorhanden
|
|
- Persistente Datenspeicherung
|
|
|
|
3. **Admin Panel (Basis)**
|
|
- Flask-Anwendung mit Session-Management
|
|
- Login-Funktionalität für 2 Admin-User
|
|
- Lizenz-Erstellungsformular
|
|
- Automatische Kundenerstellung
|
|
- Läuft auf Port 443 mit selbstsigniertem SSL
|
|
|
|
### ❌ Noch nicht implementiert
|
|
1. **License Server API**
|
|
- Nur Platzhalter-Container vorhanden
|
|
- Keine API-Endpunkte
|
|
- Keine Lizenzvalidierung
|
|
- Kein Heartbeat/Session-Management
|
|
|
|
2. **Admin Panel Erweiterungen**
|
|
- Keine Lizenzübersicht
|
|
- Keine Bearbeitungs-/Löschfunktionen
|
|
- Keine Kundenverwaltung
|
|
- Kein UTF-8 Support für deutsche Umlaute
|
|
|
|
3. **Internet-Zugriff**
|
|
- Kein Reverse Proxy
|
|
- Keine gültigen SSL-Zertifikate
|
|
- Subdomain-Routing nicht konfiguriert
|
|
|
|
---
|
|
|
|
## Offene Aufgaben (Priorität)
|
|
|
|
### 🔴 Hoch
|
|
1. **UTF-8 Support** für deutsche Sonderzeichen (äöüß)
|
|
2. **Reverse Proxy Setup** (Nginx/Traefik) für Subdomain-Routing
|
|
3. **SSL-Zertifikate** (Let's Encrypt) für beide Subdomains
|
|
4. **License Server API implementieren**
|
|
- `/api/version` - Versionscheck
|
|
- `/api/validate` - Lizenzvalidierung
|
|
- `/api/heartbeat` - Session-Management
|
|
5. **Admin Panel: Lizenzübersicht**
|
|
|
|
### 🟡 Mittel
|
|
1. **Admin Panel: Lizenz bearbeiten/löschen**
|
|
2. **Admin Panel: Kundenverwaltung**
|
|
3. **Session-Tracking** (nur eine aktive Session pro Lizenz)
|
|
4. **Logging-System** für Audit-Trail
|
|
|
|
### 🟢 Niedrig
|
|
1. **Email-Benachrichtigungen**
|
|
2. **JWT-Authentifizierung für API**
|
|
3. **Backup-Strategie**
|
|
4. **VPS-Migrationsdokumentation**
|
|
|
|
---
|
|
|
|
## Bekannte Probleme
|
|
1. PostgreSQL Volume-Pfad wurde von absolutem Windows-Pfad auf Docker Volume geändert
|
|
2. Duplizierte .env Datei in templates/ Ordner
|
|
3. Credentials im Klartext in .env Dateien
|
|
4. Selbstsignierte SSL-Zertifikate verursachen Browser-Warnungen
|
|
|
|
---
|
|
|
|
## Nächste Schritte
|
|
1. UTF-8 Support implementieren
|
|
2. Reverse Proxy mit SSL einrichten
|
|
3. Admin Panel Funktionalität erweitern
|
|
4. License Server API entwickeln
|
|
|
|
---
|
|
|
|
## Änderungsprotokoll
|
|
|
|
### 2025-01-06 - Journal erstellt
|
|
- Initialer Projektstand dokumentiert
|
|
- Aufgabenliste priorisiert
|
|
- Technische Anforderungen festgehalten
|
|
|
|
### 2025-01-06 - UTF-8 Support implementiert
|
|
- Flask App Konfiguration für UTF-8 hinzugefügt (JSON_AS_ASCII=False)
|
|
- PostgreSQL Verbindung mit UTF-8 client_encoding
|
|
- HTML Forms mit accept-charset="UTF-8"
|
|
- Dockerfile mit deutschen Locale-Einstellungen (de_DE.UTF-8)
|
|
- PostgreSQL Container mit UTF-8 Initialisierung
|
|
- init.sql mit SET client_encoding = 'UTF8'
|
|
|
|
**Geänderte Dateien:**
|
|
- v2_adminpanel/app.py
|
|
- v2_adminpanel/templates/index.html
|
|
- v2_adminpanel/init.sql
|
|
- v2_adminpanel/Dockerfile
|
|
- v2/docker-compose.yaml
|
|
|
|
**Nächster Test:**
|
|
- Container neu bauen und starten
|
|
- Kundennamen mit Umlauten testen (z.B. "Müller GmbH", "Björn Schäfer")
|
|
- Email mit Umlauten testen
|
|
|
|
### 2025-01-06 - Lizenzübersicht implementiert
|
|
- Neue Route `/licenses` für Lizenzübersicht
|
|
- SQL-Query mit JOIN zwischen licenses und customers
|
|
- Status-Berechnung (aktiv, läuft bald ab, abgelaufen)
|
|
- Farbcodierung für verschiedene Status
|
|
- Navigation zwischen Lizenz erstellen und Übersicht
|
|
|
|
**Neue Features:**
|
|
- Anzeige aller Lizenzen mit Kundeninformationen
|
|
- Status-Anzeige basierend auf Ablaufdatum
|
|
- Unterscheidung zwischen Voll- und Testversion
|
|
- Responsive Tabelle mit Bootstrap
|
|
- Link von Dashboard zur Übersicht und zurück
|
|
|
|
**Geänderte/Neue Dateien:**
|
|
- v2_adminpanel/app.py (neue Route hinzugefügt)
|
|
- v2_adminpanel/templates/licenses.html (neu erstellt)
|
|
- v2_adminpanel/templates/index.html (Navigation ergänzt)
|
|
|
|
**Nächster Test:**
|
|
- Container neu starten
|
|
- Mehrere Lizenzen mit verschiedenen Ablaufdaten erstellen
|
|
- Lizenzübersicht unter /licenses aufrufen
|
|
|
|
### 2025-01-06 - Lizenz bearbeiten/löschen implementiert
|
|
- Neue Routen für Bearbeiten und Löschen von Lizenzen
|
|
- Bearbeitungsformular mit vorausgefüllten Werten
|
|
- Aktiv/Inaktiv-Status kann geändert werden
|
|
- Lösch-Bestätigung per JavaScript confirm()
|
|
- Kunde kann nicht geändert werden (nur Lizenzdetails)
|
|
|
|
**Neue Features:**
|
|
- `/license/edit/<id>` - Bearbeitungsformular
|
|
- `/license/delete/<id>` - Lizenz löschen (POST)
|
|
- Aktionen-Spalte in der Lizenzübersicht
|
|
- Buttons für Bearbeiten und Löschen
|
|
- Checkbox für Aktiv-Status
|
|
|
|
**Geänderte/Neue Dateien:**
|
|
- v2_adminpanel/app.py (edit_license und delete_license Routen)
|
|
- v2_adminpanel/templates/licenses.html (Aktionen-Spalte hinzugefügt)
|
|
- v2_adminpanel/templates/edit_license.html (neu erstellt)
|
|
|
|
**Sicherheit:**
|
|
- Login-Required für alle Aktionen
|
|
- POST-only für Löschvorgänge
|
|
- Bestätigungsdialog vor dem Löschen
|
|
|
|
### 2025-01-06 - Kundenverwaltung implementiert
|
|
- Komplette CRUD-Funktionalität für Kunden
|
|
- Übersicht zeigt Anzahl aktiver/gesamter Lizenzen pro Kunde
|
|
- Kunden können nur gelöscht werden, wenn sie keine Lizenzen haben
|
|
- Bearbeitungsseite zeigt alle Lizenzen des Kunden
|
|
|
|
**Neue Features:**
|
|
- `/customers` - Kundenübersicht mit Statistiken
|
|
- `/customer/edit/<id>` - Kunde bearbeiten (Name, E-Mail)
|
|
- `/customer/delete/<id>` - Kunde löschen (nur ohne Lizenzen)
|
|
- Navigation zwischen allen drei Hauptbereichen
|
|
- Anzeige der Kundenlizenzen beim Bearbeiten
|
|
|
|
**Geänderte/Neue Dateien:**
|
|
- v2_adminpanel/app.py (customers, edit_customer, delete_customer Routen)
|
|
- v2_adminpanel/templates/customers.html (neu erstellt)
|
|
- v2_adminpanel/templates/edit_customer.html (neu erstellt)
|
|
- v2_adminpanel/templates/index.html (Navigation erweitert)
|
|
- v2_adminpanel/templates/licenses.html (Navigation erweitert)
|
|
|
|
**Besonderheiten:**
|
|
- Lösch-Button ist deaktiviert, wenn Kunde Lizenzen hat
|
|
- Aktive Lizenzen werden separat gezählt (nicht abgelaufen + aktiv)
|
|
- UTF-8 Support für Kundennamen mit Umlauten
|
|
|
|
### 2025-01-06 - Dashboard mit Statistiken implementiert
|
|
- Übersichtliches Dashboard als neue Startseite
|
|
- Statistik-Karten mit wichtigen Kennzahlen
|
|
- Listen für bald ablaufende und zuletzt erstellte Lizenzen
|
|
- Routing angepasst: Dashboard (/) und Lizenz erstellen (/create)
|
|
|
|
**Neue Features:**
|
|
- Statistik-Karten: Kunden, Lizenzen gesamt, Aktive, Ablaufende
|
|
- Aufteilung nach Lizenztypen (Vollversion/Testversion)
|
|
- Aufteilung nach Status (Aktiv/Abgelaufen)
|
|
- Top 10 bald ablaufende Lizenzen mit Restlaufzeit
|
|
- Letzte 5 erstellte Lizenzen mit Status
|
|
- Hover-Effekt auf Statistik-Karten
|
|
- Einheitliche Navigation mit Dashboard-Link
|
|
|
|
**Geänderte/Neue Dateien:**
|
|
- v2_adminpanel/app.py (dashboard() komplett überarbeitet, create_license() Route)
|
|
- v2_adminpanel/templates/dashboard.html (neu erstellt)
|
|
- v2_adminpanel/templates/index.html (Navigation erweitert)
|
|
- v2_adminpanel/templates/licenses.html (Navigation angepasst)
|
|
- v2_adminpanel/templates/customers.html (Navigation angepasst)
|
|
|
|
**Dashboard-Inhalte:**
|
|
- 4 Hauptstatistiken als Karten
|
|
- Lizenztyp-Verteilung
|
|
- Status-Verteilung
|
|
- Warnung für bald ablaufende Lizenzen
|
|
- Übersicht der neuesten Aktivitäten
|
|
|
|
### 2025-01-06 - Suchfunktion implementiert
|
|
- Volltextsuche für Lizenzen und Kunden
|
|
- Case-insensitive Suche mit LIKE-Operator
|
|
- Suchergebnisse mit Hervorhebung des Suchbegriffs
|
|
- Suche zurücksetzen Button
|
|
|
|
**Neue Features:**
|
|
- **Lizenzsuche**: Sucht in Lizenzschlüssel, Kundenname und E-Mail
|
|
- **Kundensuche**: Sucht in Kundenname und E-Mail
|
|
- Suchformular mit autofocus für schnelle Eingabe
|
|
- Anzeige des aktiven Suchbegriffs
|
|
- Unterschiedliche Meldungen für leere Ergebnisse
|
|
|
|
**Geänderte Dateien:**
|
|
- v2_adminpanel/app.py (licenses() und customers() mit Suchlogik erweitert)
|
|
- v2_adminpanel/templates/licenses.html (Suchformular hinzugefügt)
|
|
- v2_adminpanel/templates/customers.html (Suchformular hinzugefügt)
|
|
|
|
**Technische Details:**
|
|
- GET-Parameter für Suche
|
|
- SQL LIKE mit LOWER() für Case-Insensitive Suche
|
|
- Wildcards (%) für Teilstring-Suche
|
|
- UTF-8 kompatibel für deutsche Umlaute
|
|
|
|
### 2025-01-06 - Filter und Pagination implementiert
|
|
- Erweiterte Filteroptionen für Lizenzübersicht
|
|
- Pagination für große Datenmengen (20 Einträge pro Seite)
|
|
- Filter bleiben bei Seitenwechsel erhalten
|
|
|
|
**Neue Features für Lizenzen:**
|
|
- **Filter nach Typ**: Alle, Vollversion, Testversion
|
|
- **Filter nach Status**: Alle, Aktiv, Läuft bald ab, Abgelaufen, Deaktiviert
|
|
- **Kombinierbar mit Suche**: Filter und Suche funktionieren zusammen
|
|
- **Pagination**: Navigation durch mehrere Seiten
|
|
- **Ergebnisanzeige**: Zeigt Anzahl gefilterter Ergebnisse
|
|
|
|
**Neue Features für Kunden:**
|
|
- **Pagination**: 20 Kunden pro Seite
|
|
- **Seitennavigation**: Erste, Letzte, Vor, Zurück
|
|
- **Kombiniert mit Suche**: Suchparameter bleiben erhalten
|
|
|
|
**Geänderte Dateien:**
|
|
- v2_adminpanel/app.py (licenses() und customers() mit Filter/Pagination erweitert)
|
|
- v2_adminpanel/templates/licenses.html (Filter-Formular und Pagination hinzugefügt)
|
|
- v2_adminpanel/templates/customers.html (Pagination hinzugefügt)
|
|
|
|
**Technische Details:**
|
|
- SQL WHERE-Klauseln für Filter
|
|
- LIMIT/OFFSET für Pagination
|
|
- URL-Parameter bleiben bei Navigation erhalten
|
|
- Responsive Bootstrap-Komponenten
|
|
|
|
### 2025-01-06 - Session-Tracking implementiert
|
|
- Neue Tabelle für Session-Verwaltung
|
|
- Anzeige aktiver und beendeter Sessions
|
|
- Manuelles Beenden von Sessions möglich
|
|
- Dashboard zeigt Anzahl aktiver Sessions
|
|
|
|
**Neue Features:**
|
|
- **Sessions-Tabelle**: Speichert Session-ID, IP, User-Agent, Zeitstempel
|
|
- **Aktive Sessions**: Zeigt alle laufenden Sessions mit Inaktivitätszeit
|
|
- **Session-Historie**: Letzte 24 Stunden beendeter Sessions
|
|
- **Session beenden**: Admins können Sessions manuell beenden
|
|
- **Farbcodierung**: Grün (aktiv), Gelb (>5 Min inaktiv), Rot (lange inaktiv)
|
|
|
|
**Geänderte/Neue Dateien:**
|
|
- v2_adminpanel/init.sql (sessions Tabelle hinzugefügt)
|
|
- v2_adminpanel/app.py (sessions() und end_session() Routen)
|
|
- v2_adminpanel/templates/sessions.html (neu erstellt)
|
|
- v2_adminpanel/templates/dashboard.html (Session-Statistik)
|
|
- Alle Templates (Session-Navigation hinzugefügt)
|
|
|
|
**Technische Details:**
|
|
- Heartbeat-basiertes Tracking (last_heartbeat)
|
|
- Automatische Inaktivitätsberechnung
|
|
- Session-Dauer Berechnung
|
|
- Responsive Tabellen mit Bootstrap
|
|
|
|
**Hinweis:**
|
|
Die Session-Daten werden erst gefüllt, wenn der License Server API implementiert ist und Clients sich verbinden.
|
|
|
|
### 2025-01-06 - Export-Funktion implementiert
|
|
- CSV und Excel Export für Lizenzen und Kunden
|
|
- Formatierte Ausgabe mit deutschen Datumsformaten
|
|
- UTF-8 Unterstützung für Sonderzeichen
|
|
|
|
**Neue Features:**
|
|
- **Lizenz-Export**: Alle Lizenzen mit Kundeninformationen
|
|
- **Kunden-Export**: Alle Kunden mit Lizenzstatistiken
|
|
- **Format-Optionen**: Excel (.xlsx) und CSV (.csv)
|
|
- **Deutsche Formatierung**: Datum als dd.mm.yyyy, Status auf Deutsch
|
|
- **UTF-8 Export**: Korrekte Kodierung für Umlaute
|
|
- **Export-Buttons**: Dropdown-Menüs in Lizenz- und Kundenübersicht
|
|
|
|
**Geänderte Dateien:**
|
|
- v2_adminpanel/app.py (export_licenses() und export_customers() Routen)
|
|
- v2_adminpanel/requirements.txt (pandas und openpyxl hinzugefügt)
|
|
- v2_adminpanel/templates/licenses.html (Export-Dropdown hinzugefügt)
|
|
- v2_adminpanel/templates/customers.html (Export-Dropdown hinzugefügt)
|
|
|
|
**Technische Details:**
|
|
- Pandas für Datenverarbeitung
|
|
- OpenPyXL für Excel-Export
|
|
- CSV mit Semikolon-Trennung für deutsche Excel-Kompatibilität
|
|
- Automatische Spaltenbreite in Excel
|
|
- BOM für UTF-8 CSV (Excel-Kompatibilität) |