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.
Kommentare
Lade Kommentare …