Überarbeitete Installation vom MyBB 1.9

Veröffentlicht am 07.03.2023 von StefanT in MyBB

Ein Schlüsselfaktor, um Software-Projekte und die sie umgebenden Communities am Leben zu erhalten, besteht darin, die Probleme für alle Beteiligten so weit wie möglich zu reduzieren.

Bei MyBB ist diese Schwierigkeit eine Mischung aus Benutzererfahrung (UX=user experience) und Entwicklererfahrung (DX=developer experience). Unser größtes Publikum sind die Endanwender - Menschen, die in Online-Foren surfen, von denen man nicht erwartet, dass sie wissen, was MyBB ist, und die dennoch von den optimierten Visualisierungen, Formulierungen und Abläufen profitieren, die sofort einsatzbereit sind. Gleichzeitig richten wir uns an zwei Zielgruppen, die tiefer in der Materie stecken und für die sowohl UX als auch DX gelten.

Für Website-Besitzer und Community-Verantwortliche muss die Software zugänglich und intuitiv sein - ohne besondere Kenntnisse von Sprachen und Technologien zu erfordern -, aber auch die Anpassung des Aussehens und der Funktionalität durch technisch erfahrene Betreuer ermöglichen.

Für Entwickler muss die Software neben einem nützlichen System für Erweiterungen, APIs und Dokumentationen auch die entsprechenden Werkzeuge bereitstellen, um eine schnelle Entwicklung und Tests zu ermöglichen - ohne dabei vorauszusetzen, dass man mit der Software vertraut ist.

Diese Faktoren sind in der Welt der freien und quelloffenen Software von entscheidender Bedeutung, da die Entwicklung von externen Mitwirkenden und deren Unterstützung bei der Arbeit abhängt.

Ein Installationsprozess ist der Punkt, an dem sich ihre Wege kreuzen: Er muss die unvermeidliche Komplexität herunterbrechen, ohne den erfahrenen Benutzern in die Quere zu kommen. Er muss nicht nur die besten UX- und DX-Praktiken erfüllen, sondern auch den ersten Eindruck des Produkts für alle festlegen.

Das Verlangen nach Geschwindigkeit


Leute, die mit und an MyBB arbeiten, installieren es oft. Um bequem neuen Code zu testen und Fehler im Kern und in den Erweiterungen zu beseitigen, sollte das Setup nur minimale Zeit und Aufmerksamkeit erfordern, die besser für die eigentliche Aufgabe verwendet werden sollte.

Die bisherige Vorgehensweise bei der Installation ließ zu wünschen übrig - unter anderem wegen der alten Installation:
Ein Screenshot der Seite zur Tabellenerstellung, die während der Installation von MyBB 1.8 angezeigt wird, mit einer unnötig langen Liste von Namen der erstellten Tabellen.
  • ist streng synchron und statisch, so dass die Benutzer abwechselnd warten und Formulare ausfüllen müssen,
  • fragt nach Informationen, die entweder unwichtig sind (z. B. eine Website-URL für den optional angezeigten Link) oder daraus abgeleitet werden können (z. B. Cookie-Einstellungen, die sich aus der Foren-URL ermitteln lassen),
  • technische Details enthält, die wenig bis gar nicht relevant sind, was auch die Orientierung erschwert,
  • lädt Seiten nur, damit der Nutzer auf "Weiter" drückt, anstatt automatisch fortzufahren,
  • bietet keine Shortcuts für die schnelle Einrichtung zu Test- oder Entwicklungszwecken und
  • kann nicht geskriptet oder automatisiert werden.
Der spezielle Teil der Software, auf den über install/ zugegriffen wird, war weitgehend in sich geschlossen und vom Rest getrennt, was ein gutes Ziel für Verbesserungen parallel zu anderen Arbeiten an der 1.9er Serie bietet.

In diesem Beitrag berichten wir, wie das System auseinandergenommen, umgestaltet und neu aufgebaut wurde.

Wichtigste Änderungen


Ein neuer Codeschnipsel für den Installations-
Die neue Implementierung sollte nicht nur die Probleme der Web-GUI lösen, sondern auch eine Schnittstelle für die Kommandozeile (CLI=command line interface) sowie eine PHP-API für die direkte Ausführung einführen.

Anstatt die Schnittstellen auf eine bestimmte Logik zuzuschneiden, wurden GUI und CLI generell für verschiedene zukünftige Verwendungszwecke vorbereitet (u.a. durch das Merge-System, das derzeit seine eigene Benutzeroberfläche benötigt).

Dementsprechend wurden die bestehenden Vorgänge - Installation und Upgrade - als universelle Prozesse mit geregelter Eingabe, Ausgabe und besser isolierter Logik umgeschrieben, während der übrige, wiederverwendbare Code zu Funktionen umstrukturiert wurde.

Entf
Die beste Art der Codeverbesserung ist ihre Streichung. Mit der Umstellung von MyBB 1.9 auf dateibasierte Themes wurde der zeitaufwändigste Vorgang, das Einfügen der Templates in die Datenbank, getrost entfernt. In diesem Sinne wurde auch die GNU GPL-Lizenzvereinbarung weggelassen, da sie sich auf die Verbreitung und nicht auf die Nutzung der Software bezieht. Die Abschlussseite der Installation wurde gestrichen, und die zusammenfassenden Informationen wurden in einen Willkommen bei MyBB-Thread verschoben, der zusätzlich als Dummy-Inhalt für neue Benutzer dient, mit dem sie herumspielen können, nachdem sie vom Installationsprogramm dorthin umgeleitet wurden.

Vorgänge werden automatisch ausgeführt, bis Benutzereingaben erforderlich sind, ohne unnötige Bestätigungen oder technische Meldungen. Beispielsweise überspringt das Installationsprogramm die vollständige Liste der Systemanforderungen, die auf den Download- und Doku-Seiten verfügbar ist, und gibt nur dann relevante Details aus, wenn Probleme gefunden werden.

Die Eingabe von Einstellungen für HTTP-Cookies (verantwortlich für die Felder Domain und Pfad) - praktisch eine Folge der Foren-URL - wurde entfernt, und die Werte werden stattdessen automatisch ermittelt. Ebenso wird die Einstellung für das Secure-Flag jetzt sofort für HTTPS-basierte URLs aktiviert.

Durch die Umstrukturierung wurde die Anzahl der Schritte (und der angezeigten Seiten) auf vier reduziert, wobei alle zusammenhängenden Operationen nach den Arten von Daten gruppiert wurden, von denen sie abhängen (Erfassung über Formulare im Browser oder eine Reihe von Eingabeaufforderungen in der CLI).

Strg+V
Beide Prozesse wurden durch einen Mechanismus ergänzt, der bisher nur im Admin Control Panel verfügbar war: die Überprüfung der Prüfsumme. Da beim Hochladen verschiedene Fehler auftreten können, führt MyBB bei der Installation und beim Upgrade eine Integritätsprüfung seiner Dateien durch.

Eine weitere Funktion, die mit dem Kern in Einklang gebracht wurde, war die Sprachunterstützung: Obwohl eine .lang.php-Sprachdatei verwendet wurde, musste sie bei der Anwendung nicht-englischer Sprachen überschrieben werden, was bei der Verteilung von Übersetzungen ein Problem darstellte. In 1.9 wurde die Datei in die Struktur inc/languages/ verschoben, was bedeutet, dass sie in gewöhnlichen Sprachpaketen bereitgestellt werden kann. Wenn nicht-englische Pakete erkannt werden, wird eine Auswahl angezeigt, und wenn nur eine zusätzliche Sprache vorhanden ist, wird diese zur Standardoption. Diese Auswahl ändert auch die Standardsprache des Forums und die des neuen Administratorkontos.

Außerdem wurde die Versionsprüfung in die grafische Benutzeroberfläche integriert, so dass Webmaster auf einfache Weise feststellen können, ob sie gerade die neueste Version der Anwendung installieren oder aktualisieren wollen.

Einfg
Um ein versehentliches Überschreiben von Daten zu verhindern, werden bei einer bestehenden Installation alternative Überschriften und Beschreibungen angezeigt, die auf eine Neuinstallation hinweisen. Da vergessene Foren aus verschiedenen Gründen als defekt erscheinen können (z.B. fehlgeschlagene Datenbankverbindung oder fehlender Inhalt), wird der erste Schritt mit einem genaueren Status gekennzeichnet.

Um die Hürde für neue Forenbetreiber zu senken, haben wir zwei Verbesserungen an dem Formular für die Datenbankanmeldung vorgenommen, das wahrscheinlich das komplizierteste Formular ist. Erstens gibt der Vorgang jetzt sofortiges Feedback zu den Parametern in mehreren Schritten (Serververbindung, Authentifizierung, Datenbankzugriff und Vorhandensein von alten Tabellen). Zweitens: Während die Standardauswahl der Datenbank-Engine bereits nach den aktivierten PHP-Erweiterungen gefiltert wurde, führt der neue Prozess auch eine Reihe von Annahmen durch, um den Rest des Formulars vorab auszufüllen. Dieses Verhalten kann insbesondere für Tester und Entwickler von Vorteil sein, die standardisierte Anmeldedaten verwenden.

Benutzeroberflächen


Web UI
Ein Screenshot der Datenbankseite, die während der Installation von MyBB mit dem neuen System angezeigt wird, mit einigen ausgefüllten Feldern, die mit den Bezeichnungen
Die neue webbasierte Schnittstelle verwendet einen einzigen index.php-Einstiegspunkt, der Fallback-Code enthält, um freundliche Fehlermeldungen zu liefern, wenn PHP nicht ausgeführt werden kann oder seine Version nicht unterstützt wird.

In MyBB 1.8 und davor wurde Administratoren beim Zugriff auf das Verzeichnis mit einem funktionierenden Forum ein Bildschirm zur Auswahl von Upgrade/Installation angezeigt - dies wurde vereinfacht, indem der Upgrade-Bildschirm standardmäßig geöffnet wurde, mit einem Link zur Erzwingung einer Neuinstallation für lokale Netzwerkanfragen, die auf ein nicht produktives Forum hinweisen.

Der Ablauf in der browserbasierten grafischen Benutzeroberfläche wird von einem clientseitigen Controller verwaltet, der in der Lage ist, Ein- und Ausgaben asynchron zu verarbeiten, so dass die Benutzer nachfolgende Formulare ausfüllen und übermitteln können, während die damit verbundenen Vorgänge im Hintergrund ausgeführt werden. Ein serverseitiger Controller bietet Fallback-Unterstützung für Clients ohne JavaScript.

Mehr Formularfelder nutzen die Vorteile der von Browsern und Passwortmanagern unterstützten Funktionen zur Eingabeüberprüfung und automatischen Vervollständigung. Passwort-Felder wurden mit Reveal-Toggles angereichert (in anderen Browsern als Microsoft Edge, der diese Funktion nativ anbietet) - was die UX mit der Entfernung redundanter Passwort-Eingaben verbindet - und dann am Ende von Formularen platziert, um die Verwendung anderer eingegebener Daten (wie Website-Details, Benutzername oder E-Mail) für die Berechnung der Punktzahl zu erkennen, unterstützt durch die zxcvbn-Bibliothek.

Die automatische Anmeldefunktion wurde erweitert, um ebenfalls eine Sitzung für den Admin CP zu initialisieren, so dass Administratoren diesen sofort erkunden und ihre Foren fertig konfigurieren können.

Installation
Die Vorgänge unterstützen Flags, die als URL-Parameter angegeben werden können.

Entwickler können das dev-Flag verwenden, um die Dateiprüfung zu überspringen und die Details des Administratorkontos vorab auszufüllen, um die Einrichtung zu beschleunigen.

Mit dem fast-Flag versucht die Anwendung eine Null-Klick-Installation und fährt automatisch mit den bereitgestellten Daten und den für die Entwicklung geeigneten Standardeinstellungen fort.

Bei der Installation im Entwicklungsmodus wird ein zusätzlicher Beitrag im Willkommens-Thread mit praktischen Links zum erneuten Starten des Prozesses und zum Zurücksetzen von MyBB in den Standardzustand erstellt.

Vor über sechs Jahren haben wir auf das Umschwenken des beobachteten Web-Verkehrs auf die mehrheitliche Verwendung von HTTPS festgestellt - die heutigen Statistiken zeigen, dass die sichere Übertragung für öffentlich zugängliche Websites ein universeller Standard ist. Obwohl Administratoren neuer Foren sich dessen bewusst sein sollten und HTTPS bereits eingerichtet haben, zögern manche diesen Schritt bis nach der Installation hinaus. Dies ist natürlich gefährlich, da Passwörter und Anmeldeschlüssel bereits jetzt übertragen werden. Daher warnt das Installationsprogramm bei Anfragen aus dem öffentlichen Netz vor einer unsicheren Verbindung (damit die Warnung bei nicht produktiver Nutzung nicht so schnell verhallt).

Im Einklang mit unseren langfristigen Entwicklungsplänen enthält das neue Setup-System weder Inline-Styles noch Skripte, was es uns ermöglichte, standardmäßig eine restriktive Content Security Policy einzuführen.

Die Web-Implementierung verfolgt die Zeit jedes Vorgangs mithilfe der Performance-API, und die benutzerdefinierten Messungen können mit den in einigen Webbrowsern integrierten Entwickler-Tools beobachtet werden.

Sicherheit
Das Installationsprogramm wurde mit zusätzlichen Prüfungen ausgestattet, um Missbrauch zu verhindern. Zuvor war eine Authentifizierung nur für den Zugriff auf das Upgrade-Skript erforderlich, nicht aber für die Installation, was es Dritten ermöglicht haben könnte, darauf zuzugreifen, wenn das komplette Verzeichnis hochgeladen und die Sperrdatei für das Upgrade gelöscht wurde.

Das neue System prüft auf zusätzliche, prozessspezifische Sperrdateien, wobei lock_install automatisch erstellt wird. Um das Forum neu zu installieren, müssen die Administratoren außerdem die Konfigurationsdatei löschen oder leeren, was ein weiterer Hinweis darauf ist, dass die vorhandenen Daten überschrieben werden. In einer Entwicklungsumgebung gelten diese Einschränkungen nicht. In diesem Fall wird auf dem ersten Bildschirm einfach ein detaillierter Installationsstatus angezeigt.

Die mit dem Upgrade-Skript verbundene Authentifizierung wurde überarbeitet, indem Annahmen über die Zuverlässigkeit der Initialisierung und des Umgangs mit Zugangsdaten entfernt wurden, die während des Upgrade-Prozesses vorübergehend unterbrochen werden können (z. B. nach dem Hochladen neuer Dateien, aber vor der Anwendung von Datenbankänderungen). Stattdessen validiert der Aktualisierungsprozess die vom Forum-Frontend übertragenen Sitzungen der Administratoren situativ und verlässt sich ansonsten auf einen punktuellen Nachweis, indem er sie auffordert, eine temporäre Datei zu erstellen, deren Name kryptografisch an einen Cookie-Wert gebunden ist.

CLI
Ein Screenshot eines Kommandozeilenfensters mit den Abschnitten
Das neue PHP-Skript bin/cli, das auf der Kommandozeile ausgeführt werden kann und mit der Konsolenkomponente von Symfony erstellt wurde, enthält Befehle für jeden Wartungsprozess und führt den Benutzer auf ähnliche Weise wie die Web-GUI durch die einzelnen Schritte. Es kann auch jeden der Prozesse nicht-interaktiv ausführen, was die Integration in verschiedene automatisierte Skripte ermöglicht.

Bei Verwendung dieser Schnittstelle kann die Eingabe:
  • interaktiv:
    Board URL:
    > https://example.net/forum
  • als Parameter übergeben werden
    $ bin/cli install --param bburl=https://example.net/forum
  • aus Umgebungsvariablen bezogen werden
    MYBB_INSTALL_BBURL=https://example.net/forum
  • übersprungen und der Standard akzeptiert werden
    $ bin/cli install --fast
    (hier verlassen wir uns auf die Erkennung der Datenbank und eine bestehende Installation, bei der die URL - die im CLI-Modus nicht verfügbar ist - aus alten Einstellungen abgerufen werden kann)
Ähnlich wie im Web-Modus unterstützen die Befehle u.a. die Flags --dev und --fast, zusätzlich zu den in Symfony eingebauten Usability- und Debugging-Optionen.

Wartungsseiten


Wartungsseite
Das neue Aussehen des Installers gehört zu der neuen Reihe von Wartungsseiten, die für besondere Zustände des MyBB-Betriebs verwendet werden und vom Design des 1.9-Frontends und der Website des Projekts inspiriert sind.

Jedem Zustand wurde eine eigene Farbe zugewiesen, und die Seiten unterscheiden sich darin, welche Elemente je nach Thema in einem bestimmten Kontext angezeigt werden: das Forum oder die zugrunde liegende Software.

Das MyBB-eigene Branding wird auf den Seiten für Fehler und geschlossene Foren - die in der Regel von der individuellen Umgebung und der Aktivität des Administrators abhängen - abgemildert und bei der Installation und späteren Upgrades in vollem Umfang angezeigt.

Durch die Bearbeitung von Tausenden von Supportfällen sehen wir, wie sich die geringfügigen Änderungen in der Formulierung von Fehlermeldungen in zukünftigen Hilfeanfragen widerspiegeln, und wir haben eine allgemeine Vorstellung davon, wie die Leute - sowohl die Administratoren als auch die Benutzer ihrer Foren - auf diese reagieren. Die Fehlerseiten richten sich an beide Gruppen mit spezifischen (aber immer noch prägnanten) Vorschlägen für die Kontaktaufnahme mit der technischen Unterstützung, je nach den Umständen und den konfigurierten Kontakteinstellungen.

Neuorganisation der Daten


Die zuvor mit dem Installationsverzeichnis verteilten - und hochgeladenen - Daten wurden in den Kern aufgenommen.

Die permanente Verfügbarkeit der Datenbankschemata, der anfänglichen Daten und der Upgrades - die von install/resources/ in die entsprechenden Unterverzeichnisse unter inc/ verschoben wurden - wird es dem Kern ermöglichen, u.a. seine Selbstüberprüfungsfunktionen auf die Datenbankstruktur auszuweiten und das Zurücksetzen von Einstellungen auf Standardwerte zu ermöglichen. Dieser Aufwand beinhaltete ein Refactoring einiger Daten von einzelnen SQL-Abfragen zu Arrays und eine verstärkte Nutzung von mehrzeiligen Insert-Abfragen, was zu einer verbesserten Leistung führte.

Da statische Assets, die an die GUI gebunden sind, ebenfalls extrahiert wurden, werden alle Upgrade-Pakete (geänderte Dateien), die den Upgrade-Prozess für MyBB 1.9 beinhalten, nur die Einstiegsdatei und wirklich neue oder geänderte Ressourcen enthalten - im Vergleich zu der wachsenden Menge von mehr als 80 Installations-/Dateien, die bei MyBB ≤ 1.8 hochgeladen (und kurz danach entfernt) werden müssen.

Die Datei mit den Prüfsummen der Anwendung wurde ebenfalls verlagert: Die einmalige Online-Funktion der Dateiprüfung, die die Datei vom MyBB.com-Server herunterlädt, bevor sie mit dem Dateisystem verglichen wird, wurde so geändert, dass sie in das Paket für die Offline-Prüfung aufgenommen wird, was die Zuverlässigkeit und den Datenschutz verbessert.

Verschlankung der Abläufe


Wenn Sie MyBB-Foren verwalten oder Erweiterungen entwickeln, sind Sie wahrscheinlich schon auf breitere Schwierigkeiten gestoßen: Um MyBB lokal zu betreiben, muss ein kompletter Web-Stack installiert werden - einschließlich des HTTP-Servers, des PHP-Interpreters und eines Datenbanksystems. Dies kann schnell überfordernd werden, wenn Sie mit verschiedenen Versionen und Systemen testen müssen, um die Einrichtung Ihres Live-Forums zu simulieren oder gemeldete Probleme zu untersuchen.

Unsere Docker Compose-Konfiguration - die sich bereits um die Einrichtung der Web-Stack-Komponenten kümmerte - wurde kürzlich aktualisiert, um auch die Composer-Abhängigkeiten für MyBB 1.9 zu installieren und nun mit dem MyBB CLI auch die Anwendung selbst zu installieren. Das bedeutet, dass Sie nach der anfänglichen Docker-Installation MyBB aus dem Quellcode (in einer beliebigen Branch oder einem Pull Request) zum Laufen bringen können, ohne den Aufwand, die zugrunde liegende Software auf Ihrem Host-System einzurichten oder die Zwischenschritte der Installation von Abhängigkeiten - oder MyBB - manuell mit einem einzigen Befehl zu erledigen.

In ähnlicher Weise wurde das skriptfähige Installationsprogramm verwendet, um eine Standardkonfiguration für GitHub Codespaces zu erstellen - eine zusätzliche Ebene, die eine sofortige webbasierte IDE zum Ausführen, Debuggen und Ändern von MyBB und seinem Quellcode bietet.

Quelle: Designing MyBB 1.9’s Installer von Devilshakerz