Dazu habe ich mir eine Software geschrieben die b1gmail in ei neues System Überführt, bestehend aus grommunio, Nextcloud, HostBill und eigener aikQ Verwaltung)
Ziel ist es "nichts aus b1gmail geht verloren — es wird nur in ein moderneres System überführt"
0. Die Kernaussage
ZitatEs ist eine Übernahme, kein Neuanfang. Jede Datenkategorie aus b1gmail wird entweder live in das neue System überführt (Kunden, Domains, E-Mail, Cloud, Organizer, Passwörter) oder revisionssicher in ein Legacy-Archiv übernommen (Rechnungen/Bestellungen, alte Systemeinstellungen, Admin-Logs) — und bleibt dort im Portal abrufbar. Nichts wird gelöscht, nichts geht verloren.
Die b1gmail-Quelldatenbank wird dabei nur gelesen und bleibt unverändert — ein Rückfall ist jederzeit möglich.
1. Das Prinzip: Extrahieren → Transformieren → Laden → Verifizieren
Die Übernahme läuft über ein eigenes Migrationswerkzeug (Python-Pipeline + REST-API), das vom aikQ-Portal aus gesteuert wird:
- Extrahieren — liest read-only alle bm60_*-Tabellen der b1gmail-MySQL-DB sowie die Maildir-/Webdisk-Dateien. Der Extractor passt sich Spaltenvarianten alter b1gmail-Versionen automatisch an.
- Transformieren — bildet die b1gmail-Strukturen auf die Zielsysteme ab (Mapping z. B. b1gmail-Gruppe → Tarif/Produkt).
- Laden — schreibt in die jeweils zuständigen Zielsysteme (siehe Abschnitt 2).
- Verifizieren — die übernommenen Daten sind anschließend direkt im aikQ-Portal prüfbar (Kunden, Organizer, Rechnungs-/Einstellungs-/Log-Archiv).
Die Pipeline ist dry-run-fähig (Probelauf ohne Schreiben), resumebar (Fortsetzen nach Abbruch) und superadmin-abgesichert (verschlüsselte Quell-Zugangsdaten, AES-256).
2. Die Zielsysteme — wer übernimmt was
| b1gmail-Bereich | Zielsystem im neuen Stack |
|---|---|
| Kunden / Konten / Mandanten | aikQ-Portal (users / Mandanten-Hierarchie) |
| Domains, Aliase, Postfächer, E-Mail | grommunio (Mailserver, via Admin-API) |
| Cloud / Webdisk-Dateien | Nextcloud (via WebDAV + OCS-API) |
| Organizer (Kontakte, Kalender, Aufgaben, Notizen, Arbeitsgruppen) | aikQ-Portal (eigene Organizer-Module) |
| Abrechnung (Produkte, Kunden, künftige Rechnungen) | HostBill (führendes Abrechnungssystem) |
| Rechnungs-/Bestell-/Zahlungs-Historie | aikQ-Portal Legacy-Archiv (/legacy-archive, /my-invoices) |
| Alte Systemeinstellungen + Admin-Logs | aikQ-Portal Legacy-Archiv |
| Passwörter | aikQ-Auth (MD5→bcrypt mit Fallback-Login) |
3. Vollständige Abdeckung — was konkret übernommen wird
Legende: ✅ live migriert (geht 1:1 ins neue Live-System) · 🗄️ ins Archiv (revisionssicher abrufbar, geht nicht verloren) · ⚠️ live, mit Restabgleich (funktioniert, einzelne Spezialfälle vor dem Echtlauf prüfen).
3.1 Kunden, Konten & Zugang
| Datenart | b1gmail-Quelle | Ziel | Status |
|---|---|---|---|
| Kunden / Benutzerkonten | bm60_users | Portal users + Profile | ✅ |
| Kundenprofile (Name, Firma, Adresse, Telefon …) | bm60_users / bm60_userprefs | user_profiles | ⚠️ |
| Tarife / Gruppen / Pakete | bm60_gruppen | HostBill-Produkte (per Mapping) + Quotas | ⚠️ |
| Passwörter | bm60_users.passwd(+Salt) | bcrypt, Fallback-Login | ✅ |
| 2FA-Secrets | bm60_2fa | (Archiv; Nutzer reaktivieren 2FA neu) | 🗄️ |
Passwort-Garantie: Alte MD5-/Salted-MD5-Hashes werden übernommen. Beim ersten Login im neuen System wird das Passwort automatisch auf bcrypt aufgewertet — kein Kunde wird ausgesperrt, niemand muss ein neues Passwort setzen.
3.2 Domains & E-Mail
| Datenart | b1gmail-Quelle | Ziel | Status |
|---|---|---|---|
| Domains | bm60_domains | grommunio-Domains | ✅ |
| Aliase | bm60_aliase | grommunio-Aliase | ✅ |
| Auto-Responder / Abwesenheit | bm60_autoresponder | grommunio OOF | ✅ |
| Weiterleitungen | bm60_users (forward-Felder) | grommunio-Forwarding | ✅ |
| E-Mails / Postfächer / Ordner | bm60_mails, Maildir | grommunio-Mailstore (EML-Export → Import) | ⚠️ |
| Filter / Regeln | bm60_filter* | grommunio Sieve | ⚠️ |
| Signaturen | bm60_signaturen | Signatur-Speicher | ⚠️ |
| Postfach-Quotas | bm60_gruppen.speicher | grommunio-Quotas | ⚠️ |
Postfächer werden inkl. Prüfsumme (SHA-256-Manifest) als EML exportiert und in grommunio importiert. Filterregeln werden gelesen und nach Sieve übersetzt; einzelne exotische Aktionen sollten nach der Migration stichprobenartig geprüft werden.
3.3 Cloud / Webdisk
| Datenart | b1gmail-Quelle | Ziel | Status |
|---|---|---|---|
| Cloud-/Webdisk-Dateien | bm60_diskfiles + Dateisystem | Nextcloud (WebDAV-Upload) | ⚠️ |
| Speicher-Kontingente | bm60_gruppen.webdisk | Nextcloud-Quota | ⚠️ |
Nutzer werden in Nextcloud angelegt, Kontingente gesetzt und die Dateien per WebDAV hochgeladen.
3.4 Organizer (Groupware)
| Datenart | b1gmail-Quelle | Ziel | Status |
|---|---|---|---|
| Kontakte (inkl. Foto) | bm60_adressen | Portal /contacts(VCF) | ⚠️ |
| Kontaktgruppen | bm60_adressen_gruppen* | Portal Gruppen | ✅ |
| Kalender / Termine / Teilnehmer | bm60_dates* | Portal /calendar | ⚠️ |
| Erinnerungen | bm60_dates.reminder | Portal-Reminder + E-Mail | ⚠️ |
| Aufgaben / To-Dos | bm60_tasklists, bm60_tasks | Portal /tasks | ⚠️ |
| Notizen (Priorität, Datum) | bm60_notes | Portal /notes | ⚠️ |
| Arbeitsgruppen + Freigaben | bm60_workgroups* | Portal-Arbeitsgruppen | ⚠️ |
3.5 Abrechnung — Historie bleibt, Zukunft läuft über HostBill
| Datenart | b1gmail-Quelle | Ziel | Status |
|---|---|---|---|
| Produkte / Kunden (laufend) | abgeleitet aus Gruppen/Usern | HostBill | ⚠️ |
| Rechnungen | bm60_invoices | Portal Legacy-Archiv | 🗄️ |
| Bestellungen | bm60_orders | Portal Legacy-Archiv | 🗄️ |
| Zahlungen / Transaktionen | bm60_transactions | Portal Legacy-Archiv | 🗄️ |
ZitatWichtig: Die komplette Rechnungs-/Zahlungs-Historie geht nicht verloren — sie wird ins Portal-Archiv übernommen und ist dort pro Kunde abrufbar (/my-invoices, /legacy-archive). NeueRechnungen erzeugt ab Übernahme HostBill als führendes System. Das ist Absicht, kein Datenverlust.
3.6 Superadmin / System & Logs
| Datenart | b1gmail-Quelle | Ziel | Status |
|---|---|---|---|
| Systemeinstellungen (Sprache, Wartung, Registrierung, SMTP …) | bm60_prefs | aktiv: system_settings; Rest: Legacy-Archiv | ⚠️/🗄️ |
| Benutzereinstellungen (Sprache, Zeitzone, Theme …) | bm60_userprefs | Portal-Userprofil + Prefs | ⚠️ |
| Admin-Konten | bm60_admins | Archiv (Portal hat eigene Admin-/Reseller-Hierarchie) | 🗄️ |
| System-Logs | bm60_logs | Portal Legacy-Archiv (/legacy-archive) | 🗄️ |
Die wichtigsten Superadmin-Einstellungen werden aktiv ins neue System übernommen; alles Übrige wird vollständig archiviert und bleibt einsehbar — auch hier geht nichts verloren.
4. „Nichts geht verloren” — die drei Garantien
- Quelle bleibt unangetastet. Auf b1gmail wird nur lesend zugegriffen. Das Altsystem bleibt während und nach der Migration intakt → jederzeit Rückfall möglich.
- Live-Migration + Legacy-Archiv. Aktive Daten gehen 1:1 ins neue Live-System; historische Daten (Rechnungen, Logs, Alteinstellungen) wandern in ein abrufbares Archiv im Portal. Jede Kategorie hat ein Ziel — keine fällt weg.
- Niemand wird ausgesperrt. Passwörter werden übernommen, alte Logins funktionieren weiter und werden beim ersten Login transparent auf bcrypt aufgewertet.
5. Der Ablauf — Schritt für Schritt
Gesteuert über das aikQ-Portal (Superadmin) bzw. die Migrations-REST-API:
- Quelle anlegen — b1gmail-DB + grommunio/HostBill/Nextcloud-Zugänge hinterlegen (verschlüsselt gespeichert).
- Verbindungstest (test-connection) — alle Zielsysteme erreichbar?
- Schema-Preflight (schema-preflight) — prüft die b1gmail-Tabellen/Spalten vor dem Lauf (fängt exotische Altschemata ab).
- Vorschau / Dry-Run (preview, start dry_run=true) — rechnet die Migration durch und schreibt nichts; erzeugt prüfbare JSON-Ausgaben (z. B. hostbill_clients.json, grommunio_users.json, invalid_clients.json).
- Selektive Migration — wahlweise nur HostBill, nur grommunio, nur Organizer, nur Billing-Archiv etc. (kontrolliert, in Etappen).
- Resume — bei Abbruch an der letzten abgeschlossenen Phase fortsetzen (Statusdatei migration_state.json).
- Verifikation im Portal — Kunden, /contacts, /calendar, /tasks, /notes, /my-invoices, /legacy-archive gegenprüfen.
- Passwort-Fallback aktiv — Kunden können sich sofort mit ihren alten Passwörtern anmelden.