mAirlist auf Microsoft SQL-Datenbank installieren bzw. migrieren

Wir haben mAirlist als localDB installiert, soweit so gut. Jetzt wollen wir aber von anderen Arbeitsplätzen aus die Datenbank bearbeiten können und dazu gibt es für 150 Euro eine Extra-Lizenz für das Datenbank-Management. Neben dieser Lizenz ist auch voraussetzung, dass die Datenbank für alle Clients im Zugriff ist. Das könnten wir einerseits durch eine FIle-Freigabe erreichen, wollen das aber andererseits sicher und skaliwerbar haben. Daher entscheiden wir uns für eine SQL-Lösung. mAirlist kann PostreSQL, mySQL und eben auch MS SQL. Die Express-Version von Microsoft SQL ist kostenfrei bis 10 GB Datenbankgröße und ich hoffe, dass uns das eine Weile ausreichen wird.

Wir installieren die SQL-Datenbank auf der gleichen Maschine wie mAirlist selbst – also lokal – , damit wir keinen weiteren Single-Point-Of-Failure aufbauen und auch bei Netzwerkstörungen nicht die Verbindung zur Datenbank verlieren können. Sollte der mAirlist Server abrauchen haben wir ein Backup und sind aber soweit unabhängig von weiteren Systemen.

Die SQL Express laden wir uns von der Microsoft Homepage herunter. Wir haben die Version 2022 (SQL2022-SSEI-Expr.exe) gewählt.

Bei der Installation wählen wir „Medien herunterladen“, da wir den dort geladenen Installer dann für Änderungen an der Datenbank-Instanz benötigen werden und wir die Datenbank selbst installieren wollen. Dieser speichert sich im Download-Ordner und heißt bei uns: SQLEXPR_x64_DEU.exe

Microsoft SQL Express Datenbank installieren

Nach dem Start des Installers wählen wir den ersten Punkt „Neue eigenständige SQL Serbver-Installation“ aus.

Nachdem wir die Lebensbedingungen akzeptiert haben und auf weiter klicken prüft der Installer dann, ob alle Voraussetzungen zur Installation erfüllt sind.

Ist dies der Fall klicken wir erneut auf weiter. Die Azure-Erweiterung für SQL brauchen wir nicht und entfernen den Haken. Beim nächsten Bild benötigen wir die SQL-Replikations-Dienste auch nicht wirklich (außer man möchte später die SQL-Server-Replikation nutzen, dies kann aber auch nachträglich über den Installer noch ergänzt werden).

Nach einem beherzten Klick auf „weiter“ wählen wir eine benannte Instannz und benennen diese (in unserem Fall) wie unser Radio eben heisst, also NDWRADIO.

und klicken danach auf weiter. Im nächsten Schirm lassen wir alles auf den Voreinstellungen

und nach einem weiteren „weiter“-KLick entscheiden wir uns dass wir den gemischten Modus für die Authentifizierung wünschen. Dort vergeben wir dann ein Passwort für den Benutzer „SA“. Dieses wird später noch bentötigt, also gut aufschreiben!

Nach dem Klick auf „weiter“ wird dann der SQL-Server und die Instanz installiert. Das dauert eine Weile.

Installation des Microsoft SQL Management Studios

In der Zeit laden wir uns das Microsoft SQL Management Studio herunter und installieren dieses auf unserem. PC. Dieses Tool wird benötigt um später EInstellungen an der Instanz vornehmen zu können, wie beispielsweise das Anlegen der mairlist Datenbank in unserer Datenbank-Instanz an sich.

Dort folgen wir einfach den Anweisungen auf dem Bildschirm und schöießen die Installation des Management Studios ab.

Weitere Installation der SQL-Instanz und einrichten der mairlist Datenbank

Nachdem die Installation der INstanz abgeschlossen ist

starten wir das Management Studio um in der Instanz die mairlist Datenbank anzulegen.

Wir wählen unseren Server (den Namen des Rechners) sowie den instalierten Innstanznamen und geben für den Benutzer sa das zuvor vergebene Passwort ein und wählen unten „Trust server certificate“ aus.

Auf der linken Seite finden wir nun den Punkt „Databases“ und durch Rechtsklick auf den Menüpunkt können wir „New Database“ wählen um eine neue Datenbank anzulegen.

Diese benennen wir „mairlist““. Alle anderen “ und klicken auf OK.

Die Datenbank taucht nun auf der Linken seite als eigenständiger Punkt auf. Wir schließen das Management Studio und führen die Installation nun in der Konfiguration von mAirlist selbst weiter aus.

Im Konfigurationsprogramm von mAirlist gehen wir auf Datenbanken und fühen eine neue Datenbank hinzu. Wir wählen hier mAirListDB (SQL).

Dort geben wir die eben definierten Daten ein

und testen anschließend die SQL-Verbindung. Es wird der HInweis erscheinen, dass die Verbindung funktioniert, aber noch keine config angelegt wurde.

Dies beheben wir in dem wir auf den Punkt „Einrichtung“ klicken und dort dann auf „Tabellenstruktur einrichten“

Um die Datenbank besser erkennen zu können empfehle ich unter dem Reiter „Erweitert“ im Bereich „Benutzerdefinierte Bezeichnung“ einen eindeutigen Namen für die Datennbankverbindung zu definieren. Danach alles mit OK bestätigen und speichern. Fertig.

Automatisches speichern der Cover-Bilder

mAirlist bietet die Möglichkeit, mit dem Parameter %ALBUMART das im Track hinterlegte Cover mit zu übermitteln.

Wichtig ist es dabei zu beachten, dass hier für das POST-Kommando multipart/form-data gewählt wird. Als Parameter wähle ich hier $cover und $mairlistid um später in der Laravel-Programmierung das Cover unter der mairlistid speichern zu können, da alle unsere Titel in der Datenbank auf dem Webserver mti der mairlistid indentifiziert werden können.

Wichtig bei Laravel ist, da es sich um ein POST-COmmand handelt muss die csfr-token-prüfung abgeschaltet werden, sonst kommt der Quatsch erst gar nicht beim Controller an. Das hat mich ein paar Stunden gekostet, bis ich das gemerkt habe, warum mein lokaler Test funktioniert, aber der externe Test nicht.

In Laravel 11.x muss das in config/app.php mit hinzugefügt werden:

   ->withMiddleware(function (Middleware $middleware) {
        $middleware->validateCsrfTokens(except: [
            'logging/*',
        ]);
    })

damit wird der Pfad logging/* exkludiert von der csfr-Token-Prüfung und die Daten kommen beim Controller dann auch an.

In meinem Controller für das Logging habe ich das dann so umgesetzt, dass mairlistid und cover entsprechdend ermittelt und gesichert werden:

public function cover(Request $request)
    {

         // Prüfe ob die variablen gewünscht und im richtigen Format sind
        $request->validate([
            'cover' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'mairlistid' => 'required|string',
        ]);

        // Erhalte die mairlistid aus der Anfrage
        $mairlistid = $request->input('mairlistid');

        // Erhalte das Bild aus der Anfrage
        $image = $request->file('cover');

        // Definiere den Speicherort und den Dateinamen
        $destinationPath = 'coverimages';
        $imageName = $mairlistid . '.' . $image->getClientOriginalExtension();

        // Speichere das Bild
        $image->storeAs($destinationPath, $imageName, 'public');

        // Erfolgsnachricht mit Bildname zurückgeben
        return back()->with('success', 'Image uploaded successfully')->with('image', $imageName);

}

Somit werden dann die erhaltenen cover-Images als mairlistid.ext auf dem storage in Laravel gespeichert. Tolle Wurst.