Web Workflow

Ich habe mich schon vor längerer Zeit von PHP und anderen aktiven Inhalten beim erzeugen meiner Webseite verabschiedet. Für mich ist klar, dass der überwiegende Teil statisch ist und Änderungen nur kleine Teile betreffen. Die Wartung und Aktualität (aka PHP Versionen laufen schnell ab) brachten mich dazu ein von mir schon vor langer Zeit verwendetes Konzept mit Gernatoren wieder aufzugreifen. Die Wahl fiel nach der kurzen Überlegung - dafür selbst wieder etwas zu schreiben - auf die mächtige Software Hugo.

Hugo ist wirklich schnell und die Einarbeitung war für mich schnell erledigt - davor hatte ich immer per SCP alles erneut hochgeladen.

Erst dieses Jahr (November 2025) habe ich einen Worflow mit git etabliert. Meine Webseite wird mit einem Skript git zu GitHub hochgeladen und dann von meinem Webserver über eine chroot Shell per git bereitgestellt. Damit hat sich mein Workflow beim Ausrollen stark beschleunigt und es werden auch nur Änderungen auf der Webseite verarbeitet.

Über die Entwicklung mit Hugo gibt es Online viele Quellen - daher gehe ich hier nicht darauf ein.

Mein Workflow grob skizziert:

graph LR;
  A(Hugo baut die Webseite) --> B(git add .) --> C(git commit -m Zeit) --> D(git push origin main) --SSH auf den Webserver--> E(git pull)

Hochladen

Für das Hochladen der Webseite habe ich in der Hugo Dateistruktur zwei git Repositories. Eines direkt im obersten Ordner für alle meine Rohdaten. Und ein weiteres für den Workflow, das nur im public Unterordner von Hugo angelegt ist. Durch die Aufräum Funktion von Hugo löscht er mir leider die .gitignore Datei bei jedem Hochladen der Webseite. Das ließ sich aber durch einfaches neu anlegen über mein Hochlade Skript lösen.

Das git Repository im public Ordner hat als remote das SSH Ziel meines GitHub Repositories. Dies fügt man dem Repository mit dem folgenden Befehl hinzu.

git remote add origin git@github.com:USER/Webseite.git

Github verwendet nach dem aktuellen Stand nicht einen master, sondern einen main Branch. Dazu finden sich auch Anleitungen - jedoch sollte das Skript damit kein Problem haben.

Zum Hochladen verwende ich das folgende Skript:

Set-Location "\\nas\Webseiten\Webseite"
Write-Host "Webseite bauen..." -ForegroundColor Blue
hugo.exe --cleanDestinationDir --minify --gc
Get-ChildItem -Filter Thumbs.db -Path . -Recurse | Remove-Item -ErrorAction SilentlyContinue
Write-Host "Webseite Hochladen..." -ForegroundColor Blue
Set-Location "\\nas\Webseiten\Webseite\public"
Write-Host ".gitignore wiederherstellen" -ForegroundColor Blue
'Thumbs.db' | Set-Content -Path .\.gitignore
Write-Host "git add, commit und push" -ForegroundColor Blue
git add .
git commit -m "Webseite $(Get-Date -Format 'dd.MM.yyyy HH:mm:ss')"
git push origin main
Write-Host "SSH und git pull" -ForegroundColor Blue
ssh hosting@my.web.space "cd webseite/web/ ; git pull origin main"

Herunterladen und Ausrollen

Der Trick besteht besteht in der Verwendung von git pull und dem git-credential manager. Beim Ersten Abruf meines GitHub Webseiten Repository wird mein GitHub Benutzername und der AuthToken gespeichert.

Der erste Schritt ist jedoch auf dem Webseiten Server mit einer chroot SSH Verbindung das git Repository einzurichten.

ssh hosting@my.web.space
# In der SSH Sitzung
cd webseite/web
# entfernen unerwünschter Dateien - bspw. index.htm, index.php
rm index.*
git config --global init.defaultBranch main
git init
git remote add https://github.com/USER/Webseite.git
git pull
# Hier benötigt man die Anmeldedaten (GitHub Benutzername und AuthToken - siehe weiter unten)

Der Auth Token besitzt nur die beiden Berechtigungen und ist ungebrenzt gültig:

  • Read access to code (Contents)
  • Read access to metadata (Metadata)

Die Einrichtung des AuthToken erfolgt nach der Anmeldung am GitHub Konto durch klicken auf das Bentutzer Bild rechts oben und dann auf Settings. Dort dann unten links auf Developer Settings/Personal access tokens/Fine-grained tokens. Bei der Einrichtung muss man sich erneut durch MFA oder Passwort legitimieren.

Den Token erstellt man mit Generate new token:

GitHub Access Token