#2 Allgemeine Probleme und Migration

Das Repository sollte direkt out-of-the-box eine lauffähige WordPress Instanz erstellen. In diesem Post möchte ich jedoch über allgemeine Fehlerbehandlung und Probleme berichten, die mir bei der Vorbereitung der Images unter gekommen sind.

Ich kann keine Bilder hochladen oder plugins runterladen.

Unabhängig von Docker und seinen Containern, liegt die Ursache bei einem Abbruch im Hochladeprozess  darin, dass die Ziel-Ordner nicht richtig freigegeben worden sind. Für den Download und Upload von Daten ist das PHP Modul zuständig. Der Nutzer unter dem PHP arbeitet ist www-data:www-data, sodass die Ordner auch dementsprechend für diesen Nutzer freigegeben werden sollten. Dies kann wie folgt geschehen:

$ sudo chown -R www-data:www-data wp-content/
$ sudo chmod -R 755 wp-content/

Interessant zu wissen ist auch, dass www-data nur ein Name ist und intern vom Betriebssystem noch einmal auf eine eindeutige UID und GID gemappt wird. Dieses Problem trat bei Benutzung des originalen PHP-fpm Modules auf. Innerhalb des Containers war die UID und GID von www-data auf 82 gemappt, während diese auf dem Host System von www-data auf 33 gemappt worden sind. Obwohl also anscheinend der gleiche Nutzername vorherschte, ware es in Wirklichkeit so, dass der interne Nutzer des Containers mit der ID 82 auf den Ordner im Host System schreiben wollte, welcher nur für den Nutzer mit der ID 33 freigegeben war. Dieses Problem habe ich umschifft, indem ich in dem Dockerfile die jeweiligen IDs des Nutzers innerhalb des Containers entsprechend zu der ID 33 geändert habe.

Caddy funktioniert nicht mehr, startet jedes mal neu.

Dies ist ein allgemeines Problem wenn man mit dem Caddy Container arbeitet. Wenn Caddy gestartet wird und eine Domain konfiguriert ist, sowie die automatische Zertifikats Abfrage über Let’s Encrypt aktiviert ist, so generiert Caddy immer ein neues Zertifikat, wenn es kein vorhandenes findet. Wenn dieses erstellte Zertifikat nicht auf dem Host System persisitiert wird, wird es beim herunterfahren des Containers gelöscht und eine neue Anfrage wird beim Neustart ausgeführt. Das Problem jedoch ist, dass Let’s Encrypt nur eine begrenzte Anzahl an Zertifikaten für eine Domaine zulässt (mit einer GÜltigkeit von 7 Tagen). Wird diese Anzahl überschritten, wird kein Zertifikat mehr ausgestellt (siehe auch diesen Post ). Deshalb würde ich auch empfehlen, die Zertifikate an das Host System zu binden. Zertifikate werden per Default intern im $HOME Verzeichnis (/home/.caddy) des Caddy Containers gepspeichert. Dieser Pfad kann auch wieder nach belieben durch injizieren einer Umgebungsvariable (CADDDYPATH) konfiguriert werden.

Migration

Ich hatte zuvor schon eine funktionsfähige WordPress Installation mit Hilfe dieser Quelle (medium) hochziehen können. Die beigefügten Services sind die Folgenden: Caddy (v0.9), PHP(v5.6) and MySQL(v5.5). Jedoch war die PHP Version mittlerweile veraltet und musste somit auf den neuesten Stand gebracht werden.

Wieso PHP 7

PHP 7 ermöglicht eine Performance Steigerung im Vergleich zu PHP 5 (siehe dazu diesen Artikel ). Dadurch, dass der Raspberry Pi nur ein kleiner Mini Computer ist, wollen wir natürlich jedes Performance Prozent rauskitzeln. PHP 7 ist jedoch wiederum nicht kompatibel mit der MySQL 5.5 Version, sodass auch die Datenbank upgedatet werden musste. Daraus resultierte ein neues Problem, da noch kein MySQL 7 image für die ARM Architektur des Pi’s vorhanden war, musste ich also mit MariaDB(v10.3.17) vorlieb nehmen.

Migration der Datenbank

Es gab keine großen Schwierigkeiten bei der Migration der Daten von MySQL 5.5 nach MariaDB 10.3.17. Die angehangenen Ordner unter /var/lib/mysql konnten wiederverwendet werden, sodass in der docker-compose.yml nur das Quell Image ausgetauscht werden musste (zur Sicherheit vorher jedoch doch noch ein backup ziehen). Nachdem die MariaDB das allererste mal gestartet wurde, muss die Datenbank upgedatet werden mit dem foolgendem Befehl:

$ docker exec webservice_mariadb_1 sh -c 'exec mysql_upgrade -uroot -p"[myrootpassword]"' 

Wegen des Updates wurden die gehashtenWordpress Passwörter ungültig, sodass diese wiederrum erneuert werden mussten. Um dies zu tun muss zuerst in den Datenbank Container navigiert werden :

$ docker exec -it webservice_mariadb_1 mysql -u root -p

Meine WordPress Datenbank hat den Namen blog, unter welchem die Nutzer-Daten in der Tabelle wp_users gespeichert sind. Dadurch, dass ich nur einen Nutzer hatte war es für mich leicht das Passwort zurückzusetzen. Das Zurücksetzen auf das Passwort “passw0rd” könnte wie folgt aussehen:

$ UPDATE blog.wp_users SET user_pass=MD5('passw0rd')

Bei der initialen Änderung und Vergabe des Passwortes erlaubt WordPress ein MD5 hash, scheint diesen jedoch später in einen sicherern hash abzuändern.  (Quelle, 17.11.2019).

<<< zurück: #1 Installation von WordPress auf einem Raspberry Pi mit Hilfe von Docker-Compose in unter 10 Minuten

5 Kommentare zu „#2 Allgemeine Probleme und Migration“

  1. Pingback: #1 Installation von Wordpress auf einem Raspberry Pi mit Hilfe von Docker-Compose in unter 10 Minuten - hungsblog

  2. Hallo Hung Manh,

    Vielen Dank für deine schenelle Antwort und deine Bemühung alles auf deutsch zu übersetzen. Ich habe dein Blog direkt auf der deutsche Sprache gefunden und es immer auch so gefolgt. Deusch ist cool! hahah!

    Ich war am Wochenende nicht zu Hause aber ich habe jetzt die neue Konfiguration mit der Modifikation in der Zeile 29 getestet und weiß du was? Es funktioniert einwandfrei!!! Richtig Zuverlläsig! Es stimmt alles jetzt!

    Danke, Danke und nochmal Dankeschön!

  3. Fabricio Zeller

    Hallo, ich bin es nochmal… Ich habe 2 Tage lang versuch, wie man die maximale WordPress upload limit erhöhen kann aber ich habe es leider nicht geschafft.
    Ich habe versucht, beim PHP Container /usr/local/etc/php die php.ini Dataien beim upload_max_filesize zu änder aber es hat nichts gebracht. Beim WordPress Folder gibt es auch kein Datei zu verfügung zu ändern. Ich weiß es nicht… Vielleicht kannst du mal eine Lösung dafür finden… Danke im voraus.

    1. Hey Fabricio Zeller,

      erstmal vielen Dank für deinen Kommentar und es freut mich sehr, dass dir der Inhalt insbesondere die Deutsche Version weitergeholfen hat! Ich schreibe meist alles auf Englisch und muss es dann ins Deutsche übersetzen, was tatsächlich mehr Zeit einnimmt als erwartet.

      Jetzt aber zu deinem Problem. Dein Ansatz ist schon richtig!
      In einer nicht dockerisierten Umgebung würdest du die entsprechende php.ini Datei anpassen, danach allerdings auch den php Service noch einmal neustarten.
      In unserem Docker setup würdest du jetzt aber üblicherweise die php.ini Datei vom Host System in den Container reinmounten, sodass es beim Start des Containers bereits bereitliegt!

      Ich habe ein feature-branch für dich erstellt (siehe https://gitlab.com/nm_hung93/dockerized-wordpress-on-raspberry-pi/-/tree/feature-req/increase_wordpress_upload_size).
      Ich nutze entsprechende Konfiguration selbst auf diesen Blog, allerdings sind meine Skripte in einem privaten Repository und ich habe den entsprechenden feature-branch nicht getestet, bin aber zuversichtlich dass das problemlos funktionieren sollte. Hierzu müsstest du die entsprechende Zeile im docker-compose (Zeile 29 noch auskommentieren)
      Könntest du den testen und mir berichten? 🙂

      Beste Grüße
      Hung

  4. Fabricio Zeller

    Herzlich vielen dank für das Teilen deiner Arbeit! Ich habe lange sogar in verschiedenen Sprachen etwas änliches gesucht aber nichts funktionsfähig für die Raspberry-Pi gefunden. So eine komplette Dokumentation mit der ganze Erklärung ist es richtig toll und vor allem Professionell. Ich möchte mich bei dir mehrmals bedanken weil ich dein Projekt erfolgreich zum laufen bringen konnte und vor allem richtig viel gelernt habe. Ich muss noch ein paar Probleme mit dem den Download und Upload von Daten beheben aber ich wollte mich voraus schon bei dir melden und bedanken. Ich wünsche dir das aller beste und viel Erfolg in alles was dich auf dem Weg machst!

Kommentar verfassen

Your email address will not be published.

hungsblog | Nguyen Hung Manh | Dresden