From 76fcf276f9c44377d234fc28ca58a0573205a3f8 Mon Sep 17 00:00:00 2001
From: Jonas Leder <jonas@jonasled.de>
Date: Sat, 29 Jan 2022 19:01:53 +0100
Subject: [PATCH] add traefik instructions

---
 public/anleitungen/traefik.html | 105 +++++++++++++++++++++++++++++++-
 1 file changed, 104 insertions(+), 1 deletion(-)

diff --git a/public/anleitungen/traefik.html b/public/anleitungen/traefik.html
index 20cf105..3284393 100644
--- a/public/anleitungen/traefik.html
+++ b/public/anleitungen/traefik.html
@@ -11,7 +11,110 @@
 <body>
     <jl-header data-title="Passwort Generator"></jl-header>
     <div id="content">
-        <!--PLACE YOUR CONTENT HERE-->
+        <p>In der folgenden Anleitung werde ich darauf eingehen, wie man eine VM mit alpine Linux aufsetzt, darauf
+            Docker installiert und dann als Container einen Traefik 2 reverse Proxy.</p>
+        <p>Als erstes muss eine neue VM erstellt werden und als Boot Medium Alpine Linux eingelegt werden. Wenn die ISO
+            gebootet ist kommt ein Login Fenster, hier einfach mit dem Benutzer <code class="language-text">root</code>
+            anmelden. Danach sollte ein Terminal Prompt kommen. Um Alpine zu installieren muss der Befehl <code
+                class="language-text">setup-alpine</code> eingegeben werden. Hierbei gilt es zu beachten, dass die ISO
+            ein englisches Tastaturlayout benutzt. Der Bindestrich liegt hier auf dem ß. Als erstes muss nun im Setup
+            das Tastaturlayout angegeben werden, um dieses auf Deutsch festzulegen zwie mal <code
+                class="language-text">de</code> eingeben.
+            Nachdem die Tastatur geändert wurde muss der Hostname festgelegt werden, meine VM heißt einfach <code
+                class="language-text">docker</code>. In der darauffolgenden Netzwerkkonfiguration muss als erstes der
+            Name des zu konfigurierendes Netzwerkinterfaces angegeben werden (meist <code
+                class="language-text">eth0</code>)
+            Im darauffolgenden Schritt wird die Methode der IP konfiguration angegeben. Im Folgenden setze ich hier auf
+            DHCP. Nachdem das root Passwort (welches mit einem <a href="/passwordgen.html">Passwortgenerator</a>
+            generiert wurde) festgelegt wurde muss die Zeitzone angegeben werden. Für Deutschland ist
+            diese <code class="language-text">Europe/Berlin</code>. Einen Proxy brauchen wir nicht, genauso wie beim
+            mirror können wir einfach mit enter bestätigen. Der SSH Server kann auch bei openssh belassen werden.
+            Nachdem nun die Grundkonfiguration im Installer abgeschlossen ist, muss noch die Festplatte angegeben
+            werden. Dafür wird eine Liste an erkannten Platten angezeigt. In meinem Fall war dies <code
+                class="language-text">sda</code> und danach noch der Typ. Dies ist <code
+                class="language-text">sys</code>,
+            da das System auf die Platte installiert wird. Nach der Installation muss das System nochmal neugestartet
+            werden.
+        </p>
+
+        <p>
+            Wenn das System nun von der Festplatte gebootet hat kann man sich mit dem Benutzer <code
+                class="language-text">root</code> und dem zuvor gewählten Passwort anmelden. Danach muss als erstes das
+            System auf den neuesten Stand gebracht werden und ein paar tool installiert werden. Dazu die beiden unten
+            ausfgeführten Befehle eingeben.
+        <pre>
+<code class="language-bash">apk update
+apk upgrade
+apk add nano htop git</code>
+</pre>
+        Um nun Docker zu installieren muss als erstes die Community repo aktiviert werden. Dazu mit <code
+            class="language-bash">nano</code> die Datei <code class="language-text">/etc/apk/repositories</code> öffnen
+        und in der Zeile, welche mit <code class="language-text">community</code> endet das <code
+            class="language-text">#</code> am Anfang entfernen. (Nicht in den Zeilen mit <code
+            class="language-text">edge</code> im URL) Danach kann Docker installiert werden.
+        </p>
+        <pre>
+<code class="language-bash">nano /etc/apk/repositories
+apk update
+apk add docker docker-compose
+rc-update add docker
+/etc/init.d/docker start</code>
+</pre>
+        <p>
+            Nun ist Docker auf unserem System installiert und kann eingesetzt werden. Um Traefik 2 nun einzusetzen muss
+            als erstes meine Vorlage von <a href="https://gitlab.jonasled.de/jonasled/traefik-config">hier</a>
+            heruntergeladen werden. Danach muss in der Datei <code class="language-text">config/traefik.yml</code> unter
+            letsencrypt => acme => email die E-Mail Adresse festgelegt werden, welche für letsencrypt verwendet werden
+            soll. Danach noch die Berechtigungen von der Zertifikatsdatei einschränken. Bevor wir traefik starten könenn
+            müssen wir noch ein Netzwerk namens <code class="language-text">web</code> angelegt werden. Nachdem nun
+            alles vorbereit wurde kann dieser mit
+            <code class="language-bash">docker-compose up</code> gestartet werden.
+        </p>
+        <pre>
+<code class="language-bash">git clone https://gitlab.jonasled.de/jonasled/traefik-config
+cd traefik-config
+nano config/traefik.yml
+chmod 600 letsencrypt/acme.json
+docker network create web
+docker-compose up
+# Wenn alles läuft strg und c drücken
+docker-compose up -d</code>
+</pre>
+        <p>
+            Traefik ist nun installiert und sollte von außen erreichbar sein. Als Antwort sollte bei nicht bekannten
+            Domains immer ein 404 Fehler kommen. Zum testen setzen wir als nächstes den whoami Docker Container auf,
+            dieser ist nur wenige kb groß und bietet einen minimalen Webserver. Dazu muss als erstes die unten
+            angehängte docker-compose auf dem Host in einem neuen Ordner unter dem Namen <code
+                class="language-text">docker-compose.yml</code> abspeichern und den Host anpassen. Danach kann der
+            Container mit <code class="language-bash">docker-compose up</code> gestartet werden. Nun sollte nach 1-2
+            Minuten auf dem zuvor angegebenen Domain die 404 Meldung durch eine Seite ersetzt werden. Falls dies nicht
+            der Fall ist kann im Ordner, in dem der Traefik abgelegt wurde der Befehl <code
+                class="language-text">docker-compose logs -f</code> ausgeführt werden um den Fehlerlog zu überprüfen.
+        </p>
+        <pre>
+<code class="language-yaml">version: "3.2"
+services:
+    whoami:
+    image: containous/whoami
+    restart: unless-stopped
+    networks:
+        - web
+    labels:
+        - traefik.http.routers.whoami-https.rule=Host(`whoami.jonasled-test.xyz`)
+        - traefik.http.routers.whoami-https.entrypoints=https
+        - traefik.http.routers.whoami-https.tls=true
+        - traefik.http.routers.whoami-https.tls.certresolver=letsencrypt
+        - traefik.http.services.whoami.loadbalancer.server.port=80
+
+networks:
+    web:
+    external: true</code>
+</pre>
+        <p>
+            Um die Konfigurationen für den Traefik Server zu erstellen verwende nutze ich ein kleines selber
+            geschriebenes Tool, welches <a
+                href="https://jonasled.pages.gitlab.jonasled.de/traefik-config-generator/">hier</a> erreichbar ist.
+        </p>
     </div>
     <jl-footer></jl-footer>
     <script src="/js/script.js"></script>
-- 
GitLab