<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Traefik on 0xMax42 - Flatfile-Purist. Autodidakt. Systemdenker.</title><link>https://0xMax42.io/tags/traefik/</link><description>Recent content in Traefik on 0xMax42 - Flatfile-Purist. Autodidakt. Systemdenker.</description><generator>Hugo -- gohugo.io</generator><language>de-de</language><lastBuildDate>Sat, 19 Apr 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://0xMax42.io/tags/traefik/index.xml" rel="self" type="application/rss+xml"/><item><title>Eigener Gitea-Pages-Stack mit Wildcard-Subdomains und ACME – mein GitHub-Pages-Ersatz</title><link>https://0xMax42.io/p/gitea-pages-stack/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><guid>https://0xMax42.io/p/gitea-pages-stack/</guid><description>&lt;img src="https://0xMax42.io/p/gitea-pages-stack/cover.webp" alt="Featured image of post Eigener Gitea-Pages-Stack mit Wildcard-Subdomains und ACME – mein GitHub-Pages-Ersatz" /&gt;&lt;h2 id="einführung"&gt;Einführung
&lt;/h2&gt;&lt;p&gt;Dieser Beitrag dokumentiert meinen eigenen Gitea-Pages-Stack – eine datenschutzfreundliche Alternative zu GitHub Pages. Mit GT-RUNNER, dem Codeberg Pages Server und Traefik als Reverse Proxy entsteht ein selbstverwalteter Hosting-Stack, der Domains, Zertifikate und Deployments vollständig automatisiert – ohne zentrale Abhängigkeiten und mit voller Kontrolle.&lt;/p&gt;
&lt;h2 id="architekturüberblick"&gt;Architekturüberblick
&lt;/h2&gt;&lt;p&gt;Die folgende Skizze zeigt die Struktur meines Stacks. Alle zentralen Komponenten – Gitea, Runner, Pages Server und Reverse Proxy – sind im internen Netzwerk miteinander verbunden. Die TLS-Zertifikatsvergabe erfolgt gestaffelt über Let&amp;rsquo;s Encrypt (intern Staging, extern Production):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://0xMax42.io/p/gitea-pages-stack/Diagramm.drawio.webp"
width="8178"
height="3618"
srcset="https://0xMax42.io/p/gitea-pages-stack/Diagramm.drawio_hu_afafb47aed15c268.webp 480w, https://0xMax42.io/p/gitea-pages-stack/Diagramm.drawio_hu_7b0b67cc18f3f7d2.webp 1024w"
loading="lazy"
alt="Diagramm meines Setups"
class="gallery-image"
data-flex-grow="226"
data-flex-basis="542px"
&gt;&lt;/p&gt;
&lt;h2 id="funktionsweise-im-detail"&gt;Funktionsweise im Detail
&lt;/h2&gt;&lt;p&gt;Ganz ehrlich: Das Ganze ist im Kern ein ganz normaler Git-Server. Gitea läuft intern, der GT-Runner ist angebunden – läuft über „act“ mit einem recht großen Image, bringt aber alles mit, was GitHub Actions auch kann. Für meine Zwecke ist das kompatibel genug.&lt;/p&gt;
&lt;p&gt;Dazu kommt der Codeberg Pages Server – ebenfalls intern. Der spricht mit Gitea über die API, genau wie es gedacht ist. Wichtig: Alles, was Gitea, der Runner und der Pages-Server machen, bleibt komplett im internen Netzwerk. Da kommt nichts nach draußen. Das war mir wichtig.&lt;/p&gt;
&lt;p&gt;Jetzt zum Thema TLS: Der Pages-Server kann nicht ohne Zertifikate. Also bekommt er welche – ganz regulär über meinen DNS-Provider, via API und ACME-Protokoll. Aber eben nur Staging-Zertifikate von Let&amp;rsquo;s Encrypt. Warum? Weil das reicht. Es geht um internes TLS, nicht um Vertrauen von außen.&lt;/p&gt;
&lt;p&gt;Der Pages-Server kann dann sauber ausliefern – intern, per HTTPS, mit gültiger Struktur. Und mein Reverse Proxy (Traefik) kümmert sich um den Rest.&lt;/p&gt;
&lt;p&gt;Traefik ist so konfiguriert, dass ihm egal ist, ob das interne Zertifikat „echt“ ist. Er terminated TLS nach außen hin selbst, holt sich dafür eigene echte Zertifikate über DNS-01 und Let&amp;rsquo;s Encrypt Production, und mappt die Domains sauber weiter.&lt;/p&gt;
&lt;p&gt;Damit das überhaupt funktioniert, schreibe ich die Requests um. Traefik nimmt z. B. &lt;code&gt;home.pagessub.0xmax42.io&lt;/code&gt;, extrahiert daraus, um welches Repository es geht, und gaukelt dem Pages-Server vor, dass die URL intern &lt;code&gt;user.pagessub.0xmax42.io/repo/&lt;/code&gt; wäre. Damit der Pages-Server richtig routet.&lt;/p&gt;
&lt;p&gt;Nach außen hin sieht alles aus wie bei GitHub Pages – jede Subdomain bekommt ihr eigenes statisches Projekt. Nur eben: datenschutzfreundlich, selbst gehostet, ohne Vendor-Lock-in.&lt;/p&gt;
&lt;h2 id="ausblick"&gt;Ausblick
&lt;/h2&gt;&lt;p&gt;Langfristig will ich es ermöglichen, dass Repositories selbst konfigurieren können, unter welcher Domain sie ausgeliefert werden – z. B. über eine &lt;code&gt;.traffic&lt;/code&gt;-Datei. Über die Gitea-API könnte dann automatisch die passende Traefik-Konfiguration erzeugt und an Traefik übergeben werden. Das Ziel: ein vollständig automatisierter Webhosting-Stack.&lt;/p&gt;
&lt;h2 id="verwendete-komponenten"&gt;Verwendete Komponenten
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;🧃 &lt;strong&gt;&lt;a class="link" href="https://gitea.io/" target="_blank" rel="noopener"
&gt;Gitea&lt;/a&gt;&lt;/strong&gt; – Selfhosted Git-Service&lt;/li&gt;
&lt;li&gt;🌀 &lt;strong&gt;&lt;a class="link" href="https://traefik.io/" target="_blank" rel="noopener"
&gt;Traefik&lt;/a&gt;&lt;/strong&gt; – Reverse Proxy mit ACME-Support&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;&lt;a class="link" href="https://codeberg.org/Codeberg/pages-server" target="_blank" rel="noopener"
&gt;Codeberg Pages Server&lt;/a&gt;&lt;/strong&gt; – statischer Pages-Server&lt;/li&gt;
&lt;li&gt;🔀 &lt;strong&gt;&lt;a class="link" href="https://github.com/lukas-r/traefik-subdomain-path-rewrite-plugin" target="_blank" rel="noopener"
&gt;traefik-subdomain-path-rewrite-plugin&lt;/a&gt;&lt;/strong&gt; – für dynamisches URL-Rewriting basierend auf Subdomains&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;&lt;a class="link" href="https://letsencrypt.org/" target="_blank" rel="noopener"
&gt;Let’s Encrypt&lt;/a&gt;&lt;/strong&gt; – kostenfreies TLS-Zertifikatsmanagement via ACME-Protokoll&lt;/li&gt;
&lt;li&gt;🐳 &lt;strong&gt;&lt;a class="link" href="https://www.docker.com/" target="_blank" rel="noopener"
&gt;Docker&lt;/a&gt;&lt;/strong&gt; – Containerisierung aller Komponenten zur einfachen Verwaltung und Isolierung&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;📁 Dieses Setup ist Teil meines Infrastrukturunterbaus für &lt;a class="link" href="https://0xmax42.io" target="_blank" rel="noopener"
&gt;0xMax42.io&lt;/a&gt;. Weitere Beiträge folgen.&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>