Container Station MariaDB (für Nextcloud)

  • Ja wenn, dann mache ich das, ich bin halt noch nicht so weit. Der Container läuft jetzt immerhin, aber das war es auch erstmal. Das kostet bestimmt noch einige Stunden. X/

  • Das ist ja cool. Du bastelst das heute noch fertig, exportierst den Container, schickst ihn mir und ich kann morgen den Container importieren. Dann hab ich eine funktionierende Instanz von Nextcloud mit Datenbankanbindung. Somit alles ohne Streß für mich. Das verstehe ich unter Community. :):P

  • Na gut, solange kann ich auch noch warten. ^^
    Nimmst Du SQLight, natives MariaDB oder MariaDB im Container für NC her?
    Dann brauche ich den Container für MariaDB auch noch... :P

  • Zur Zeit verwende ich MariaDB des Systems. Das kannst Du ja auch machen. Ich will halt die DB im Container zum laufen bringen. ;)

  • Erste zaghafte Versuche scheitern leider. Als Docker Nextcloud und MariaDB (jeweils "latest") genommen.
    Kann Nextcloud auch aufrufen, aber bei dem Versuch Nextcloud mit MariaDB zu installieren wirft er Timeout...bzw. keine Verbindung zur Datenbank...
    Wie kann ich eigentlich innerhalb des MariaDB- Containers eine Datenbank mit PMA anlegen?

  • Hallo allerseits,


    ich hänge mich mal mit rein und schildere mein Setup.


    Ich habe auf meiner Qnap Nextcloud über einen zusätzlichen Apache innerhalb eines selbst angepassten Docker-Containers am Laufen und nutze das nativ bereitgestellte MariaDB der Qnap. Der Docker-Container mit Apache verwendet den Netzwerkmodus "Host". Mit diesem Setup habe ich bisher sehr gute Erfahrungen sammeln können.


    Als Docker-Basis-Image verwende ich "webdevops/php-apache". Dieser bringt bereits ein vollständiges PHP7 und einen voll konfigurierbaren Apache mit. Standardmäßig muss dort nichts mehr groß konfiguriert werden. Da ich jedoch mehrere virtuelle Hosts verwende, musste ich spezielle Anpassungen vornehmen. Diese sind jedoch nicht in jedem Fall nötig.
    Dem Docker-Container wird nun lediglich das passende Verzeichnis der Qnap, worin sich der Inhalt des Webservers befindet, als volume durchgereicht. Nextcloud liegt dort als simples Verzeichnis und wurde initial einfach direkt in diesen Ordner kopiert.


    Zur einfacheren Pflege/Administration habe ich mir ein paar Skripte geschrieben, welche auf Befehl über docker-compose und einem Dockerfile automatisch ein neues Image aus dem angebotenen Basis-Image erzeugen und danach den vorhandenen Container updaten.


    Zum Backup von MariaDB starte ich täglich einmal das Skript von Kenneth Friebert (mysqlbackup - ist im original englischen Qnap-Forum zu finden), welches ein Backup aller vorhandenen MariaDB-Datenbanken durchführt. Diese werden dann zeitversetzt auf eine externe HDD per Hybrid Backup Sync gesichert und tagsüber mit der Cloud synchronisiert. Solltest du PostgreSQL verwenden, so steht auf meiner github-Seite die Lösung von Kenneth Friebert auf PostgreSQL portiert zur Verfügung (ariaci/pgsqlbackup).


    Ciao
    ariaci

  • Danke für die Erklärung Deines Setups. LEider bringt mich das nur bedingt weiter.
    Ich vrauche vorerst keine vHost, und ich will MariaDB mit einem Container nutzen.
    Wie verrate ich Nextcloud welches MariaDB verwendet werden soll, bzw. wie kann ich phpMyAdmin mit dem Docker nutzen. Ich muß ja voraussichtlich erstmal eine DB für Nextcloud anlegen. ?(:?:

  • Moin rednag,


    theoretisch kannst du über phpMyAdmin deine Docker-MariaDB pflegen. Du müsstest halt nur den Server entsprechend konfigurieren und in der phpMyAdmin-Konfiguration den Server unter $cfg['Servers'][...] mit aufnehmen. Der Docker-Container sollte dann seinen internen MariaDB-Port an den Host unter einem evtl. anderen Port weiterreichen. Evtl. deshalb, da ich in deinem konkreten Fall nicht weiß, ob der Standardport (ist glaube ich 3306) von MariaDB schon verwendet wird. Dann kannst du alles über phpMyAdmin konfigurieren.


    Eine andere Möglichkeit wäre, ein MariaDB-Image zu nehmen, was bereits einen eigenen Webserver mit phpMyAdmin mitbringt. Dann kannst du über den Browser und den passenden Port direkt auf die passende Docker-Instanz zugreifen.


    Die dritte Möglichkeit wäre die Administration über die Shell des Docker-Containers. Es sollten dort sämtliche Tools, wie mysql, zur Verfügung stehen. Das wäre aber deutlich mühseliger.


    Die Verbindung zum Nextcloud funktioniert entweder über einen Container-Link oder indem der passende Port des Hosts verwendet wird. Bei einem Link habe ich Docker so verstanden, dass Informationen direkt über die passenden Ports ausgetauscht werden können, ohne dass der Host davon etwas mitbekommt. In beiden Fällen weiß ich leider nicht genau, was noch so konfiguriert werden muss.


    Vielleicht hilft dir das etwas weiter ...


    Ciao
    ariaci

  • Hallo @ariaci und Danke für Deine umfangreiche Anleitung.
    Ich glaube ich stelle mich zu dämlich an. Hab jetzt mal sämtliche Container gelöscht und würde gerne wieder von vorne anfangen. Evtl. hast Du mal Lust mir per Teamviewer unter die Arme zu greifen.
    Als Container würde ich jeweils die Originalen von Nextcloud, MariaDB und phpMyAdmin nehmen. Leider setzt es bei mir schon aus, wie ich die einzelnen Container mit welcher Konfiguration anlegen soll. ?(

  • Moin rednag,


    Können wir durchaus machen ... ich habe mich da mal mit den zwei Images MariaDB und phpMyAdmin befasst. Die sollten am einfachsten und schnell konfiguriert sein. Die Verbindung funktioniert über Links sehr einfach.


    Im Prinzip muss der MariaDB-Container per Link an den phpMyAdmin-Container gebunden werden. Danach kann phpMyAdmin den MariaDB-Container über einen sicheren Kanal erreichen. MariaDB benötigt keinerlei große Konfiguration. Es muss lediglich das Volume für die Daten mit einem lokalen Ordner verbunden werden.


    Bei NextCloud sollte es dann ein ähnliches Vorgehen sein.


    Probiere das mal aus. Wenn du garnicht weiterkommst, mach nen Vorschlag, wann es bei dir passt und wir schauen weiter ... :P


    Ciao
    ariaci

  • Und ich wäre ich euch total dankbar, wenn einer dann das auch als Schritt-für-Schritt Anleitung posten könnte, denn ich bin auch schon seit langem an so etwas interessiert, vor allem weil ich bisher auch keine Ahnung von Docker etc. habe :)

  • Da ich merke, dass es wohl einige Leute gibt, die mit MariaDB, phpMyAdmin und NextCloud über Docker Probleme haben, habe ich mich mal hingesetzt und versucht ein Schritt-für-Schritt-Tutorial zu bauen. Der erste Teil beschäftigt sich mit MariaDB und phpMyAdmin über Docker. Bei beiden verwende ich die offiziellen Docker-Images. Bitte seht dieses kleine Mini-Tutorial lediglich als Leitfaden. Ich kann nicht sicherstellen, dass die Schritte auf allen Systemen identisch sind oder nicht irgendwo Probleme verursachen.


    0) Allgemein: Docker-Container auf Qnap-NAS erstellen

    • auf QTS einloggen
    • Start der Container Station
    • Wechsel auf die Seite "Container erstellen"
    • Auswahl des Images und Klick auf "Erstellen"
      ACHTUNG:
      Ist das zu verwendende Docker-Image lokal noch nicht vorhanden, so wird auf meinem System lediglich eine fast leerer Dialog angezeigt, der die durch das Image nach außen geführten Eigenschaften nicht richtig bzw. komplett anbietet. Dabei handelt es sich in meinen Augen um ein Fehler in der Container Station/QTS. Damit der Dialog direkt beim Erstellen alle möglichen Eigenschaften des Images anbietet, empfehle ich hier ohne große Einstellungen einmal direkt auf "Erstellen" zu klicken um das gewünschte Image damit lokal zur Verfügung zu stellen. Nachdem der Container erzeugt wurde, kann dieser direkt auch wieder gelöscht und erneut auf "Erstellen" geklickt werden. Nun kann direkt Das Image bleibt somit weiter lokal zur Verfügung. Ein anderer Weg wäre, das gewünschte Image per SSH und Docker direkt auf das lokale System zu pullen. Dies ist jedoch etwas aufwendiger und für Anfänger relativ fehleranfällig.
    • Einstellen der Eigenschaften für den Container
    • Bestätigen der Einstellungen mit "Erstellen"

    (!) Bitte beachten
    Um sämtliche Einstellungen eines Images für seinen Container korrekt festlegen zu können, ist ein Blick in die dazugehörige Dokumentation immer ratsam. Die meisten Images inkl. deren Beschreibungen und Quellcodes können direkt auf dem Docker-Hub (https://hub.docker.com) vorgefunden werden.


    1) MariaDB + phpMyAdmin: MariaDB-Container auf Qnap-NAS erstellen

    • Auswahl des Images "MariaDB", Klick auf "Erstellen" und Einstellung des Container-Namens
      MariaDB-Container erstellen - Schritt 1.png
      Im ersten Schritt ist der Container-Name (Feld 1) zu vergeben. Dieser muss lokal eindeutig sein. Im Normalfall ist hier nichts anzupassen. Der hier vergebene Name wird später für phpMyAdmin benötigt. Die restlichen allgemeinen Eigenschaften können ebenfalls beim Standard verbleiben. Nachdem alles für euch passend konfiguriert ist, genügt ein Klick auf "Erweiterte Einstellungen".
    • benötigte Umgebungsvariablen für MariaDB festlegen
      MariaDB-Container erstellen - Schritt 2.png
      Um die Umgebungsvariablen des Docker-Containers festzulegen, müsst ihr in den erweiterten Einstellungen auf die Seite "Umgebung" wechseln. Danach seht ihr eine Liste der Variablen und deren Werte. Die dort sichtbaren Variablen werden unter dem entsprechenden Namen und mit dem festgelegten Wert an den Container übergeben. Diese stehen dann dem Container für seine Zwecke zur Verfügung. Es werden nicht immer alle konfigurierbaren Umgebungsvariablen nach außen geführt. Wichtig ist für das offizielle MariaDB-Image die Umgebungsvariable "MYSQL_ROOT_PASSWORD". Da diese Variable nicht nach außen geführt wird, muss diese per Klick auf "Hinzufügen" angelegt werden. Diese Variable legt das Root-Passwort der MariaDB-Instanz fest. Mit diesem Passwort könnt ihr euch später an der Datenbank zur Administration anmelden.
    • Datenablage der Datenbanken außerhalb des Containers festlegen
      MariaDB-Container erstellen - Schritt 3.png
      Wird dieser Schritt übersprungen, so wird innerhalb des Containers ein extra Datenbereich angelegt, welcher sämtliche MariaDB-Datenbanken und den Zustand von MariaDB beinhaltet. Um später auch Updates der Container durchführen zu können, ohne dass unsere Datenbanken oder der Zustand verloren geht, wird über das Image ein Volume zur Verfügung gestellt. Dieses wird durch den Anbieter definiert und kann lediglich durch ein Host-Volume ersetzt werden. Das Host-Volume legen wir in diesem Schritt fest (Feld 2 + 3). In meinem Fall steht der lokale Ordner "/Public/mariadb-data" im Container für MariaDB unter "/var/lib/mysql" zur Verfügung. Da es sich um eine Art Mount-Point handelt, wirkt sich eine Änderung lokal direkt im Container und andersherum aus.
    • Erstellen des Containers
      Nach Klick auf "Erstellen" hat unser NAS einiges zu tun. Nach einem kleinen :cup: sollte MariaDB mittels Docker laufen. Prüfen könnt ihr dies, indem ihr euch die Konsolenausgabe (unterer Teil in der Container Station - einfach den entsprechenden Docker-Container mit dem richtigen Namen anklicken) anschaut und auf Fehler prüft. Wenn ihr nun den verknüpften Daten-Ordner für den MariaDB-Container auf eurem NAS kontrolliert, so sollten dort schon einige Dateien zu finden sein. Diese wurde vom Container angelegt und spiegeln die Standarddatenbank "mysql" und den Zustand deren wider.

    2) MariaDB + phpMyAdmin: phpMyAdmin-Container auf Qnap-NAS erstellen und mit MariaDB verbinden

    • Auswahl des Images "phpMyAdmin", Klick auf "Erstellen" und Einstellung des Container-Namens
      phpMyAdmin-Container erstellen - Schritt 1.png
      Im ersten Schritt ist wieder der Container-Name (Feld 1) zu vergeben. Es gelten dieselben Richtlinien (wie Eindeutigkeit), wie bei MariaDB. Nachdem alles für euch passend konfiguriert ist, genügt wieder ein Klick auf "Erweiterte Einstellungen".
    • MariaDB und phpMyAdmin miteinander vebinden, damit eine gesicherte Kommunikation zwischen diesen Containern erfolgen kann
      phpMyAdmin-Container erstellen - Schritt 2.png
      Nachdem in die erweiterten Einstellungen gewechselt wurde, befindet man sich, wie auch schon im vorherigen Fall, auf der Seite "Link". Über diese Seite können Docker-Container miteinander verbunden werden. Um eine Verbindung herzustellen reicht ein Klick auf "Hinzufügen" und die richtige Konfiguration der entsprechenden Werte. In der Combobox in der Spalte "Link" ist in unserem Falle der Name des Docker-Container von MariaDB (der im vorherigen großen Schritt erzeugt wurde) auszuwählen. Als Alias ist laut Dokumentation von phpMyadmin die Bezeichnung "db" zu wählen. Damit steht später MariaDB über den Hostname "db" dem phpMyAdmin-Container zu Verfügung. Ist dies getan, so konfigurieren wir nun im letzten Schritt noch unser Netzwerk mit einem Klick auf "Netzwerk".
    • Konfiguration des Ports, um auf den Webserver in unserem phpMyAdmin-Container über den Host zugreifen zu können
      phpMyAdmin-Container erstellen - Schritt 3.png
      Dieser Schritt wird nicht unbedingt benötigt, ist jedoch dann wichtig, wenn ich die phpMyAdmin-Instanz direkt über die Adresse des NAS erreichen möchte. Im Normalfall wählt Docker beim Start des Containers einen zufälligen Port für jeden Port, der durch den Container nach außen gegeben werden soll. In unserem Fall verwendet der phpMyAdmin-Container den Standardport 80 für eine unsichere Verbindung (Standardport für Standard HTTP-Anwendungen) zum Webserver. Um über den Host auf den Webserver des Containers zugreifen zu können, kann jedoch nicht in jedem Fall direkt der Port 80 verwendet werden, da Docker ja nicht weiß, ob dieser Port bereits durch den Host belegt ist. Daher wird wird bei Nichtkonfiguration ein zufälliger, freier Port verwendet. Dieser kann hier auf einen festen Port gelegt werden. In meinem Beispiel der Port 9080. Ist mein NAS über den Namen "testnas" erreichbar, so ist die phpMyAdmin-instanz des Containers über http://testnas:9080 erreichbar.
      Nachdem hier alles entsprechend konfiguriert wurde, kann der phpMyAdmin-Container per "Erstellen" erstellt werden.

    3) MariaDB + phpMyAdmin: phpMyAdmin im Browser verwenden

    • Browser starten und Über Namen des "http://<Namen oder IP des NAS>:<Port>" phpMyAdmin aufrufen
      phpMyAdmin in Aktion - Schritt 1.png
      Wenn alles korrekt konfiguriert wurde, solltet ihr nun die Login-Seite von phpMyAdmin sehen. Als Benutzname "root" und als Passwort das beim MariaDB-Container erstellen angegebene Passwort verwenden.
    • Danach solltet ihr auf der Admin-Seite zur Konfiguration eurer MariaDB-Datenbank landen
      phpMyAdmin in Aktion - Schritt 2.png


    Das war's dann erstmal von mir. Ich hoffe, ihr könnt/konntet mit der kleinen :handbuch: etwas anfangen.
    Und nun viel Spaß beim Nachmachen ... :qnap:


    Ciao
    ariaci

  • Wow, eine sehr gut erklärte und bebilderte Arbeit. Da hast Du Dir eine Menge Arbeit damit gemacht. Ich denke Du sprichst damit viele User (inkl. meine Wenigkeit) an. Docker ist unheimlich spannend wie ich persönlich finde, aber noch nicht in der breiten Masse angekommen. Dafür ist das ganze zu nerdig und komplex. Also zumindest empfinde ich das so. Dank der guten Anleitung konnte ich mich bei phpMyAdmin mit dem vorher gesetzten PW anmelden und eine Datenbank für Nextcloud erstellen. Das war es aber dann auch schon wieder. :S
    Ich vermute ich muß für Nextcloud auch noch irgendwas unter "Umwelt", "Netzwerk" oder so eintragen oder? Das höchste der Gefühle wäre ein eigenes Verzeichnis für "data" Also nicht /nextcloud/data sondern ein gemeinsamer Ordner auf der NAS. Aber das ist derzeit noch zu hoch für mich. Ich meine ja, ich konnte dank Deiner Anleitung ein kleines Erfolgserlebnis verbuchen, aber vertanden habe ich es nicht wirklich. Evtl. kannst Du doch mal per TV draufgucken. Hab auch noch ein anderes Problem mit dem vSwitch. Das kann ich Dir aber gerne per PN schildern, da es hier OT ist und nicht zum Thema gehört.


    Ein ganz dickes "Dankeschön" für die Anleitung!

  • Da ich alleine leider noch nicht weitergekommen bin wollte ich mal kurz nachfragen, wie hoch die Chancen stehen bei der Anleitung noch Nextcloud mit aufzunehmen? :handbuch:
    Ich gebe Dir auch ein virtuelles :beer: aus.