DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

phpMyAdmin neben Nextcloud installieren (nginx)

phpMyAdmin Logo

phpMyAdmin ist eine Webanwendung zur Administration von MySQL-Datenbanken. Zwar kann eine Datenbank auch über den Befehl mysql auf der Kommandozeile direkt administriert werden, jedoch ist die grafische Benutzeroberfläche von phpMyAdmin weitaus intuitiver zu bedienen, als SQL-Befehle direkt in der Kommandozeile einzutippen.

Dies Artikel zeigt daher, wie man phpMyAdmin auf einem Ubuntu Server 18.04.1 in Verbindung mit nginx als Webserver installieren und einrichten kann. In dieser Konfiguration sind nach der Installation noch einige Optimierungen für phpMyAdmin notwendig. Als Grundlage dienen hier zwei bereits bekannte Artikel:

Ich gehe daher im Folgenden davon aus, dass Nextcloud mit MariaDB/MySQL bereits auf dem System installiert ist. Für die verschlüsselte Verbindung über HTTPS sollte ein gültiges SSL-Zertifikat ebenso bereits vorhanden sein.

Update-Historie (letztes Update 13.01.2019)
  • 13.01.2019:
    • Anweisungen für PHP_VALUE und client_max_body_size angepasst, so dass nun auch größere SQL-Dumps verarbeitet werden können.

 

Installation phpMyAdmin

Zunächst bringen wir das System auf den neusten Stand:

Anschließend kann phpMyAdmin durch folgenden Befehl installiert werden:

Der Installer läuft dabei interaktiv ab, so dass eine Grundkonfiguration bereits nach der Installation des Paketes gegeben ist.

In einem ersten Schritt folgt die automatische Konfiguration des Webservers. Hier werden leider nur die Optionen apache2 und lighttpd angeboten – nginx befindet sich nicht in der Auswahl.

phpMyAdmin Setup: Auswahl des Webservers

phpMyAdmin Setup: Auswahl des Webservers

Daher wird hier keine Option ausgewählt, sondern der Schritt einfach mit Enter übersprungen.

Die Installation wird nun fortgesetzt und nach einer kurzen Zeit erscheint ein Hinweis, dass für den Betrieb von phpMyAdmin eine Datenbank installiert und konfiguriert sein muss.

phpMyAdmin Setup: Konfiguration mittels dbconfig-common

phpMyAdmin Setup: Konfiguration mittels dbconfig-common

Achtung: Die Datenbank (MariaDB) wurde bereits beim Setup von Nextcloud installiert und aufgesetzt (siehe hier bzw. hier). Falls man hier nun Yes wählt, erhält man im nächsten Schritt einen Fehler. Daher muss an dieser Stelle No gewählt werden.

Nach wenigen Augenblicken ist die Installation von phpMyAdmin dann auch schon abgeschlossen.

Konfiguration nginx für phpMyAdmin

Während der Installation von phpMyAdmin stand nginx als Webserver leider nicht zur Auswahl, daher muss der Webserver nach dem Setup noch manuell angepasst werden.

Der richtige Ort für die Änderungen ist dabei der Gateway-Host:

Hier fügen wir nun ganz am Ende (aber vor der letzten schließenden Klammer) folgenden Inhalt ein:

Am Ende wird der Webserver noch neu gestartet, damit die Änderungen wirksam werden:

Optimierung der phpMyAdmin-Installation

Da nun alle Vorbereitungen getroffen wurden, kann man sich nun mit folgender URL bei phpMyAdmin anmelden:

https://meinedomain.de/phpmyadmin

Es erscheint eine Anmeldemaske, mit der man sich nun als User root an der Datenbank anmelden kann. Das Root-Passwort wurde bei der ursprünglichen Installation von MariaDB angelegt (siehe hier). Eine Anmeldung mit Root ist notwendig, da man ansonsten nicht die erforderlichen Rechte an der Datenbank besitzt, um umfangreiche Änderungen durchzuführen.

phpMyAdmin: Anmeldung mit Root-Account

phpMyAdmin: Anmeldung mit Root-Account

Direkt nach dem Login wird man mit zwei Warnungen konfrontiert. Um die Einrichtung von phpMyAdmin abzuschließen ist leider noch etwas Handarbeit notwendig.

phpMyAdmin: Fehler nach erstem Login

phpMyAdmin: Fehler nach erstem Login

Passwort zur Verschlüsselung generieren

Zunächst kümmern wir uns um die untere Fehlermeldung („blowfish_secret“). Dabei handelt es sich um ein Sicherheits-Feature, bei dem ein Passwort zur Verschlüsselung der Verbindung in einer Konfigurations-Datei von phpMyAdmin hinterlegt werden muss.

Dieses Passwort muss genau 32 Zeichen lang sein. Am einfachsten kann man ein entsprechendes Passwort (oder besser gesagt den entsprechenden Hash-Wert) über die Seite Blowfish password hash generator generieren lassen.

Blowfish password hash generator

Blowfish password hash generator

Dazu gibt man in das entsprechende Eingabefeld einfach ein möglichst komplexes Passwort ein. Einfacher geht es über die Schaltfläche zur automatischen Generierung eines Passwortes (roter Pfeil). Dieses Passwort muss man sich dabei nicht merken, daher kann es eine beliebige Zeichenfolge (am besten mit Sonderzeichen) sein. Anschließend wird der Hash-Wert über den Button Generate erzeugt. Dieses Hash-Wert muss man nun kopieren.

Nachfolgend wird folgende Datei bearbeitet:

Ganz am Ende der Datei wird nun folgende Zeile mit dem soeben kopierten Hash-Wert eingefügt:

Verwaltungsdatenbank für phpMyAdmin anlegen

Wenn man die phpMyAdmin-Seite neu lädt, sollte nun nur noch eine Fehlermeldung zu sehen sein: Es muss noch eine Verwaltungsdatenbank für phpMyAdmin angelegt werden. Dazu klickt man einfach auf den Link Finden Sie heraus warum in der Meldung.

Anschließend klickt wiederum auf den Link anlegen auf der erscheinenden Seite.

Nach einem kurzen Moment sollte die neue Datenbank erfolgreich angelegt worden sein.

phpMyAdmin: Die Verwaltungs-Datenbank wurde erfolgreich angelegt

phpMyAdmin: Die Verwaltungs-Datenbank wurde erfolgreich angelegt

Fehler beim Öffnen von Tabellen

Auf der Übersichts-Seite von phpMyAdmin sollten nun keine Fehlermeldungen mehr angezeigt werden. Man wird beim Arbeiten mit phpMyAdmin jedoch auf ein weiteres Problem stoßen, wenn man eine Tabelle in einer Datenbank öffnen möchte.

Hier wird dann die Meldung count(): Parameter must be an array or an object that implements countable angezeigt:

phpMyAdmin: Fehler nach dem Öffnen einer Tabelle

phpMyAdmin: Fehler nach dem Öffnen einer Tabelle

Hierbei handelt es sich um einen Fehler im Quellcode des phpMyAdmin-Paketes, welches in den Ubuntu Paketquellen enthalten ist. Hier muss noch eine kleine Änderung am Sourcecode vorgenommen werden.

Dazu öffnen wir folgende Datei:

Anschließend suchen wir nach folgender Zeile (am besten folgende Zeile kopieren und in nano mittels STRG + W danach suchen):

Diese eine Zeile (und nur diese!) wird dann gelöscht und durch folgende Zeile ersetzt:

Nach dieser kleinen Änderung sollte kein Fehler mehr beim Öffnen einer Tabelle erscheinen.

Fehler beim Importieren/Exportieren von Datenbanken

Das nächste Problem wird man bemerken, wenn man Datenbanken importieren oder exportieren möchte. In beiden Fällen wird man folgende Fehlermeldung bekommen:

Warning in ./libraries/plugin_interface.lib.php#551
count(): Parameter must be an array or an object that implements Countable

Auch hier muss man den Code modifizieren, so dass meine Fehlermeldungen mehr erscheinen.

Dazu öffnen wir die betroffene Datei:

Anschließend wird die betroffene Code-Zeile gesucht (STRG + W):

Die komplette Zeile wird nun durch Folgendes ersetzt:

Nach dem Speichern der Datei wird der Fehler beim Importieren/Exportieren nicht mehr erscheinen.

Optional: Zugriff auf phpMyAdmin nur über das lokale Netzwerk

Der Zugriff auf die Datenbankverwaltung ist mit dem gezeigten Setup von überall aus möglich – auch aus dem Internet. Aus Gründen der Sicherheit ist es hier eine Überlegung wert, ob man den Zugriff auf phpMyAdmin auf das lokale Netzwerk (LAN) beschränken möchte.

In diesem Fall müssen nochmals die Anweisungen für phpMyAdmin im Gateway-Host angepasst werden:

Ganz oben im location-Block für phpMyAdmin fügen wir nun folgende Anweisungen ein:

Nach einem Neustart des Webserver ist phpMyAdmin nur noch im lokalen Netzwerk (192.168.178.xxx) erreichbar. Beim Zugriff über das Internet erscheint dann nur ein Fehler HTTP 403 (Forbidden).

Fazit

Die Installation von phpMyAdmin ist schnell erledigt, jedoch sind hier und da noch einige Nacharbeiten notwendig, bis das Datenbankverwaltungs-Tool einwandfrei funktioniert.

Jedoch lohnt sich hier der Aufwand, da man nun die Datenbanken auf dem System komfortabel mit einer grafischen Oberfläche bearbeiten kann. Das ist viel intuitiver, als mit dem Tool mysql die Datenbanken auf der Kommandoziele zu bearbeiten.

Trotzdem sollte man immer beachten, dass man mit phpMyAdmin Admin-Zugriff auf alle Datenbanken hat (zumindest, wenn man sich mit dem User ‚root‘ einloggt). Beim Bearbeiten der Datenbanken sollte man Vorsicht walten lassen – eine falsche Bearbeitung von Tabellen kann hier dazu führen, dass die auf der Datenbank basierende Anwendung nicht mehr wie erwartet funktioniert.

Weiterführende Artikel

Links

, , , , , , , , ,

Kommentare: 23

  • Hans sagt:

    Hallo, genau was ich gesucht habe, vielen Dank

    Gruß Hans

  • Carsten sagt:

    Hallo Jan
    wie immer, großartige Anleitung.
    Hast du vielleicht Lust eine Anleitung für „Cockpit“ (websocket) zu schreiben?
    Vielen Dank für deine Arbeit

    Carsten

  • Carsten sagt:

    Alles andere, was ich gefunden habe, muss man von Beginn an installieren, da der Webserver dann damit konfiguriert werden muss. Webmin gefiel mir nicht, weiß gar nicht genau warum. Suche eine gute Übersicht über systemrelevante Informationen und ein terminal im Browser.

  • Thomas Schneider sagt:

    Hallo Jan,

    erstmal vielen Dank für die ganzen Anleitungen, habe nextcloud und phpmyadmin umgesetzt und funktionierte auf Anhieb

    Hab nur ein kleines Problem:
    phpmyadmin ist aus dem Internet erreichbar

    Habe meinen Gateway-Host xxxx.xxxx.de.conf folgendermaßen abgeändert:

    location /phpmyadmin {
    allow 192.168.178.0/24;
    deny all;
    root /usr/share/;
    index index.php index.html index.htm;

    location ~ ^/phpmyadmin/(.+\.php)$ {
    try_files $uri =404;
    root /usr/share/;
    fastcgi_pass php-handler;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME
    $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_param PHP_VALUE „open_basedir=/var/www:/tmp/:/usr/share/phpmyadmin:/usr/share/php:/etc/phpmyadmin/“;
    }

    location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    root /usr/share/;
    }
    }
    }

    Danach den nginx neu gestartet, leider ist phpmyadmin immer noch aus dem Internet erreichbar.

    Kannst Du mir weiterhelfen, Danke?

    Grüße
    Thomas

    • Jan sagt:

      Hi Thomas,

      ich habe das ganze nun nochmal schnell bei mir lokal verprobt.
      sobald ich die Zeilen
      allow 192.168.178.0/24;
      deny all;

      dort einfüge, ist phpMyAdmin nicht mehr aus dem Internet erreichbar.

      Teste doch bitte mal folgendes:
      Zunächst, was passiert, wenn du nicht über deinen Internet-Anschluss gehst, d.h. phpMyAdmin über das Handy im Mobilfunknetz aufrufst? Klappt auch hier der Zugriff?
      Ansonsten probiere doch mal, sämtliche Anweisungen bzgl. phpMyAdmin im Gateway-Host auszukommentieren. Wenn es dann immer noch über das Internet klappen sollte, ist der Gateway-Host gar nicht involviert und er sucht sich den Weg irgendwie anders.
      Zu guter Letzt: Entspricht das allow 192.168.178.0/24 tatsächlich deinem Subnet?

      Gruß,
      Jan

      • Thomas Schneider sagt:

        Hallo Jan,

        ich habe es immer nur über meinen Internet-Anschluss probiert, wenn ich über Mobilfunk die Seite aufrufe kommt 403 Forbidden. Es funktioniert also.

        Vielen Dank für deine Hilfe und noch schöne Feiertage.

        Grüße
        Thomas

  • Un Known sagt:

    Hallo,

    habe nach der aktuellen Anleitung Ubuntu Server + Nextcloud und phpMyAdmin aufgesetzt – funktioniert alles problemlos.

    Allerdings klappt die Einschränkung des Zugriffs mit:
    „allow 192.168.178.0/24;
    deny all;“
    nicht richtig. Die entsprechende Seite wird nach dem hinzufügen der 2 Linien gar nicht mehr angezeigt (403 Forbidden), AUCH aus dem lokalen Netzwerk.

    Bei der Konfiguration von nginx habe ich mich an die vorgaben aus deinen Anleitungen gehalten.

    Woran könnte das liegen?

    • Jan sagt:

      Hi,

      ist denn „192.168.178.0/24“ das richtige Subnet? Oder anders gesagt, wenn dein Router andere IPs vergibt (z.B. 192.166.178.x), dann muss die Angabe unter „allow…“ natürlich entsprechend angepasst werden.

      Gruß,
      Jan

  • Hans M. sagt:

    Hallo Jan,
    vielen Dank für diese und die vielen anderen Anleitungungen.

    phpMyAdmin läuft auch soweit.
    Dennoch erhalte ich in der nginx error log folgende meldung:

    [error] 851#851: *1863 FastCGI sent in stderr: „PHP message: phpmyadmin: Failed to load /var/lib/phpmyadmin/blowfish_secret.inc.php Check group www-data has read access and open_basedir restrictions.
    PHP message: phpmyadmin: Failed to load /var/lib/phpmyadmin/config.inc.php Check group www-data has read access and open_basedir restrictions“ while reading response header from upstream, client: 192.168.178.50, server: xxxx.xxxx.xxxx, request: „POST /phpmyadmin/db_structure.php?ajax_request=1&favorite_table=1&sync_favorite_tables=1&token=1801fc4bd34eef75f2c59259c74a913d HTTP/2.0“, upstream: „fastcgi://unix:/run/php/php7.2-fpm.sock:“, host: „192.168.178.50“

    Ich habe bereits die /etc/phpmyadmin/config.inc.php nach /var/lib/phpmyadmin/ kopiert und die Besitzrechte von phpmyadmin/ auf www-data:www-data geändert.
    In die Datei /var/lib/phpmyadmin/blowfish_secret.inc.php habe ich das erstellte blowfish secret eingetragen.

    Leider hat sich an der Fehlermeldung nichts geändert.
    Hast du eine Lösung?

    Freundliche Grüße

    Hans M.

    • Jan sagt:

      Hallo Hans,

      komisch, bei dir scheint phpMyAdmin die Datei in anderen Verzeichnissen zu suchen.
      Nehm diese Verzeichnisse doch mal unter open_basedir in der Datei /etc/nginx/conf.d/meinedomain.de.conf auf. Hier müsste es also heißen (Verzeichnis /var/lib/phpmyadmin/ bei open_basedir hinzugefügt hinzugefügt):
      fastcgi_param PHP_VALUE "open_basedir=/var/www:/tmp/:/usr/share/phpmyadmin:/usr/share/php:/etc/phpmyadmin/:/var/lib/phpmyadmin/
      upload_max_filesize = 100M
      post_max_size = 100M
      max_execution_time = 3600";

      Vielleicht verschwindet die Meldung dann ja.

      Gruß,
      Jan

  • Marcel sagt:

    Hallo Jan,

    erstmal vielen dank für deine ganzen Artikel/Anleitungen, vor allem für die Erklärungen.

    Mir ist aufgefallen das du in deinen Anleitungen meistens den Gateway-Host verwendest und von dort auf den App/Webdienst-Host weiterleitest. Im Fall von phpMyAdmin tust du das nicht, gibt es dafür einen Grund?

    Danke und Gruß
    Marcel

    • Jan sagt:

      Hallo Marcel,

      das hat in diesem Fall keinen speziellen Grund. Man könnte auch einen weiteren vHost anlegen, so dass die Kommunikation dann so aussehen könnte: Gateway-Host -> phpMyAdmin-vHost -> phpMyAdmin-Backend.
      Allerdings wäre der vHost für phpMyAdmin dann sehr simpel, so dass ich das in diesem Artikel einfach in den Gateway-Host mit eingepackt habe.

      Gruß,
      Jan

      • Marcel sagt:

        Hi Jan,

        ich hab das jetzt mal umgesetzt und es funktioniert auch grundsätzlich, nur bekomme ich im phpMyAdmin zwei Meldungen.

        OpenSSL error: error:0E06D06C:configuration file routines:NCONF_get_string:no value

        OpenSSL error: error:0909006C:PEM routines:get_name:no start line

        Da ich die vorher nicht hatte, gehe ich davon aus das ich irgend etwas im Gateway-Host oder im v-Host vergessen oder falsch gemacht habe.

        Hier mal meine Einstellungen:
        Gateway-Host:

        #
        # phpMyAdmin
        #
        location ^~ /phpmyadmin/ {
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        send_timeout 3600;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_max_temp_file_size 100m;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:83;
        proxy_redirect off;
        }

        v-Host:

        server {
        listen 127.0.0.1:83;
        server_name 127.0.0.1;

        # Path to the root of your installation
        root /usr/share/;

        # Logging
        error_log /var/log/phpmyadmin.access_log;
        access_log /var/log/phpmyadmin.error_log;

        location /phpmyadmin {
        index index.php index.html index.htm;

        client_max_body_size 100M;

        auth_basic „Passwortgeschützter Bereich“;
        auth_basic_user_file /etc/nginx/.htpasswd;

        location ~ ^/phpmyadmin/(.+\.php)$ {
        try_files $uri =404;
        fastcgi_pass php-handler;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
        fastcgi_param PHP_VALUE „open_basedir=/var/www:/tmp/:/usr/share/phpmyadmin:/usr/share/php:/etc/phpmyadmin/
        upload_max_filesize = 100M
        post_max_size = 100M
        max_execution_time = 3600“;
        }

        location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
        }
        }
        }

        Hast du vielleicht ein Tip für mich?

        Danke Marcel

      • Marcel sagt:

        Ok nach einem erneuten Nginx restart läuft alles, keine Meldungen mehr im phpMyAdmin.

        • Jan sagt:

          Hallo Marcel,

          gut, du hast das Problem schon selbst lösen können. Mir wäre dazu auch wenig eingefallen, da ich ein solches Problem noch nie beobachten konnte.
          Auf jeden Fall danke für die Rückmeldung.

          Gruß,
          Jan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.