Wie ich im März in meinem Artikel zum automatischen FTP-Download beschrieben habe, gibt es für mich die Notwendigkeit regelmäßig den Stand der WordPress-Instanzen vom Server lokal zu ziehen.

Dafür habe ich auch ein kleines Makefile mit wget-Aufruf erstellt und in der Nachbetrachtung festgestellt, dass das Script noch ein paar Verbesserungswünsche offen lässt.

Heute habe ich mich mal dran gesetzt und die das Makefile ein klein wenig aufpoliert, so dass es nun noch nützlicher ist.

Weniger ist mehr

Ein Hauptproblem des bisherigen Ablaufs war, dass wget immer das komplette Verzeichnis neu herunter geladen hat. Dies hat grundsätzlich zunächst einmal den Vorteil, dass sich keine Dateileichen im System ansammeln können, die auf dem Livesystem gar nicht mehr existieren.

Das kann also (manchmal) durchaus so gewollt sein, aber durch den kompletten Download dauert der Prozess natürlich deutlich länger. Also habe ich mal geschaut, was wget an passenden Parametern hat und bin fündig geworden.

Mit der Angabe von --timestamping bzw. -N weist man wget an, vor dem Download zu prüfen, ob die Datei auf dem Server seit dem letzten Abruf geändert wurde und nur herunterzuladen, falls die Server-Version neuer ist.

wget --ftp-user=xxx --ask-password --recursive --level=99 --no-host-directories --no-verbose --timestamping ftp://myserver.de/blog.gruniversal.de/

Damit reduziert sich die Downloadzeit deutlich, natürlich immer abhängig von Anzahl und Größe der geänderten Dateien. Sehr schön :)

You shall not pass?!

Etwas mühselig am bisherigen Ablauf war auch, dass man das Passwort immer von Hand eingeben musste. Das ist besonders nervig, wenn man im Rahmen der Erprobung neuer wget-Parameter dies dutzende Male machen muss :D

Da ich für die Uploads über git-ftp zum Server ohnehin meine Zugangsdaten in der Git-Config am Projekt speichere (aber halt nicht direkt im Repo) war es nahe liegend diese Daten auch für das Makefile zu nutzen.

(In einem früheren Artikel habe ich genauer erklärt, wie mein Deployment-Setup mit git-ftp aussieht.)

Es war nun ein Leichtes, diese Informationen auszulesen und mit grep und sed in Form zu bringen. Hier die notwendigen Anpassungen im Makefile:

# Git-FTP Konfig auslesen
ftp_user:=$(shell git config --list | grep git-ftp.user | sed s/git-ftp.user=//)
ftp_pass:=$(shell git config --list | grep git-ftp.password | sed s/git-ftp.password=//)

Damit lässt sich dann der Aufruf von wget noch weiter verbessern:

wget --ftp-user=$(ftp_user) --ftp-password=$(ftp_pass) --recursive --level=99 --no-host-directories --no-verbose --timestamping ftp://myserver.de/blog.gruniversal.de/

Das manuelle Eingeben von Passwörtern gehört damit der Vergangenheit an und im Falle einer notwendigen Passwortänderung, muss man nichts anpassen, weil es in der Git-Konfig sowieso geändert werden muss.

Fazit

Ich hatte ursprünglich befürchtet, dass wget ggf. für meinen Zweck hier nicht mehr ausreichen würde und ich gezwungen sein könnte, mich nach einem neuen Workflow umzusehen. Aber nichts da, es tut! Und zwar sehr gut :)

Und ich war wieder mal positiv berührt, wie einfach man mit einer Kommandozeile sowohl das Auslesen der Konfiguration als auch den komplexen Ablauf des Prüfens und Herunterladens per FTP formulieren kann. Das mag ich so an Linux.

PS: Mein Blog läuft nun auf WordPress 5.5 und ich hab schon ein paar Dinge gefunden, die mir nicht ganz so gut gefallen. Ggf. mache ich daraus ja auch noch einen kleinen Artikel :)