Technik
Die "Steinesammler an der Traun" Website: Einblick in die technische Architektur
Projektname: Steinesammler an der Traun (Website) Zweck: Präsentation von Inhalten rund um das Thema "Steinesammeln in der Traun".
Um die Website "Der Steinesammler an der Traun" sicher, zuverlässig und skalierbar zu betreiben, setze ich auf eine moderne, geschichtete Infrastruktur. Der Weg einer Anfrage von Ihrem Browser bis zu meinem Server ist dabei ein faszinierendes Zusammenspiel verschiedener Technologien.
Für Laien: Ihr Besuch auf der Website – Ein Blick hinter die Kulissen
Stellen Sie sich vor, Ihre Anfrage an die Website http://traun.rolsrois.com ist wie ein Besuch bei einem sehr organisierten Unternehmen:
- Die Adresse finden (DNS-Auflösung): Wenn Sie
traun.rolsrois.comin Ihren Browser eingeben, ist das, als würden Sie fragen: "Wo finde ich eigentlich dieses Unternehmen 'TraunRocks'?" Das Internet fragt dann bei weltweiten "Telefonbüchern" (DNS-Servern) nach. Diese verraten die öffentliche "Hausnummer" (die IPv4-Adresse) meines Systems. Meine FritzBox, stellt sicher, dass diese Hausnummer immer auf meinen Anschluss zeigt, auch wenn die Telekom sie mal ändert. Die FritzBox aktualisiert diese Information bei Bedarf beim DNS-Anbieter Infomaniak in der Schweiz. - An der Pforte ankommen (FritzBox & CapRover): Ihre Anfrage kommt zuerst bei meiner FritzBox an, die als digitaler Türsteher fungiert. Sie ist entsprechend konfiguriert, um Anfragen auf den Ports 80 (HTTP) und 443 (HTTPS) an den dahinterliegenden CapRover-Server weiterzuleiten. CapRover selbst ist wie ein spezieller "Vorbote" oder "Empfangsdienst". Er empfängt Ihren verschlüsselten Brief (Ihre HTTPS-Anfrage) und entschlüsselt ihn. Das ist wichtig für Ihre Sicherheit und Privatsphäre. Nachdem der Brief entschlüsselt wurde, schickt CapRover ihn als normalen, unverschlüsselten Brief (HTTP) weiter, aber mit einer Notiz, dass der Ursprungsbrief verschlüsselt war.
- In der zentralen Vermittlungsstelle (Kubernetes mit Traefik): Der unverschlüsselte Brief landet dann auf einem speziellen Server, der wie eine "zentrale Vermittlungsstelle" aufgebaut ist – das ist Kubernetes (genauer gesagt, k3s). Hier ist ein freundlicher "Lotse" namens Traefik zuständig. Traefik empfängt den Brief und liest die Adresse
traun.rolsrois.com. Da er weiß, dass es sich um einen Brief für die "Steinesammler"-Website handelt (dank seiner intelligenten Regeln), schickt er ihn an den richtigen "Raum" innerhalb der Vermittlungsstelle. - Im Blog-Raum (Ghost): Der Brief erreicht den "Blog-Raum", in dem die Website-Software Ghost wohnt. Ghost liest den Brief. Dank der Notiz von CapRover (die Traefik weitergegeben hat), weiß Ghost, dass der ursprüngliche Brief verschlüsselt war, auch wenn er jetzt unverschlüsselt ankommt. So kann Ghost alle Links auf der Website korrekt erstellen und sich richtig verhalten.
- Im Daten-Archiv (MySQL): Wenn Ghost Informationen braucht (z.B. meine Blog-Beiträge oder Bilder), schaut es in einem separaten "Daten-Ordner" nach, der von MySQL verwaltet wird. Das ist wie ein gut organisiertes Archiv, in dem alle Inhalte sicher und schnell verfügbar sind.
Dieser geschichtete Aufbau mag auf den ersten Blick komplex erscheinen, aber er sorgt dafür, dass die Website schnell, sicher und jederzeit erweiterbar ist, ohne dass ich jeden einzelnen Baustein immer wieder neu konfigurieren muss.
Für Profis: Technischer Anfragefluss – Vom DNS bis zum Pod
Meine "Steinesammler in der Traun"-Website nutzt eine robuste Cloud-Native-Architektur, die auf Kubernetes (k3s) und einem vorgeschalteten Edge-Proxy basiert, um Skalierbarkeit, Sicherheit und Wartbarkeit zu gewährleisten.
Server-Infrastruktur
Das Herzstück meiner Website bildet ein k3s Single Server Cluster, der als virtuelle Maschine (VM-Instanz) läuft. Diese VM basiert auf Alpine Linux 3.22, einem sehr schlanken und sicheren Betriebssystem, und ist auf einem Proxmox Host installiert. Als Hardware-Grundlage dient ein zuverlässiger Fujitsu Mini PC Esprimo Q556, ausgestattet mit einem Intel(R) Core(TM) i5-3470T Quad-Core-Prozessor, 16 GB RAM und einer internen 512 GB SSD. Diese Konfiguration bietet ausreichend Leistung und schnelle Speicherzugriffe für den stabilen Betrieb der Website.
Datensicherheit und Backup
Datensicherheit hat für mich höchste Priorität. Deshalb kommt ein separates Backup-System zum Einsatz:
- Backup-Server: Ein dedizierter Thin Client fungiert als Backup-Server.
- Backup-Software: Ich nutze Proxmox Backup Server (PBS), eine leistungsstarke Backup-Lösung, die speziell für virtuelle Umgebungen optimiert ist.
- Speicher: Die Daten werden auf zwei gespiegelten 2,5-Zoll-Notebook-Festplatten gesichert, die extern über USB 3.0 angebunden sind. Diese Festplatten sind als ZFS-Storage konfiguriert, was zusätzliche Datenintegrität und Ausfallsicherheit durch Spieglung (RAID 1) gewährleistet.
Diese Kombination aus einem dedizierten k3s-Server und einem robusten Backup-System mit ZFS-Speicher sorgt für einen sicheren und stabilen Betrieb der Website und schützt meine wertvollen Inhalte vor Datenverlust.
Detaillierter Anfragefluss
- DNS-Auflösung:
- Die Domain
traun.rolsrois.comist über einen A-Record konfiguriert. Dieser Record zeigt auf die öffentliche IPv4-Adresse meines Internetanschlusses, an dem die Infrastruktur betrieben wird. - Ein DynDNS-Client der FritzBox aktualisiert regelmäßig diesen A-Record beim DNS-Anbieter Infomaniak in der Schweiz, um sicherzustellen, dass die Domain immer auf die korrekte, aktuelle dynamische IPv4-Adresse zeigt, auch bei Adressänderungen seitens der Telekom.
- Die Domain
- Edge-Proxy / TLS-Terminierung (FritzBox & CapRover):
- Meine FritzBox steht als erster Punkt im lokalen Netzwerk. Sie ist für Portfreigaben auf Port 80 (HTTP) und Port 443 (HTTPS) konfiguriert und leitet eingehenden Traffic an den dahinterliegenden CapRover-Server weiter.
- CapRover ist auf einem dedizierten Host (angenommen 192.168.178.X) im lokalen Netzwerk installiert.
- Es fungiert als vorgelagerter Reverse Proxy.
- TLS-Terminierung: CapRover empfängt HTTPS-Anfragen (
:443) fürtraun.rolsrois.comund terminiert die SSL/TLS-Verbindung mit einem gültigen Zertifikat (z.B. von Let's Encrypt). - Protokoll-Downgrade und Forwarding: CapRover leitet die Anfrage anschließend per HTTP (
:80) an den Kubernetes-Host weiter.
- Kubernetes-Infrastruktur (k3s Host):
- Der k3s-Host (IP: 192.168.178.146) ist der Einstiegspunkt in den Kubernetes-Cluster.
- Er empfängt die HTTP-Anfragen auf Port 80, weitergeleitet von CapRover.
- Ingress Controller (Traefik):
- Innerhalb des k3s-Clusters ist Traefik als standardmäßiger Ingress Controller in Betrieb (läuft im
kube-system-Namespace). - Traefik lauscht auf Host-Port 80 (standardmäßig durch einen
hostPortoder Host-Network-Binding des Traefik-Service im Cluster erreichbar). - Ingress-Ressource (
ghost-ingress): Einenetworking.k8s.io/v1/Ingress-Ressource definiert die Routing-Regel:host: "traun.rolsrois.com"path: /(pathType: Prefix)backend: service: name: ghost-service, port: number: 80
- Middleware (
ssl-header-middleware): Einetraefik.io/v1alpha1/Middleware-Ressource ist an der Ingress-Regel über die Annotationtraefik.ingress.kubernetes.io/router.middlewares: default-ssl-header-middleware@kubernetescrdangehängt. - Diese Middleware fügt den HTTP-Header
X-Forwarded-Proto: httpszur Anfrage hinzu. Dies ist entscheidend, da Ghost intern auf HTTPS konfiguriert ist, aber die Anfrage von Traefik über HTTP erhält.
- Innerhalb des k3s-Clusters ist Traefik als standardmäßiger Ingress Controller in Betrieb (läuft im
- Kubernetes Service (
ghost-service):- Der
ghost-serviceist vom TypClusterIP(z.B. 10.43.157.82). - Er empfängt Anfragen auf
port: 80und leitet diese an dentargetPort: 2368derghost-deployment-Pods weiter.
- Der
- Ghost Deployment (
ghost-deploymentPod):- Der Ghost-Container lauscht auf seinem internen
containerPort: 2368. - Die Anwendung ist über eine Umgebungsvariable konfiguriert:
url: https://traun.rolsrois.com. - Wenn Ghost die Anfrage empfängt, sieht es den
X-Forwarded-Proto: https-Header. Dadurch weiß Ghost, dass die ursprüngliche Client-Verbindung per HTTPS erfolgte, und generiert alle Links und Verweise auf der Website korrekt mithttps://traun.rolsrois.com, anstatt eine Umleitung zu erzwingen oder falsche Links zu erstellen.
- Der Ghost-Container lauscht auf seinem internen
- MySQL Backend (
mysql-service/mysql-deployment):- Ein separates
mysql-deployment(mitPersistentVolumeClaimfür Datenpersistenz) stellt die Datenbank bereit. - Der
mysql-service(TypClusterIP, z.B. 10.43.48.38:3306) ermöglicht Ghost die interne Verbindung zur Datenbank.
- Ein separates
Dieser detaillierte Pfad gewährleistet eine sichere, effiziente und korrekt verlinkende Bereitstellung der Ghost-Website.