Dateien
Hetzner-Backup/JOURNAL.md

19 KiB

v2-Docker Projekt Journal

Projektübersicht

Lizenzmanagement-System für Social Media Account-Erstellungssoftware mit Docker-basierter Architektur.

Technische Anforderungen


Aktueller Stand (2025-06-07)

Implementiert

  1. Docker-Infrastruktur

    • docker-compose.yaml mit 4 Services (PostgreSQL, Admin Panel, License Server, Nginx)
    • Interne Bridge-Netzwerkkommunikation
    • Resource Limits konfiguriert (2 CPUs, 4GB RAM pro Service)
    • Nginx Reverse Proxy für SSL-Termination
  2. PostgreSQL Datenbank

    • Tabellen: customers, licenses, sessions, audit_log, backup_history
    • UTF-8 Support mit deutscher Locale (de_DE.UTF-8)
    • Init-Script mit vollständigem Schema
    • Persistente Datenspeicherung
  3. Admin Panel (Vollständig)

    • Flask-Anwendung mit Session-Management
    • Login-Funktionalität für 2 Admin-User (rac00n, w@rh@mm3r)
    • Dashboard mit Statistiken und Widgets
    • Lizenz-CRUD (Create, Read, Update, Delete)
    • Kunden-CRUD mit Lizenzzuordnung
    • Session-Tracking und -Verwaltung
    • Audit-Log für alle Aktionen
    • Export-Funktion (CSV/Excel)
    • Backup-System mit Verschlüsselung
    • UTF-8 Support für deutsche Umlaute
    • Suche und Filter mit Pagination
  4. Internet-Zugriff

    • Nginx Reverse Proxy mit SSL-Termination
    • IONOS SSL-Zertifikate mit vollständiger Certificate Chain
    • Subdomain-Routing funktioniert (admin-panel-undso, api-software-undso)
    • DynDNS und Port-Forwarding konfiguriert
    • Feste IP-Adresse (192.168.178.88)

Noch nicht implementiert

  1. License Server API
    • Nur Platzhalter-Container vorhanden
    • Keine API-Endpunkte (/api/version, /api/validate, /api/heartbeat)
    • Keine Lizenzvalidierung
    • Kein aktives Session-Management

Offene Aufgaben (Priorität)

🔴 Hoch (Basis-Funktionalität)

  1. License Server API implementieren
    • /api/version - Versionscheck
    • /api/validate - Lizenzvalidierung
    • /api/heartbeat - Session-Management
  2. Reverse Proxy Setup (Nginx/Traefik) für Subdomain-Routing
  3. SSL-Zertifikate (Let's Encrypt) für beide Subdomains
  4. Session-Management (nur eine aktive Session pro Lizenz)

🟡 Mittel (Erweiterte Features)

  1. Erweiterte Sicherheit

    • Rate-Limiting für Login-Versuche (Brute-Force-Schutz)
    • 2-Faktor-Authentifizierung (2FA)
    • Session-Timeout konfigurierbar
    • IP-Whitelist für Admin-Zugriff
    • Passwort-Richtlinien (Komplexität, Ablauf)
  2. Lizenz-Verwaltung Erweiterungen

    • Bulk-Import von Lizenzen (CSV/Excel Upload)
    • Lizenz-Templates für schnelle Erstellung
    • Lizenz-Verlängerung mit einem Klick
    • Lizenz-Historie (wer hatte welche Lizenz wann)
    • Lizenz-Gruppen/Pakete
    • Automatische Lizenzverlängerung
  3. Benachrichtigungen

    • E-Mail bei ablaufenden Lizenzen (Struktur bereits vorbereitet)
    • Dashboard-Benachrichtigungen (Toast/Pop-ups)
    • Webhook-Support für externe Systeme
    • SMS-Benachrichtigungen
    • Slack/Teams Integration
  4. API für Automatisierung

    • REST API für Admin-Funktionen
    • API-Keys für programmatischen Zugriff
    • Swagger/OpenAPI Dokumentation
    • Rate Limiting für API
    • Webhook Events

🟢 Niedrig (Nice-to-have)

  1. Benutzeroberfläche

    • Dark Mode Toggle
    • Mobile-optimierte Ansicht (Responsive)
    • Mehrsprachigkeit (Deutsch/Englisch)
    • Anpassbare Dashboard-Widgets
    • Drag & Drop Dashboard
    • Keyboard Shortcuts
  2. Erweiterte Statistiken

    • Grafische Auswertungen (Chart.js/D3.js)
    • Umsatz-Statistiken
    • Nutzungsstatistiken pro Kunde
    • Lizenz-Verlaufsdiagramme
    • Geografische Verteilung
    • Vorhersage-Analysen
  3. Weitere Features

    • Rechnungserstellung
    • Mehrmandantenfähigkeit
    • Benutzerverwaltung (verschiedene Admin-Rollen)
    • Lizenz-Aktivierung per E-Mail
    • QR-Code für Lizenzschlüssel
    • Dokumentenverwaltung pro Kunde
    • JWT-Authentifizierung für API
    • Docker Resource-Optimierung
    • 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-06-06 - Journal erstellt

  • Initialer Projektstand dokumentiert
  • Aufgabenliste priorisiert
  • Technische Anforderungen festgehalten

2025-06-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-06-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-06-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-06-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-06-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-06-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-06-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-06-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-06-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)

2025-06-06 - Audit-Log implementiert

  • Vollständiges Änderungsprotokoll für alle Aktionen
  • Filterbare Übersicht mit Pagination
  • Detaillierte Anzeige von Änderungen

Neue Features:

  • Audit-Log-Tabelle: Speichert alle Änderungen mit Zeitstempel, Benutzer, IP
  • Protokollierte Aktionen: CREATE, UPDATE, DELETE, LOGIN, LOGOUT, EXPORT
  • JSON-Speicherung: Alte und neue Werte als JSONB für flexible Abfragen
  • Filter-Optionen: Nach Benutzer, Aktion und Entität
  • Detail-Anzeige: Aufklappbare Änderungsdetails
  • Navigation: Audit-Link in allen Templates

Geänderte/Neue Dateien:

  • v2_adminpanel/init.sql (audit_log Tabelle mit Indizes)
  • v2_adminpanel/app.py (log_audit() Funktion und audit_log() Route)
  • v2_adminpanel/templates/audit_log.html (neu erstellt)
  • Alle Templates (Audit-Navigation hinzugefügt)

Technische Details:

  • JSONB für strukturierte Datenspeicherung
  • Performance-Indizes auf timestamp, username und entity
  • Farbcodierung für verschiedene Aktionen
  • 50 Einträge pro Seite mit Pagination
  • IP-Adresse und User-Agent Tracking

2025-06-06 - PostgreSQL UTF-8 Locale konfiguriert

  • Eigenes PostgreSQL Dockerfile für deutsche Locale
  • Sicherstellung der UTF-8 Unterstützung auf Datenbankebene

Neue Features:

  • PostgreSQL Dockerfile: Installiert deutsche Locale (de_DE.UTF-8)
  • Locale-Umgebungsvariablen: LANG, LANGUAGE, LC_ALL gesetzt
  • Docker Compose Update: Verwendet jetzt eigenes PostgreSQL-Image

Neue Dateien:

  • v2_postgres/Dockerfile (neu erstellt)

Geänderte Dateien:

  • v2/docker-compose.yaml (postgres Service nutzt jetzt build statt image)

Technische Details:

  • Basis-Image: postgres:14
  • Locale-Installation über apt-get
  • locale-gen für de_DE.UTF-8
  • Vollständige UTF-8 Unterstützung für deutsche Sonderzeichen

2025-06-07 - Backup-Funktionalität implementiert

  • Verschlüsselte Backups mit manueller und automatischer Ausführung
  • Backup-Historie mit Download und Wiederherstellung
  • Dashboard-Integration für Backup-Status

Neue Features:

  • Backup-Erstellung: Manuell und automatisch (täglich 3:00 Uhr)
  • Verschlüsselung: AES-256 mit Fernet, Key aus ENV oder automatisch generiert
  • Komprimierung: GZIP-Komprimierung vor Verschlüsselung
  • Backup-Historie: Vollständige Übersicht aller Backups
  • Wiederherstellung: Mit optionalem Verschlüsselungs-Passwort
  • Download-Funktion: Backups können heruntergeladen werden
  • Dashboard-Widget: Zeigt letztes Backup-Status
  • E-Mail-Vorbereitung: Struktur für Benachrichtigungen (deaktiviert)

Neue/Geänderte Dateien:

  • v2_adminpanel/init.sql (backup_history Tabelle hinzugefügt)
  • v2_adminpanel/requirements.txt (cryptography, apscheduler hinzugefügt)
  • v2_adminpanel/app.py (Backup-Funktionen und Routen)
  • v2_adminpanel/templates/backups.html (neu erstellt)
  • v2_adminpanel/templates/dashboard.html (Backup-Status-Widget)
  • v2_adminpanel/Dockerfile (PostgreSQL-Client installiert)
  • v2/.env (EMAIL_ENABLED und BACKUP_ENCRYPTION_KEY)
  • Alle Templates (Backup-Navigation hinzugefügt)

Technische Details:

  • Speicherort: C:\Users\Administrator\Documents\GitHub\v2-Docker\backups\
  • Dateiformat: backup_v2docker_YYYYMMDD_HHMMSS_encrypted.sql.gz.enc
  • APScheduler für automatische Backups
  • pg_dump/psql für Datenbank-Operationen
  • Audit-Log für alle Backup-Aktionen
  • Sicherheitsabfrage bei Wiederherstellung

2025-06-07 - HTTPS/SSL und Internet-Zugriff implementiert

  • Nginx Reverse Proxy für externe Erreichbarkeit eingerichtet
  • SSL-Zertifikate von IONOS mit vollständiger Certificate Chain integriert
  • Netzwerkkonfiguration für feste IP-Adresse
  • DynDNS und Port-Forwarding konfiguriert

Neue Features:

  • Nginx Reverse Proxy: Leitet HTTPS-Anfragen an Container weiter
  • SSL-Zertifikate: Wildcard-Zertifikat von IONOS für *.z5m7q9dk3ah2v1plx6ju.com
  • Certificate Chain: Server-, Intermediate- und Root-Zertifikate kombiniert
  • Subdomain-Routing: admin-panel-undso und api-software-undso
  • Port-Forwarding: FRITZ!Box 443 → 192.168.178.88
  • Feste IP: Windows-PC auf 192.168.178.88 konfiguriert

Neue/Geänderte Dateien:

  • v2_nginx/nginx.conf (Reverse Proxy Konfiguration)
  • v2_nginx/Dockerfile (Nginx Container mit SSL)
  • v2_nginx/ssl/fullchain.pem (Certificate Chain)
  • v2_nginx/ssl/privkey.pem (Private Key)
  • v2/docker-compose.yaml (nginx Service hinzugefügt)
  • set-static-ip.ps1 (PowerShell Script für feste IP)
  • reset-to-dhcp.ps1 (PowerShell Script für DHCP)

Technische Details:

  • SSL-Termination am Nginx Reverse Proxy
  • Backend-Kommunikation über Docker-internes Netzwerk
  • Admin-Panel nur noch über Nginx erreichbar (Port 443 nicht mehr exposed)
  • License-Server behält externen Port 8443 für direkte API-Zugriffe
  • Intermediate Certificates aus ZIP extrahiert und korrekt verkettet

Zugangsdaten:

Status:

  • Admin-Panel extern erreichbar ohne SSL-Warnungen
  • Reverse Proxy funktioniert
  • SSL-Zertifikate korrekt konfiguriert
  • Netzwerk-Setup abgeschlossen