zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog - Bernhard Albicker

Hugo-Finetuning, Tipps aus der Praxis

veröffentlicht am 14.01.2017 mit 651 Worten - Lesezeit: 4 Minute(n)

Nach einiger Zeit der intensiven Nutzung von Hugo haben sich ein paar Dinge ergeben, die die Arbeit vereinfachen. Für das Verständnis ist die Kenntnis der ersten 4 Teile des Tutorials notwendig.
(Die Hinweise beziehen sich auf die derzeit aktuelle Version 0.17 von Hugo)

Hugo vereinfachen

Kommandozeilen-Befehle verkürzen

Der in Teil 4 des Tutorials beschriebene Befehl für den Servermode, der die Live-Ansicht liefert beim Schreiben der Beiträge, läßt sich mit folgendem Kurzbefehl starten:

$ hugo server -w -D 

Theme in config.toml eintragen

Im Teil 4 wurde in o. g. Befehl außerdem ein spezielles Template (Theme) angegeben, auf dem die Seiten aufgebaut sind. Dieses läßt sich auch in der Konfigurationsdatei config.toml eintragen. Für dieses Blog würde diese Datei dann so aussehen:

baseurl = "http://privat.albicker.org/blog"
languageCode = "de-DE"
title = "Seiten, die die Welt (nicht) braucht"
relativeURLs = true
uglyURLs = false
theme = "hugo-multi-bootswatch-master"

Seiten veröffentlichen

tatsächlich geänderte Seiten filtern

Hugo beobachtet im Server-Mode die Verzeichnisse data, content, layouts, static und themes auf Veränderungen. Im Rendering Mode (siehe auch hier Teil 4) werden alle Dateien im Ausgabeunterverzeichnis public neu geschrieben. Das würde bedeuten, daß bei JEDER Änderung (auch nur der Korrektur eines Rechtschreibfehlers) alle Seiten mit dem neuen Dateidatum erscheinen und es daher nicht einfach ist, nur die korrigierten/geänderten/hinzugefügten Seiten zu ermitteln und auf den Server hochzuladen. Das ist insbesondere dann lästig, wenn die Datenübertragung langsam (mobil) und/oder teuer (Ausland) ist.
Ich habe mich daher zu einem zweistufigen Verfahren entschlossen:

Die Schritte im Einzelnen:

geänderte Seiten ermitteln

Dies läßt sich mit dem Programm rsync erledigen. Dieses Programm wird z. B. zur Erstellung von Backups verwendet, es kann geänderte Dateien anhand unterschiedlicher Kriterien erkennen, wie z. B. Dateigröße, Datum/Uhrzeit oder auch Dateiinhalt.
Die letztere Fähigkeit machen wir uns hier zu Nutze: Für jede Datei wird eine Art “Fingerabdruck” ermittelt, und wenn dieser sich unterscheidet, dann wird die Datei übertragen:

rsync -rlpcgoDv --checksum --progress --stats --delete /home/{benutzername}/Webseiten/hugo/meinehomepage/public/ /home/{benutzername}/Webseiten/Arbeitsverzeichnis/meinehomepage/blog/ 

Der Befehl erledigt:

Upload

Für die Übertragung auf den Webserver verwende ich das Kommandozeilen-Programm “lftp”, das ist ein Linux/Unix-Programm. Hier möchte ich die Windows-Benutzer um Nachsicht bitten, daß ich die Windows-Variante mangels Verwendbarkeit auf meinen Rechnern nicht wirklich angeschaut habe.

Zunächst erfolgt die Anmeldung am Server:

~ $ lftp -u {benutzername}:{passwort} ftp://{domainname}.{domainendung}

(der Parameter -u übergibt die Benutzerdaten)
und im nächsten Schritt gleich der komplette upload:

lftp {benutzername}@{domainname}.{domainendung}:/> mirror -eRv /home/{benutzername}/Webseiten/Arbeitsverzeichnis/meinehomepage/blog/ /httpdocs/{serverbenutzerkennung}/meinehomepage/blog/

Damit wird der Inhalt des auf dem lokalen Rechner befindlichen Verzeichnisses /home/{benutzername}/Webseiten/Arbeitsverzeichnis/meinehomepage/blog/ in das entsprechende Verzeichnis /httpdocs/{serverbenutzerkennung}/meinehomepage/blog/auf dem Webserver (der Pfad kann je nach Provider variieren) synchronisiert.
Die Parameter (im Befehl oben alle zusammengefaßt) bewirken:
-e löscht die im lokalen Verzeichnis nicht mehr vorhandenen Dateien auf dem Server
-R betrachtet das lokale Verzeichnis als Quelle und synchronisiert die Verzeichnisse auf dem Webserver
-v “verbose” gibt die durchgeführten Operationen zur Kontrolle auf dem Bildschirm aus

Abläufe automatisieren

Aus dem oben Gesagten ergibt sich das folgende Script, das “in einem Aufwasch” alles erledigt:

#!/bin/bash

# Hugo-internes Veröffentlichungs-Verzeichnis leeren
rm -r /home/{benutzername}/Webseiten/hugo/meinehomepage/public/

# aktualisierte Seite zur Veröffentlichung erstellen
hugo

# tatsächlich veränderte Files filtern und ins upload-Verzeichnis auf dem lokalen Rechner übertragen
rsync -rlpcgoDv --checksum --progress --stats --delete /home/{benutzername}/Webseiten/hugo/meinehomepage/public/ /home/{benutzername}/Webseiten/Arbeitsverzeichnis/meinehomepage/blog/ 

# ftp-Übertragung der geänderten Files: lftp aufrufen und Textfile mit Anweisungen übergeben
lftp -f lftp_sync.txt

und die zuletzt aufgerufene Textdatei lftp_sync.txtenthält:

lftp -u {benutzername}:{passwort} ftp://{domainname}.{domainendung} 
mirror -eRv /home/{benutzername}/Webseiten/Arbeitsverzeichnis/meinehomepage/blog/ /httpdocs/{serverbenutzerkennung}/meinehomepage/blog/

Damit ist das zu übertragende Datenvolumen auf den Webserver minimiert und eine Aktualisierung kann auch z. B. von unterwegs mobil durchgeführt werden.