diff --git a/public/API/mainMenu.json b/public/API/mainMenu.json
index a04035b048e27af1fd0a97516bab76d63aae2e92..5cc9635f6faace143d767d38b6def718ff09e3bd 100644
--- a/public/API/mainMenu.json
+++ b/public/API/mainMenu.json
@@ -97,6 +97,11 @@
                 "name": "Mailcow E-Mail Server",
                 "url": "/anleitungen/mailcow.html",
                 "type": "link"
+            },
+            {
+                "name": "Traefik 2 Reverse Proxy",
+                "url": "/anleitungen/traefik.html",
+                "type": "link"
             }
         ]
     },
diff --git a/public/anleitungen/traefik.html b/public/anleitungen/traefik.html
new file mode 100644
index 0000000000000000000000000000000000000000..e1aabe73c95f07ed11f35b7790a25717b3076b3c
--- /dev/null
+++ b/public/anleitungen/traefik.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="de">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link href="/css/style.css" rel="stylesheet">
+    <title></title>
+</head>
+
+<body>
+    <jl-header data-title="Passwort Generator"></jl-header>
+    <div id="content">
+        <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>
+        <h2>Verbesserungen</h2>
+        <h3>HTTP auf HTTPS weiterleiten</h3>
+        <p>Ich empfehle diesen Schritt für alle, da dadurch traefik den Nutzer automatisch von einer unverschlüsselten
+            HTTP Verbindung auf eine verschlüsselte HTTPS verbindung weiterleitet. Dies verhindert das mitlesen der
+            Daten durch dritte. Um die Weiterleitung einzurichten muss unter <code
+                class="language-text">config/providers</code> eine neue Datei mit der Endung <code
+                class="language-text">.yml</code> angelegt werden. (also z.B. <code
+                class="language-bash">nano config/providers/http.yml</code>) Danach muss in die Datei der unten
+            angeführte Snippet eingefügt werden und danach gescpeichert werden (strg + x und dann mit y und enter
+            bestätigen)
+        </p>
+        <pre>
+<code class="language-yaml">http:
+    routers:
+      http-redirect:
+        rule: HostRegexp(`{any:.+}`)
+        middlewares: redirect
+        service: dummy
+  
+    middlewares:
+      redirect:
+        redirectscheme:
+          scheme: https
+  
+    services:
+      dummy:
+        loadBalancer:
+          servers:
+            - url: "http://0.0.0.0/"
+          passHostHeader: true</code>
+</pre>
+        <h2>Nicht Docker Services einbinden</h2>
+        <p>
+            Das Einbinden von Diensten, die nicht auf dem Docker Host laufen ist auch ziemlich einfach. Dafür muss nur
+            eine Provider yaml Datei (Dateiendung .yml) im <code class="language-text">config/providers</code> Ordner
+            mit dem nachfolgenden Inhalt angelegt werden. Um den Router zu nutzen muss <code
+                class="language-text">servicename</code> und <code class="language-text">routername</code> durch Namen
+            ersetzt werden. Zusätzlich muss im Router der Hostname und im Service der interne URL zu dem dienst, der von
+            außen erreichbar sein soll gesetzt werden.
+        </p>
+        <pre>
+<code class="language-yaml">http:
+    # Add the router
+    routers:
+      routername:
+        service: servicename
+        rule: Host(`whoami.jonasled-test.xyz`)
+        tls:
+          certresolver: letsencrypt
+  
+    # Add the service
+    services:
+      servicename:
+        loadBalancer:
+          servers:
+          - url: http://10.0.0.1
+          passHostHeader: true</code>
+</pre>
+    </div>
+    <jl-footer></jl-footer>
+    <script src="/js/script.js"></script>
+</body>
+
+</html>
\ No newline at end of file