Hugo Website auf Host Europe mit git deployment

Vor einem halben Jahr bin ich von Wordpress zu Hugo gewechselt, weil mir die Updateorgie von Wordpress und die dennoch stattfindenden Einbrüche auf meinem Webserver das digitale Leben versäuerten.

Hugo generiert statische Webseiten; ich bastel also meine Website auf meinen Notebook und schiebe den generierten Output zu Strato. Eigentlich ist ein simpler Webspace wie meiner bei Strato für Hugo bestens geeignet, man muss aber immer den generierten Seitenbaum komplett hochschieben - dass frisst zunehmend Bandbreite.

Schöner ists, wen man das Deployment mit git erledigt: ein git push live schiebt die Quellen hoch und baut den Auftritt neu. Das geht bei Stratos Webspace nicht, deswegen bin ich nun HostEurope Kunde.

Ich hab als OS Variante Ubuntu mit Plesk gewählt, die folgenden Erklärungen setzen also teilweise auf Plesk auf.

Domain in Plesk zufügen und konfigurieren

  • Unter Websites & Domains Domainnamen festlegen,
    • Speicherort: Neuer Webspace
    • Benutzername / Passwort festlegen
  • unter Websites & Domains” / “Webhosting Zugang” den ssh Zugang konfigurieren:
    • Zugriff auf den Server via SSH: /bin/bash
  • Im Plesk unter “Domains & websites” / “Git” das git repository initialisieren, und
    • Als Deploy path=source setzen, wenn Du nicht direkt im httpdocs auschecken willst
    • Auf dem Webserver das source Verzeichnis anlegen: mkdir ~/source

Voilá; jetzt sollte man das Ganze mal testen und sich per ssh auf den Rechner mit dem oben festgelegten Benutzernamen/Passwort einloggen.

Für mehr Komfort richten wir noch den authorized_key ein:

  • auf dem Zugangsrechner den Inhalt von ~/.ssh/id_rsa.pub kopieren
  • auf dem Webserver:
mkdir ~/.ssh anlegen
chmod ~/.ssh 700 setzen
vi ~/.ssh/authorized_keys # hier den Inhalt des ~/.ssh/id_rsa.pub reinkopieren
chmod 600 ~/.ssh/authorized_keys #ssh toleriert aus Sicherheitsgründen keine authorized key Dateien, die für andere lesbar sind

git fertig konfigurieren

Virtual Hosts werden im Plesk unter den Ordnern var/www/vhosts/deinedomain/ abgelegt; Das git Repo liegt hier:

/var/www/vhosts/deinedomain/git/deinedomain

Jetzt muss das lokale git Repo mit diesem Repository verbunden werden:

Auf deinem lokalen Rechner:

git remote add live ssh://deinuser@deinedomain/var/www/vhosts/deinedomain/git/deinedomain/
git remote -v # verify

# lokales Repo in den Master auf dem Server aufspielen:
git push --set-upstream live master

Automatisches Deployment Einrichten

Anstelle eines echten CI/CD Systems leg ich mir einfach ein makefile an, dass bei jedem Push getriggert wird. Das makefile liegt ebefalls im git. Die richtige Stelle dafür ist der post-receive Hook, er liegt unter /var/www/vhosts/deinedomain/git/deinedomain/hooks/post-receive:

#!/bin/sh
git --work-tree='/var/www/vhosts/deinedomain/source' --git-dir='/var/www/vhosts/deinedomain/git/deinedomain' checkout -f
git --work-tree='/var/www/vhosts/deinedomain/source' config plesk.deployHash $(git --work-tree='/var/www/vhosts/deinedomain/source' rev-parse HEAD)

cd /var/www/vhosts/deinedomain/source; make -f makefile.live public

Die ersten beidenZeilen sind von Plesk generiert, die letzte Zeile muss man zufügen. Ich habs nicht ausprobiert, ich schätze aber das wenn man an den Plesk git Webconfigs rumschraubt, man die post-receive erneut anpassen muss :-(

minimales Makefile

Das Makefile liegt toplevel im git Repo und sollte zumindest die folgenden Kommandos haben:

# noexpandtab
# makefile for hosteurope live 
PUBDIR = /var/www/vhosts/deinedomain/httpdocs

.PHONY: server public 

server: 
    rm -rf public
    hugo server --watch --verbose -D -F

public: 
    hugo -d ${PUBDIR}

Fertig!

alles, was man nun per git push live überträgt, wird automatisch auf dem Server neu gebaut!

Das Makefile lohnt sich in dieser Form eigentlich nicht. Ich nutze es, weil ich noch diverse andere Kommandos mit drin habe: um Bilder in die Zielgrößen zu konvertieren, GPX Tracks zu minifizieren u.s.w. - aber das wäre Thema für einen anderen Artikel.