Wie wird dieser Block deployt?

Introduction

Meine erste Webseite, die ich öffentlich genutzt habe, war eine einfache HTML-Seite – sie bestand nur aus meinem Namen mit meiner Adresse und diente daher als Impressum, größtenteils für die E-Mail-Administration der Telekom. Sie wurde als OCI Container gebaut und wurde manuell auf meine Portainer-Instanz deployt. Der Hauptserver für diese Portainerinstanz ist eine Cloud-VM von Hetzner.

Als in mir die Idee entstand, diesen Blog zu beginnen, war mir klar, dass dieses manuelle Deployment auf Dauer nicht haltbar sein wird. Ich wollte ein System, bei dem ich einfach neuen Inhalt in ein Git-Repository pushen kann und danach automatisch das Deployment der neuen Version angestoßen wird.

Glücklicherweise hat Gitea – der Git Server, den ich nutze – zu dieser Zeit eine erste Version veröffentlicht, die Gitea Actions unterstützt. Gitea Actions ist ein System, das ähnlich zu Github Actions – zu dem es auch recht kompatibel ist – oder Gitlab CI/CD ist. Durch die Kompatibilität zu Github Actions können Aktionen genauso genutzt werden, die eigentlich für Github entwickeld wurden. Darüber hinaus kann man eigene Runner angeben, die auf eigener Hardware gehostet werden können. Dieses Prinzip erlaubt mir, alles – von der Verwaltung der Inhalte über das Bauen bis zum Deployment und Hosting – auf eigener Infrastruktur auszuführen.

Zola – Die Webseite generieren

Da die Webseite nicht häufig aktualisiert wird und nicht viele Features oder dynamische Inhalte benötigt, scheint die Verwendung eines Generators für statische Seiten die richtige Wahl zu sein. Ich habe zuvor noch keinen solchen Generator genutzt, also habe ich mir verschiedene Möglichkeiten, die Blogs und Theming unterstützen, angeschaut. Das Ergebnis meiner Recherche war Zola mit dem tabi~ Theme. Zola ist in Rust implementiert und bietet einfach Handhabung und schnelle Kompilierzeiten. Inhalte können in Markdown verfasst werden und werden während des Bauprozesses in HTML-Dateien umgewandelt.

Gitea Action – Die Webseite bauen

Gitea Actions können in einer YAML-Datei im Ordner /.gitea/actions konfiguriert werden, das erinnert an die Konfiguration von Github Actions – die auch verwendet werden kann. Der Ablauf besteht aus verschiedenen Schritten, die nacheinander ausgeführt werden. Zuerst wird die Dockerumgebung eingerichtet. Diese wird danach genutzt, um das Image zu bauen und in meine Registry zu pushen. Diese Schritte nutzen definierte Aktionen, die von Gitea zur Verfügung gestellt werden – die größtenteils Mirrors von Githubs Aktionen sind.

Gitea Action - Die Webseite deployen

Um das Image auf den Portainer Stack zu deployen, der von einem Git Repository verwaltet wird, gab es keine vorgefertigte Aktion. Also habe ich diese Aktion als Basis verwendet und die Möglichkeit eingebaut einen durch ein Git Repository verwalteten Stack neu zu deployen. Diese Aktion wird nun genutzt, um den Stack mit dem neu gebauten Image aus der Registry neu zu deployen.

Verbesserungen

AKtuell wird diese Webseite auf einer Hetzner VM durch einen Docker Container betrieben (der Server macht aber noch andere Dinge). Ich hatte noch nie Probleme mit der VM, allerdings hat der Container manchmal Schluckauf und startet nicht automatisch neu. In der Zukunft möchte ich mit fortgeschritteneren Technologien wie Docker Swarm oder sogar Kubernetes experimentieren.

Außerdem hat diese Seite aktuell keine Statistiken in irgendeiner Form. So sehr ich das auch mag, mag es in der Zukunft vielleicht sein, zu wissen, wie viele Leute diese Seite aufrufen oder ähnliches. Das soll dann aber so unauffällig wie möglich geschehen und wird davor hier angekündigt.

Wenn es noch irgendwelche Fragen zum Deployment gibt, beantworte ich die gerne. Gerne füge ich dann noch weitere Informationen auf dieser Seite hinzu. Wenn es Probleme mit meiner Github Action gibt, darf auch gerne ein Issue auf Github aufgemacht werden.