diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c74e880
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+Wireguard/keys
\ No newline at end of file
diff --git a/ChatGPT-WireGuard.md b/ChatGPT-WireGuard.md
new file mode 100644
index 0000000..d74ebdc
--- /dev/null
+++ b/ChatGPT-WireGuard.md
@@ -0,0 +1,87 @@
+Certainly! Here's a step-by-step guide to set up policy-based routing for your scenario:
+
+### Step 1: Enable IP Forwarding
+
+1. Edit the sysctl configuration file:
+ ```bash
+ sudo nano /etc/sysctl.conf
+ ```
+
+2. Uncomment or add the following line to enable IP forwarding:
+ ```
+ net.ipv4.ip_forward = 1
+ ```
+
+3. Save and close the file.
+
+4. Apply the changes:
+ ```bash
+ sudo sysctl -p
+ ```
+
+### Step 2: Configure Policy-Based Routing
+
+1. Create routing tables and rules for each domain.
+
+ ```bash
+ # Create a new routing table for foo.com
+ echo "200 foo" >> /etc/iproute2/rt_tables
+
+ # Add a route to the foo.com routing table
+ sudo ip route add foo.com via 10.10.10.10 table foo
+
+ # Add a rule to use the foo.com routing table for traffic destined to foo.com
+ sudo ip rule add to 10.10.10.10 lookup foo
+ ```
+
+ ```bash
+ # Create a new routing table for bar.com
+ echo "201 bar" >> /etc/iproute2/rt_tables
+
+ # Add a route to the bar.com routing table
+ sudo ip route add bar.com via 10.10.10.20 table bar
+
+ # Add a rule to use the bar.com routing table for traffic destined to bar.com
+ sudo ip rule add to 10.10.10.20 lookup bar
+ ```
+
+### Step 3: Test the Configuration
+
+1. Test connectivity to each domain from an external source to ensure that traffic is routed correctly.
+
+### Step 4: Make Configuration Persistent (Optional)
+
+1. Create a script to apply the routing rules on system startup. For example, create a script named `policy-routing.sh`:
+
+ ```bash
+ sudo nano /etc/network/if-up.d/policy-routing.sh
+ ```
+
+2. Add the following contents to the script:
+
+ ```bash
+ #!/bin/bash
+
+ # Add routing tables and rules
+ echo "200 foo" >> /etc/iproute2/rt_tables
+ ip route add foo.com via 10.10.10.10 table foo
+ ip rule add to 10.10.10.10 lookup foo
+
+ echo "201 bar" >> /etc/iproute2/rt_tables
+ ip route add bar.com via 10.10.10.20 table bar
+ ip rule add to 10.10.10.20 lookup bar
+ ```
+
+3. Make the script executable:
+
+ ```bash
+ sudo chmod +x /etc/network/if-up.d/policy-routing.sh
+ ```
+
+4. The script will be automatically executed whenever a network interface is brought up.
+
+### Notes:
+- Ensure that the routing tables and rules are set up correctly. Errors can lead to misrouted traffic or network connectivity issues.
+- Regularly monitor and test the setup to ensure it continues to function as expected, especially after system updates or changes to network configurations.
+
+This guide should help you set up policy-based routing on your VPS to forward traffic based on domain names without relying on `iptables`. Adjust the configurations as necessary for your specific network setup and requirements.
\ No newline at end of file
diff --git a/Hermes/01 Projektinitialisierungsantrag.md b/Hermes/01 Projektinitialisierungsantrag.md
new file mode 100644
index 0000000..d4570a5
--- /dev/null
+++ b/Hermes/01 Projektinitialisierungsantrag.md
@@ -0,0 +1,109 @@
+Projektinitallisierungsantrag nach Vorlage von Hermes-gibb zum Projekt Raspydock.
+
+#### Zweck des Dokuments
+Der Projektinitialisierungsauftrag bildet die verbindliche Grundlage für die Freigabe der Phase Initialisierung. Er ist die Vereinbarung zwischen Auftraggeber und Projektleiter.
+
+#### Projektübersicht
+| Name | Value |
+| ----------------- | ------------------------------------------------------------- |
+| **Status** | Fertig |
+| **Projektname** | Raspydock |
+| **Projektleiter** | Nadja Ehrengruber |
+| **Auftraggeber** | Janik Wyder |
+| **Autoren** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli |
+| **Verteiler** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli, Janik Wyder |
+
+#### Änderungskontrolle, Prüfung, Genehmigung
+| Version | Datum | Beschreibung, Bemerkung | Name oder Rolle |
+| ------- | ---------- | ------------------------ | --------------- |
+| 0.1 | 30.01.2024 | Dokument erstellt | Alle |
+| 1.0 | 06.02.2024 | Dokument Fertig & abgabe | Alle |
+
+#### Glossar
+| Begriff / Abkürzung | Bedeutung |
+| ------------------- | ------------------------------------- |
+| bilateral | Im Gespräch Informationen austauschen |
+
+#### Referenzen
+| Referenz | Titel, Quelle |
+| -------- | ------------- |
+| \[1\] | ~~keine~~ |
+| \[2\] | ~~keine~~ |
+| \[3\] | ~~keine~~ |
+
+### Inhalt
+- [1. Ausgangslage](#Ausgangslage)
+- [2. Ziele](#Ziele)
+- [3. Rahmenbedingungen](#Rahmenbedingungen)
+- [4. Aufwand](#Aufwand)
+- [5. Kosten](#Kosten)
+- [6. Termine](#Termine)
+- [7. Ressourcen](#Ressourcen)
+- [8. Kommunikation](#Kommunikation)
+- [9. Risiken](#Risiken)
+
+### Ausgangslage
+Beim Projekt «Raspydock» geht es darum, auf einem Rasperry Pi Docker zu implementieren und darin verschiedene Services anzubieten, beziehungsweise laufen zu lassen. Wir stehen vor folgender Problemstellung, die wir bearbeiten werden:
+
+Wir wollen Leuten, die nicht technisch versiert sind, das Hosten eines Programmes, eines Services oder einer Webseite, vereinfachen.
+
+Um für die soeben genannte Herausforderung eine geeignete Lösung zu erarbeiten, wurden bereits einige Leistungen im Voraus erbracht. Janis Rölli, unser Projektmitglied mit dem meisten projektbezogenen Know-How, besitzt bereits die benötigte Hardware dazu. Ausserdem haben wir gemeinsamen Austausch die Idee ausgearbeitet und sie auch schon mit unserer Lehrperson, Gerhard Beutler besprochen.
+
+
+### Ziele
+Mit der Initialisierungsphase wollen wir mehrere Ziele erreichen. Einerseits wollen wir eine klare Ausgangslage für das Projekt schaffen. Andererseits wollen wir unsere Ziele in der Initialisierungsphase klar definieren. Die Grundlagen sowie der Auftrag des Projekts sollen ausgearbeitet und korrekt benannt werden. Zudem wollen wir die Rahmenbedingungen definieren. Als Produkt der Initialisierungsphase werden wir am Ende ein Dokument mit der Studie und eines mit dem Zeitplan haben.
+
+
+### Rahmenbedingungen
+Wir haben für die Initialisierung administrative, organisatorische, zeitliche und methodische Rahmenbedingungen. Wichtig ist, dass wir in der Projektgruppe gut organisiert sind und dass wir die Führung der Initialisierungsdokumente klar zuordnen. Wir können uns für diese Projektphase nach den Vorlagen, die wir von der gibb erhielten, richten. Als Projektmethode wurde HERMES vordefiniert, danach planen wir unser Projekt und gehen dementsprechend vor. Zeitlich sind für die Initialisierung drei Wochen vorgesehen.
+
+
+### Aufwand
+Wir rechnen mit einem Aufwand von etwa 11h es werden für die Initialisierung keine neuen Materialien benötigt. Jegliche Materialien z.B. (Notebooks, Software) sind bereits vorhanden.
+
+
+### Kosten
+Während der Initialisierungsphase werden keine Kosten anfallen, da die Mitarbeiter aus dem Projektteam nicht für die Arbeit entschädigt werden.
+
+
+### Termine
+| KW | Was? |
+| ------- | --------------------------------------------------------------- |
+| 10 | Abschluss der Initialisierungsphase |
+| 12 | Abschluss der Konzeptphase |
+| 20 | Abschluss der Realisierungsphase |
+| 22 | Abschluss der Einführungsphase |
+| 23 | Abschluss des Schlussberichts und Vorbereitung der Präsentation |
+| 24 / 25 | Präsentation des Projekts |
+| 26 | Reserve |
+
+
+### Ressourcen
+Während der Initialisierungsphase werden wir fast keine Ressourcen der Schule und keine vom Betrieb verwenden. Ausschliesslich das WLAN und die Word-Vorlagen des Moduls werden gebraucht werden. Dazu werden wir auf Feedback und Beratung von Herr Gerhard Beutler zurückgreifen.
+
+
+Auf welche (im Betrieb oder der Schule) vorhandenen Ressourcen wird während der Initialisierungsphase zugegriffen?
+
+
+### Kommunikation
+Janik Wyder unser Auftraggeber und unser Team sind die Stakeholder des Projektes. Unser Team muss nicht informiert werden da wir das Projekt durchführen, aber Janik wird jede Woche bilateral informiert.
+
+Ausserdem wird unser Lehrer Jede Woche im Unterricht über unsere Fortschritte informiert.
+
+
+### Risiken
+Die folgenden Risiken sind nach Eintretenswahrscheinlichkeit von 1 – 10 und dem Mass der Auswirkung von 1 – 10 beurteilt. In der letzten Spalte haben wir die zu ergreifenden Massnahmen beschrieben.
+
+| Risiko | Eintretens-wahrscheinlichkeit | Mass der Auswirkung | Massnahmen |
+| -------------------------------------------- | ----------------------------- | ------------------- | ---------- |
+| Initialisierungsantrag wird nicht angenommen | 2 | 10 | Initialisierungsantrag sauber erstellen, bearbeiten und am Ende noch einmal überprüfen. |
+| Hardwaredefekt | 5 | 5 | Damit dies nicht eintrifft, gehen wir sorgfältig mit der Hardware um. |
+| Hackerangriff | | 3 | Wir werden auf die Sicherheit achten, zum Beispiel von der Schule aus per VPN daran arbeiten. Falls ein Hackerangriff geschieht, würden wir das Gerät neu aufsetzen. |
+| Überschwemmung bei Janis zuhause | 1 | 8 | Da die Eintretenswahrscheinlichkeit im Winter sehr klein ist, werden wir hier keine Massnahmen ergreifen. |
+| Projekt am Schluss wird nicht abgenommen | 4 | 1-10 | Auftraggeber ausreichend und oft über den Fortschritt informieren und sein Feedback einbauen. Damit es nicht eintrifft, bearbeiten wir die Projektphasen engagiert und korrekt. Für die Kunden hätte dieses Risiko eine grosse Auswirkung, da es nicht abgeschlossen werden würde. Für uns eine kleine, da für die Modulnote vor allem die Dokumentation und die Umsetzung bewertet wird. |
+
+**Hiermit erteilt der Auftraggeber den Auftrag zur Durchführung der Initialisierungsphase des Projektes:**
+
+> Unterschrift Auftraggeber (Janik Wyder) erfolgte: Gleis 2, HBF Bern, 06.02.2024
+
+> Unterschrift Projektleitering (Nadja Ehrengruber) erfolgte: Bern, 13.02.2024
\ No newline at end of file
diff --git a/Hermes/02 Initialisierungs Studie.md b/Hermes/02 Initialisierungs Studie.md
new file mode 100644
index 0000000..6e0096a
--- /dev/null
+++ b/Hermes/02 Initialisierungs Studie.md
@@ -0,0 +1,213 @@
+Initialisierungs Studie nach Vorlage von Hermes-gibb
+
+#### Zweck des Dokuments
+Die Initialisierungsstudie bewertet Machbarkeit, Erfolgsaussichten und definiert erste Richtlinien für Projekte durch grundlegende Analysen und Bewertungen, um den Startpunkt festzustellen und potenzielle Risiken anzugehen.
+
+#### Projektübersicht
+| Name | Value |
+| ----------------- | ------------------------------------------------------------- |
+| **Status** | In Arbeit |
+| **Projektname** | Raspydock |
+| **Projektleiter** | Nadja Ehrengruber |
+| **Auftraggeber** | Janik Wyder |
+| **Autoren** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli |
+| **Verteiler** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli, Janik Wyder |
+
+#### Änderungskontrolle, Prüfung, Genehmigung
+| Version | Datum | Beschreibung, Bemerkung | Name oder Rolle |
+| ------- | ---------- | ----------------------- | --------------- |
+| 0.1 | 13.02.2024 | Dokument erstellt | Nadja |
+| | | | |
+| | | | |
+| | | | |
+
+#### Glossar
+| Begriff / Abkürzung | Bedeutung |
+| ------------------- | --------- |
+| | |
+
+#### Referenzen
+| Referenz | Titel, Quelle |
+| -------- | ------------- |
+| \[1\] | ~~keine~~ |
+| \[2\] | ~~keine~~ |
+| \[3\] | ~~keine~~ |
+
+
+### Inhalt
+- [1 - Situationsanalyse](#1---situationsanalyse)
+ - [1.1 - Ausgangslage](#11---ausgangslage)
+ - [1.2 - Stärken](#12---stärken)
+ - [1.3 - Schwächen](#13---schwächen)
+- [2 - Ziele](#2---ziele)
+ - [2.1 - Rahmenbedingungen](#21---rahmenbedingungen)
+ - [2.2 - Abgrenzung](#22---abgrenzung)
+- [3 - Liste der Stakeholder](#3---liste-der-stakeholder)
+- [4 - Anforderungen](#4---anforderungen)
+- [5 - Lösungsvarianten](#5---lösungsvarianten)
+ - [5.1 - Variantenübersicht](#51---variantenübersicht)
+ - [5.2 - Beschreibung der Varianten](#52---beschreibung-der-varianten)
+- [6 - Bewertung der Varianten (Tabelle)](#6---bewertung-der-varianten-tabelle)
+- [7 - Lösungsbeschreibung](#7---lösungsbeschreibung)
+- [8 - Projektplanung](#8---projektplanung)
+- [9 - Empfehlung](#9---empfehlung)
+- [10 - Projektfreigabe](#10---projektfreigabe)
+
+
+### 1 - Situationsanalyse
+#### 1.1 - Ausgangslage
+Das Hosten von Webseiten und Services erfordert viel Kapazität. Hardware, Know-How, Zeit und Geduld. Beispielsweise braucht das Hosting viel Speicherplatz, RAM und CPU-Leistung. Dies können sich nicht alle Firmen oder Einzelunternehmer leisten. Deswegen suchen sie nach Lösungen, wie sie auf eine einfache Weise ihre Webseite erstellen können. Am praktischsten ist es doch, wenn man sich gar nicht um das technische kümmern muss. Genau diese Erleichterung wollen wir unseren Kunden mit unserem Projekt bieten.
+
+#### 1.2 - Stärken
+Heutzutage gibt es eine Vielzahl von Stärken für Unternehmen oder Einzelunternehmer, die Webseiten und Services hosten möchten, ohne über umfangreiche Ressourcen oder technisches Know-how zu verfügen. Cloud-Plattformen wie AWS, Google Cloud und Microsoft Azure bieten skalierbare Hosting-Lösungen ohne hohe Hardwareinvestitionen. Website-Baukasten-Plattformen wie Wix und Squarespace ermöglichen das Erstellen ansprechender Webseiten ohne technische Vorkenntnisse. Managed Hosting-Services nehmen Unternehmen die technische Verwaltung ab. Automatisierung und DevOps-Praktiken vereinfachen die Bereitstellung und Verwaltung von Anwendungen. Die Unterstützung durch die Entwickler-Community bietet Zugang zu umfangreichen Ressourcen und Best Practices im Bereich Hosting.
+
+Bei unserem Projekt sollten wir sicherstellen, dass einige Punkte nicht vernachlässigt werden. Dazu gehören die Benutzerfreundlichkeit, Zuverlässigkeit und Stabilität der Plattform sowie deren Skalierbarkeit und Sicherheit. Darüber hinaus sollten wir darauf achten, dass der Kundensupport und die Dokumentation weiterhin effektiv sind. Diese Aspekte sind entscheidend für den Erfolg und die Zufriedenheit unserer Kunden.
+
+#### 1.3 - Schwächen
+Es gibt an der heutigen Situation auch Schwachpunkte. Diese wollen wir mit unserem Projekt verbessern.
+
+| Nr. | Name | Beschreibung |
+| --- | --------------------------------- | ------------ |
+| S1 | Komplexität und technische Hürden | Viele Unternehmen und Einzelunternehmer könnten Schwierigkeiten haben, die technischen Anforderungen und Komplexitäten des Webhostings zu bewältigen. |
+| S2 | Hohe Kosten | Die Einrichtung und Wartung einer Hosting-Infrastruktur kann kostspielig sein, insbesondere für Unternehmen mit begrenzten finanziellen Ressourcen. Dies können wir gut umgehen, da Janis die benötigte Hardware bereits besitzt. |
+| S3 | Sicherheitsrisiken | Hosting-Infrastrukturen können anfällig für Sicherheitsbedrohungen wie Hacking und Datenverlust sein, insbesondere wenn sie nicht angemessen geschützt und gewartet werden. Darauf werden wir achtgeben, indem wir zum Beispiel von der Schule aus per VPN arbeiten werden. |
+| S4 | Zeit- und Ressourcenaufwand | Die Einrichtung und Verwaltung einer Hosting-Infrastruktur erfordert Zeit und Ressourcen, die für Unternehmen und Einzelunternehmer möglicherweise knapp sind. Dies kann dazu führen, dass wichtige Ressourcen von anderen geschäftlichen Aufgaben abgezogen werden müssen, was die Effizienz und Produktivität beeinträchtigen kann. In diese Gefahr laufen wir nicht, da unsere Kernaufgabe das Projekt ist. Wir haben keine anderen geschäftlichen Aufgaben, bei welchen wir Zeit und Ressourcen verlieren könnten. |
+
+
+### 2 - Ziele
+**Muss-Ziele**
+Im Folgenden beschreiben wir die Muss-Ziele unseres Projektes. Diese wollen wir unbedingt erreichen.
+
+| Nr. | Beschreibung des Muss-Ziels | Behobener Schwachpunkt |
+| --- | --------------------------- | ---------------------- |
+| MZ1 | Möglichst lange Erhaltung der Hardware durch sorgfältigen und professionellen Umgang damit. | S2: Hohe Kosten
Es werden zusätzliche Kosten vermieden, da wir keine neue Hardware kaufen müssen. |
+| MZ2 | Bis zur Kalenderwoche 22 soll eine benutzerfreundliche Website-Baukasten-Plattform implementiert werden, die es auch technisch weniger versierten Benutzern ermöglicht, ansprechende Webseiten zu erstellen. | S1: Komplexität und technische Hürden
Durch das bereits vorhandene Know-How und Recherche im Internet, können wir die benutzerfreundliche Plattform bereitstellen. |
+| MZ3 | Gewährleisten der Sicherheit während des ganzen Projekts durch VPN-Verbindungen und Einhalten der Sicherheitsrichtlinien. | S3: Sicherheitsrisiken
Durch unsere Massnahmen wird die Sicherheit gewährleistet. |
+| MZ4 | Implementierung einer automatisierten Hosting-Infrastruktur-Management-Lösung bis Kalenderwoche 22, die das Hosting von Websites und Services übernimmt, um den Aufwand für unsere Kunden zu reduzieren | S4: Zeit- und Ressourcenaufwand
Durch unsere Lösung erleichtern wir den Kunden die Arbeit und wir können uns ganz darauf konzentrieren, ohne daneben Zeit und Ressourcen an anderen Orten zu verlieren. |
+| MZ5 | Erstellung und Abgabe aller Dokumente sowie die Vorbereitung und Haltung der Präsentation des Moduls 306. Parallel soll das Modul 300 bearbeitet werden. | |
+
+**Kann-Ziele**
+Wir haben noch einige Ziele formuliert, die wir anstreben werden, sofern wir mit den Muss-Zielen schnell vorankommen und noch verbleibende Zeit haben werden.
+
+| Nr. | Beschreibung des optionalen Ziels |
+| --- | --------------------------------- |
+| OZ1 | Erstellung von Dokumentationen und Schulungsmaterial zu unserer Umgebung als PDF für die Kunden bis Kalenderwoche 25. |
+| OZ2 | Integration von Analyse- und Reporting-Tools bis Kalenderwoche 22, um den Nutzern detaillierte Einblicke in die Leistung ihrer gehosteten Webseiten und Services zu bieten. |
+| OZ3 | Einführung von Zwei-Faktor-Authentifizierung für unsere Plattform bis Kalenderwoche 22, um die Sicherheit zu erhöhen. |
+
+#### 2.1 - Rahmenbedingungen
+Das Projekt läuft im Rahmen des Moduls 306 der IET-gibb ab. Wir arbeiten während dem Unterricht am Dienstagmorgen daran und bei Bedarf zuhause. Die Hardware befindet sich bei Janis. Wenn wir von einem anderen Ort daran arbeiten, greifen wir per VPN darauf zu. Ausserdem organisieren wir und mündlich oder schriftlich über Teams im Projektteam. Wir sind auch immer wieder mit unserem Lehrer Gerhard Beutler im Austausch, wer als Ratgeber und Bewerter unseres Projekts tätig ist. Die zeitlichen Rahmenbedingungen sind der untenstehenden Tabelle zu entnehmen.
+
+| KW | Was |
+| ------- | --------------------------------------------------------------- |
+| 10 | Abschluss der Initialisierungsphase |
+| 12 | Abschluss der Konzeptphase |
+| 20 | Abschluss der Realisierungsphase |
+| 22 | Abschluss der Einführungsphase |
+| 23 | Abschluss des Schlussberichts und Vorbereitung der Präsentation |
+| 24 / 25 | Präsentation des Projekts |
+| 26 | Reserve |
+
+#### 2.2 - Abgrenzung
+
+
+```
+Wo sind die Grenzen Ihres Projektes? Was alles wird durch Ihr Vorhaben explizit nicht abgedeckt?
+```
+
+
+### 3 - Liste der Stakeholder
+Von unserem Projekt sind die Personen betroffen, die in der Tabelle aufgeführt sind. Daneben ist noch zu lesen, welche Rolle sie in unserem Projekt haben.
+
+| Wer | Rolle |
+| ----------------- | ----------------------------- |
+| Florian Lehmeier | Projektteammitglied |
+| Janis Rölli | Projektteammitglied |
+| Nadja Ehrengruber | Projektleiterin |
+| Janik Wyder | Auftraggeber |
+| Gerhard Beutler | Berater, Bewerter, Lehrperson |
+
+Florian, Janis und Nadja bilden das Projektteam, Nadja wirkt als Projektleiterin. Gemeinsam wollen wir das Projekt erfolgreich durchführen. Wir sind immer wieder mit dem Auftraggeber in Kontakt. Er hat unser Projekt bereits freigegeben und wir werden ihm ebenfalls die Studie zur Kontrolle und Unterschrift vorlegen. Anschliessend werden wir die Studie an Herrn Beutler abgeben, um von ihm eine Rückmeldung zu erhalten.
+
+
+### 4 - Anforderungen
+| Nr. | Anforderung | Bearbeitetes Ziel |
+| --- | ----------- | ----------------- |
+| A1 | Regelmässige Wartung der Hardwarekomponenten, also regelmäßige Überprüfungen, Reinigungen und Aktualisierungen. | MZ1: Verlängerung der Lebensdauer der Hardware |
+| A2 | Schulung des Personals in Bezug auf den sachgemäßen Umgang mit der Hardware und die Durchführung von Wartungsmaßnahmen. | MZ1: Verlängerung der Lebensdauer der Hardware |
+| A3 | Regelmäßige Aktualisierung der Firmware und Treiber der Hardwarekomponenten, um die Leistung und Sicherheit zu verbessern und Kompatibilitätsprobleme zu minimieren | MZ1: Verlängerung der Lebensdauer der Hardware |
+| A4 | Entwicklung eines einfach bedienbaren Systems für das Erstellen von Websites. Es soll auch von technisch weniger versierten Benutzern verstanden werden. | MZ2: Implementierung einer benutzerfreundlichen Website-Baukasten-Plattform |
+| A5 | Integration einer guten Dokumentation, welche die Benutzer anleitet. | OZ1: Implementierung einer benutzerfreundlichen Website-Baukasten-Plattform |
+| A6 | Einrichtung eines Virtual Private Network (VPN) für sichere Verbindungen und den Schutz vor externen Bedrohungen. | MZ3: Gewährleistung der Sicherheit während des gesamten Projekts |
+| A7 | Regelmäßige Sicherheitsaudits und Kontrollen, um potenzielle Schwachstellen zu identifizieren und zu beheben. | MZ3: Gewährleistung der Sicherheit während des gesamten Projekts |
+| A8 | Entwicklung einer benutzerfreundlichen Oberfläche für das Management und die Überwachung von Hosting-Ressourcen, einschließlich der automatischen Skalierung und Lastverteilung. | MZ4: Implementierung einer automatisierten Hosting-Infrastruktur-Management-Lösung |
+| A9 | Ermöglichung der Verwaltung der bereitgestellten Services und Webseiten für den Kunden. | MZ4: Implementierung einer automatisierten Hosting-Infrastruktur-Management-Lösung |
+
+### 5 - Lösungsvarianten
+#### 5.1 - Variantenübersicht
+
+
+```
+Bis hierher haben Sie sich viele Gedanken über das eigentliche Problem und die Anforderungen an seine Lösung gemacht.
+Nun ist es wichtig, dass Sie sich von Ihrer (wahrscheinlich ja schon vorhandenen) Lösungsidee distanzieren, um andere Alternativen in Betracht ziehen zu können.
+
+Lassen Sie Ihrer Phantasie einen Spielraum und überlegen Sie sich echte Varianten für eine Lösung der Aufgabestellung.
+In der Regel lassen sich mindestens drei verschiedene Lösungsvarianten finden.
+```
+
+#### 5.2 - Beschreibung der Varianten
+
+
+```
+Beschreiben Sie hier die gefundenen Lösungsvarianten so genau, dass auch eine aussenstehende Person mit wenig technischem Sachverständnis den weiter unten gefällten Entscheid nachvollziehen kann.
+```
+
+
+### 6 - Bewertung der Varianten (Tabelle)
+
+
+```
+Führen Sie hier Ihren möglichst objektiven Variantenentscheid durch.
+Oft ist die Lösung, welche schon von Anfang an favorisiert wurde, nicht die beste.
+
+Einen nachvollziehbaren Entscheid erreicht man z.B. mit eine Tabelle, in welcher die einzelnen Varianten einer Liste von (gewichteten) Kriterien gegenübergestellt werden (siehe auch AB 306.08).
+```
+
+
+### 7 - Lösungsbeschreibung
+
+
+```
+Beschreiben Sie nun die gefundene Lösungsvariante in allen ihren Details.
+Aus welchen Komponenten besteht die Lösung (evtl. System-Skizze einbauen).
+
+Überprüfen Sie zum Schluss anhand einer Tabelle, ob durch die gewählte Lösung auch wirklich alle Anforderungen abdecken.
+```
+
+
+### 8 - Projektplanung
+
+
+```
+Erstellen Sie hier einen (vorerst noch groben) Zeitplan für die Durchführung des Projektes (mindestens Dauer und Abschluss der einzelnen Phasen sowie wichtigste Meilensteine).
+
+Verwenden Sie dazu eine Excel-Tabelle oder ein Gantt-Diagramm.
+```
+
+
+### 9 - Empfehlung
+
+
+```
+Empfehlen Sie hier dem Auftraggeber, den Projektentscheid zu Gunsten der ausgewählten Variante zu treffen und das Projekt freizugeben.
+```
+
+
+### 10 - Projektfreigabe
+**Hiermit bestätigt der Auftraggeber die Freigabe des Projekts:**
+
+> Unterschrift Auftraggeber erfolgte: \, \
+
+> Unterschrift Projektleitering erfolgte: \, \
+
+---
diff --git a/README.md b/README.md
index d05a980..31432ee 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,125 @@
-# Raspydock
+# Projektarbeit Modul 306 / 300
+
+Gruppenarbeit à la Hermes
+
+## RaspyDock
+- [01 Projektinitialisierungsantrag](Hermes/01%20Projektinitialisierungsantrag.md)
+- [02 Initialisierungs Studie](Hermes/02%20Initialisierungs%20Studie.md)
+
+## Setup
+### Wireguard
+Wireguard ist eine VPN Lösung und wird in diesem Projekt verwendet, um den Raspberry Pi mit dem VPS zu verbinden.
+Auf dem VPS und dem Server kann Wireguard mit `apt install wireguard` installiert werden.
+
+#### Erstellung Keys
+`wg genkey | tee privatekey | wg pubkey > publickey`
+
+#### Config VPS
+```yaml
+# file: /etc/wireguard/wg0.conf
+[Interface]
+Address = 10.10.10.1/24
+ListenPort = 51820
+PrivateKey = PRIVATE_VPS_KEY
+
+[Peer]
+PublicKey = PUBLIC_SERVER_KEY
+AllowedIPs = 10.10.10.10/32
+```
+
+#### Config Raspberry Pi
+```yaml
+# file: /etc/wireguard/wg0.conf
+[Interface]
+Address = 10.10.10.10/32
+PrivateKey = PRIVATE_DMZ_KEY
+DNS = 9.9.9.9, 149.112.112.112
+
+[Peer]
+PublicKey = PUBLIC_VPS_KEY
+Endpoint = VPS_IP_ADDRESS:51820
+AllowedIPs = 10.10.10.1/32
+PersistentKeepalive = 25
+```
+
+#### Inbetriebnahme
+Nach erstellen der Config Files müssen diese Befehle eingegeben werden
+(Auf dem VPS und dem Raspberry Pi):
+```bash
+sudo systemctl enable wg-quick@wg0.service
+sudo systemctl start wg-quick@wg0.service
+```
+
+Der Status kann mit dem Befehl `sudo systemctl status wg-quick@wg0.service` geprüft werden.
+
+
+### VPN Heatlh Check
+> [Health-Check.sh](Wireguard/health-check.sh)
+> Abgespeichert unter `/script/wg-health-check.sh`
+
+```sh
+$> chmod +x /script/wg-health-check.sh
+$> crontab -e
+
+-> # m h dom mon dow command
+-> 5 * * * * /script/wg-health-check.sh
+```
+
+Dieses Shell Script pingt den Wireguard Gateway 3 Mal hintereinander. Sollte der Ping fehlschlagen, wird der Service neu gestartet
+
+### Hostname Ändern
+hostnamectl hostname raspydock
+
+### DNS Einträge
+2 A-Records:
+| Domain | IP |
+| -------------- | -------------- |
+| raspydock.ch | 85.215.132.141 |
+| *.raspydock.ch | 85.215.132.141 |
+
+### User vmadmin erstellen
+```sh
+#> useradd vmadmin
+#> passwd vmadmin
+New password: sml12345
+Retype new password: sml12345
+passwd: password updated successfully
+#> usermod -aG sudo vmadmin
+```
+
+### Routing der Requests
+#### VPS
+##### Routing Konfigurieren
+IP Forwarding Aktivieren:
+```sh
+$> sudo sysctl -w net.ipv4.ip_forward=1
+```
+
+Die NAT zwischen dem WireGuard Tunnel un dem Internet müssen Maskiert werden
+```sh
+# ens6 ist das LAN Interface mit der öffentlichen IP auf dem VPS
+sudo iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE
+```
+
+##### IPTables Konfigurieren
+```sh
+# Traffic aus dem Wireguard Tunnel Zulassen
+sudo iptables -A INPUT -i wg0 -j ACCEPT
+
+# Verwandte oder bereits bestehende Verbindungen Zulassen
+sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
+
+# Traffic von Wireguard zum Server Zulassen
+sudo iptables -A FORWARD -i wg0 -o ens6 -d 10.10.10.10 -j ACCEPT
+```
+
+
+
+
+
+
+
+
+
+
-Unterlagen für das Raspydock Gruppenprojekt
\ No newline at end of file
diff --git a/Server/Raspi.md b/Server/Raspi.md
new file mode 100644
index 0000000..8994436
--- /dev/null
+++ b/Server/Raspi.md
@@ -0,0 +1,23 @@
+## Hardware Setup
+* Raspberry Pi 4 Model B
+* 4 GB RAM
+* 64 GB Micro SD (OS-Daten)
+* 2 TB Samsung T7 (Externe SSD für Applikations-Daten)
+
+## Installierte Sowftware
+* Shell
+ * ZSH
+ * Oh-My-ZSH
+
+* Management
+ * Cockpit
+ * cockpit-bridge
+ * cockpit-navigator
+ * cockpit-networkmanager
+ * cockpit-packagekit
+ * cockpit-pcp
+ * cockpit-storaged
+ * cockpit-system
+ * cockpit-ws
+
+* Docker
diff --git a/Server/docker/nginx/docker-compose.yml b/Server/docker/nginx/docker-compose.yml
new file mode 100644
index 0000000..6b0d463
--- /dev/null
+++ b/Server/docker/nginx/docker-compose.yml
@@ -0,0 +1,26 @@
+version: "3.8"
+
+services:
+ nginx:
+ image: jc21/nginx-proxy-manager:latest
+ container_name: nginx
+ restart: always
+ ports:
+ - 80:80 # HTTP Redirect Port
+ - 443:443 # HTTPS Redirect Port
+ - 81:81 # Management Port
+ volumes:
+ - nginx_data:/data
+ - nginx_letsencrypt:/etc/letsencrypt
+ environment:
+ - TZ=Europe/Zurich
+ - DISABLE_IPV6=true
+
+networks:
+ default:
+ external: true
+ name: proxynet
+
+volumes:
+ nginx_data:
+ nginx_letsencrypt:
diff --git a/Server/docker/portainer/docker-compose.yml b/Server/docker/portainer/docker-compose.yml
new file mode 100644
index 0000000..70337d4
--- /dev/null
+++ b/Server/docker/portainer/docker-compose.yml
@@ -0,0 +1,21 @@
+# Only Service Stack not hosted on Portainer
+version: "3.8"
+
+services:
+ portainer:
+ image: portainer/portainer-ce:latest
+ container_name: portainer
+ restart: always
+ ports:
+ - 9000:9000 # Web UI Port
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - portainer_data:/data
+
+networks:
+ default:
+ external: true
+ name: proxynet
+
+volumes:
+ portainer_data:
\ No newline at end of file
diff --git a/Server/fstab b/Server/fstab
new file mode 100644
index 0000000..37f58ce
--- /dev/null
+++ b/Server/fstab
@@ -0,0 +1,18 @@
+# /etc/fstab: static file system information.
+#
+# Use 'blkid' to print the universally unique identifier for a
+# device; this may be used with UUID= as a more robust way to name devices
+# that works even if disks are added and removed. See fstab(5).
+#
+# systemd generates mount units based on this file, see systemd.mount(5).
+# Please run 'systemctl daemon-reload' after making changes here.
+#
+# a swapfile is not a swap partition, no line here
+# use dphys-swapfile swap[on|off] for that
+#
+#
+proc /proc proc defaults 0 0
+PARTUUID=5442d5ab-01 /boot/firmware vfat defaults 0 2
+PARTUUID=5442d5ab-02 / ext4 defaults,noatime 0 1
+# External Docker Data Drive Mounted on the /data directory.
+UUID=eabf0e8b-2355-4bda-91d6-6390d9eaa3a7 /data ext4 defaults 0 0
diff --git a/Server/motd b/Server/motd
new file mode 100644
index 0000000..028797c
--- /dev/null
+++ b/Server/motd
@@ -0,0 +1,10 @@
+
+
+ ██████╗ █████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██████╗██╗ ██╗ | Web Interface:
+ ██╔══██╗██╔══██╗██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝ | Admin.RaspyDock.ch
+ ██████╔╝███████║███████╗██████╔╝ ╚████╔╝ ██║ ██║██║ ██║██║ █████╔╝ | 192.168.1.90:9090
+ ██╔══██╗██╔══██║╚════██║██╔═══╝ ╚██╔╝ ██║ ██║██║ ██║██║ ██╔═██╗ |
+ ██║ ██║██║ ██║███████║██║ ██║ ██████╔╝╚██████╔╝╚██████╗██║ ██╗ | SSH Access:
+ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝ | vmadmin@RaspyDock.ch
+
+
\ No newline at end of file
diff --git a/Server/mount-drive.sh b/Server/mount-drive.sh
new file mode 100644
index 0000000..86a6474
--- /dev/null
+++ b/Server/mount-drive.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+# List Drives:
+# $> lsblk
+#
+# List Drive UUID:
+# $> blkid
+#
+# Umount Disk:
+# $> umount device/directory
+#
+# Format Drive:
+# $> mkfs [options] [-t type fs-options] device [size]
+
+lsblk
+# Target Device /dev/sda1
+# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
+# sda 8:0 0 1.8T 0 disk
+# `-sda1 8:1 0 1.8T 0 part /media/T7
+
+sudo umount -f /dev/sda1
+sudo mkfs -t ext4 /dev/sda1
+# Creating filesystem with 488377976 4k blocks and 122101760 inodes
+# Filesystem UUID: eabf0e8b-2355-4bda-91d6-6390d9eaa3a7
+# Superblock backups stored on blocks:
+# 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
+# 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
+# 102400000, 214990848
+
+# Allocating group tables: done
+# Writing inode tables: done
+# Creating journal (262144 blocks): done
+# Writing superblocks and filesystem accounting information: done
+
+blkid
+# Target Device /dev/sda1
+# /dev/sda1: UUID="eabf0e8b-2355-4bda-91d6-6390d9eaa3a7" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="7c7cb417-01"
+
+echo "UUID=eabf0e8b-2355-4bda-91d6-6390d9eaa3a7 /data ext4 defaults 0 0" >> /etc/fstab
+# Adds the Drive to the fstab File
+
+systemctl daemon-reload
+mkdir /data
+mount -a
+# Reloads the Daemon and mounts the Drive under /data
diff --git a/Server/software-setup.sh b/Server/software-setup.sh
new file mode 100644
index 0000000..50da944
--- /dev/null
+++ b/Server/software-setup.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Full Install Script for the Lazy People
+echo "Updating And Installing dependencies"
+sudo apt update && sudo apt upgrade -y
+sudo apt install wget curl -y
+
+# Remove Any Pre Existing Docker Apps, Images and general configuration
+echo "Removing old Docker Confgiuration"
+sudo apt-get purge docker-ce \
+ docker-ce-cli \
+ containerd.io \
+ docker-buildx-plugin \
+ docker-compose-plugin \
+ docker-ce-rootless-extras -y
+for pkg in docker.io docker-doc docker-compose podman-docker containerd runc;
+ do sudo apt-get remove $pkg;
+done
+sudo rm -rf /var/lib/docker
+sudo rm -rf /var/lib/containerd
+sudo rm -rf /docker
+
+# Add Docker's official GPG key:
+echo "Installing Docker Daemon and Plug-Ins"
+sudo apt-get update
+sudo apt-get install ca-certificates curl gnupg -y
+sudo install -m 0755 -d /etc/apt/keyrings
+curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
+sudo chmod a+r /etc/apt/keyrings/docker.gpg
+
+# Set up Docker's APT repository:
+echo \
+ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/raspbian \
+ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
+ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+sudo apt-get update
+
+# Install The Latest Version of Docker
+sudo apt-get install docker-ce \
+ docker-ce-cli \
+ containerd.io \
+ docker-buildx-plugin \
+ docker-compose-plugin -y
+
+# Create Docker Network
+docker network create proxynet
+
+# Install The Latest Version of Cockpit
+sudo apt install cockpit \
+ cockpit-bridge \
+ cockpit-networkmanager \
+ cockpit-packagekit \
+ cockpit-pcp \
+ cockpit-storaged \
+ cockpit-system \
+ cockpit-ws -y
+
+# Install Cockpit Navigator
+wget https://github.com/45Drives/cockpit-navigator/releases/download/v0.5.10/cockpit-navigator_0.5.10-1focal_all.deb
+apt install ./cockpit-navigator_0.5.10-1focal_all.deb
diff --git a/Server/sshd_config b/Server/sshd_config
new file mode 100644
index 0000000..f09cb83
--- /dev/null
+++ b/Server/sshd_config
@@ -0,0 +1,121 @@
+# This is the sshd server system-wide configuration file. See
+# sshd_config(5) for more information.
+
+# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
+
+# The strategy used for options in the default sshd_config shipped with
+# OpenSSH is to specify options with their default value where
+# possible, but leave them commented. Uncommented options override the
+# default value.
+
+Include /etc/ssh/sshd_config.d/*.conf
+
+#Port 22
+#AddressFamily any
+#ListenAddress 0.0.0.0
+#ListenAddress ::
+
+#HostKey /etc/ssh/ssh_host_rsa_key
+#HostKey /etc/ssh/ssh_host_ecdsa_key
+#HostKey /etc/ssh/ssh_host_ed25519_key
+
+# Ciphers and keying
+#RekeyLimit default none
+
+# Logging
+#SyslogFacility AUTH
+#LogLevel INFO
+
+# Authentication:
+
+#LoginGraceTime 2m
+PermitRootLogin Yes
+#StrictModes yes
+#MaxAuthTries 6
+#MaxSessions 10
+
+#PubkeyAuthentication yes
+
+# Expect .ssh/authorized_keys2 to be disregarded by default in future.
+#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
+
+#AuthorizedPrincipalsFile none
+
+#AuthorizedKeysCommand none
+#AuthorizedKeysCommandUser nobody
+
+# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
+#HostbasedAuthentication no
+# Change to yes if you don't trust ~/.ssh/known_hosts for
+# HostbasedAuthentication
+#IgnoreUserKnownHosts no
+# Don't read the user's ~/.rhosts and ~/.shosts files
+#IgnoreRhosts yes
+
+# To disable tunneled clear text passwords, change to no here!
+#PasswordAuthentication yes
+#PermitEmptyPasswords no
+
+# Change to yes to enable challenge-response passwords (beware issues with
+# some PAM modules and threads)
+KbdInteractiveAuthentication no
+
+# Kerberos options
+#KerberosAuthentication no
+#KerberosOrLocalPasswd yes
+#KerberosTicketCleanup yes
+#KerberosGetAFSToken no
+
+# GSSAPI options
+#GSSAPIAuthentication no
+#GSSAPICleanupCredentials yes
+#GSSAPIStrictAcceptorCheck yes
+#GSSAPIKeyExchange no
+
+# Set this to 'yes' to enable PAM authentication, account processing,
+# and session processing. If this is enabled, PAM authentication will
+# be allowed through the KbdInteractiveAuthentication and
+# PasswordAuthentication. Depending on your PAM configuration,
+# PAM authentication via KbdInteractiveAuthentication may bypass
+# the setting of "PermitRootLogin prohibit-password".
+# If you just want the PAM account and session checks to run without
+# PAM authentication, then enable this but set PasswordAuthentication
+# and KbdInteractiveAuthentication to 'no'.
+UsePAM yes
+
+#AllowAgentForwarding yes
+#AllowTcpForwarding yes
+#GatewayPorts no
+X11Forwarding yes
+#X11DisplayOffset 10
+#X11UseLocalhost yes
+#PermitTTY yes
+PrintMotd no
+#PrintLastLog yes
+#TCPKeepAlive yes
+#PermitUserEnvironment no
+#Compression delayed
+#ClientAliveInterval 0
+#ClientAliveCountMax 3
+#UseDNS no
+#PidFile /run/sshd.pid
+#MaxStartups 10:30:100
+#PermitTunnel no
+#ChrootDirectory none
+#VersionAddendum none
+
+# no default banner path
+#Banner none
+
+# Allow client to pass locale environment variables
+AcceptEnv LANG LC_*
+
+# override default of no subsystems
+Subsystem sftp /usr/lib/openssh/sftp-server
+
+# Example of overriding settings on a per-user basis
+#Match User anoncvs
+# X11Forwarding no
+# AllowTcpForwarding no
+# PermitTTY no
+# ForceCommand cvs server
\ No newline at end of file
diff --git a/VPS/VPS.md b/VPS/VPS.md
new file mode 100644
index 0000000..e69de29
diff --git a/VPS/fstab b/VPS/fstab
new file mode 100644
index 0000000..e69de29
diff --git a/VPS/motd b/VPS/motd
new file mode 100644
index 0000000..6477439
--- /dev/null
+++ b/VPS/motd
@@ -0,0 +1,10 @@
+
+
+ ██╗ ██╗██████╗ ███████╗ | Web Interface:
+ ██║ ██║██╔══██╗██╔════╝ |
+ ██║ ██║██████╔╝███████╗ |
+ ╚██╗ ██╔╝██╔═══╝ ╚════██║ |
+ ╚████╔╝ ██║ ███████║ | SSH Access:
+ ╚═══╝ ╚═╝ ╚══════╝ | root@85.215.132.141
+
+
\ No newline at end of file
diff --git a/VPS/nginx/admin.raspydock.ch.conf b/VPS/nginx/admin.raspydock.ch.conf
new file mode 100644
index 0000000..7b55fb0
--- /dev/null
+++ b/VPS/nginx/admin.raspydock.ch.conf
@@ -0,0 +1,30 @@
+server {
+ server_name admin.raspydock.ch;
+
+ location / {
+ proxy_pass https://10.10.10.10:9090; # Raspberry Pi's IP
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
+ listen 443 ssl; # managed by Certbot
+ ssl_certificate /etc/letsencrypt/live/admin.raspydock.ch/fullchain.pem; # managed by Certbot
+ ssl_certificate_key /etc/letsencrypt/live/admin.raspydock.ch/privkey.pem; # managed by Certbot
+ include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
+ ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
+
+}
+server {
+ if ($host = admin.raspydock.ch) {
+ return 301 https://$host$request_uri;
+ } # managed by Certbot
+
+
+ listen 80;
+ server_name admin.raspydock.ch;
+ return 404; # managed by Certbot
+
+
+}
diff --git a/VPS/nginx/docker.raspydock.ch.conf b/VPS/nginx/docker.raspydock.ch.conf
new file mode 100644
index 0000000..a90ce66
--- /dev/null
+++ b/VPS/nginx/docker.raspydock.ch.conf
@@ -0,0 +1,12 @@
+server {
+ listen 80;
+ server_name docker.raspydock.ch;
+
+ location / {
+ proxy_pass http://10.10.10.10; # Raspberry Pi's IP
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+}
\ No newline at end of file
diff --git a/VPS/nginx/jelly.raspydock.ch.conf b/VPS/nginx/jelly.raspydock.ch.conf
new file mode 100644
index 0000000..e69de29
diff --git a/VPS/nginx/proxy.raspydock.ch.conf b/VPS/nginx/proxy.raspydock.ch.conf
new file mode 100644
index 0000000..733185d
--- /dev/null
+++ b/VPS/nginx/proxy.raspydock.ch.conf
@@ -0,0 +1,12 @@
+server {
+ listen 80;
+ server_name proxy.raspydock.ch;
+
+ location / {
+ proxy_pass http://10.10.10.10; # Raspberry Pi's IP
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+}
\ No newline at end of file
diff --git a/VPS/nginx/raspydock.ch.conf b/VPS/nginx/raspydock.ch.conf
new file mode 100644
index 0000000..40050a6
--- /dev/null
+++ b/VPS/nginx/raspydock.ch.conf
@@ -0,0 +1,5 @@
+server {
+ listen 80;
+ server_name raspydock.ch;
+ return 301 https://docker.raspydock.ch;
+}
diff --git a/VPS/nginx/suppe.raspydock.ch.conf b/VPS/nginx/suppe.raspydock.ch.conf
new file mode 100644
index 0000000..485dbf7
--- /dev/null
+++ b/VPS/nginx/suppe.raspydock.ch.conf
@@ -0,0 +1,12 @@
+server {
+ listen 80;
+ server_name suppe.raspydock.ch;
+
+ location / {
+ proxy_pass http://10.10.10.10; # Raspberry Pi's IP
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+}
\ No newline at end of file
diff --git a/VPS/sshd_config b/VPS/sshd_config
new file mode 100644
index 0000000..e69de29
diff --git a/Wireguard/health-check.sh b/Wireguard/health-check.sh
new file mode 100644
index 0000000..c7342dc
--- /dev/null
+++ b/Wireguard/health-check.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# Modified from https://mullvad.net/en/help/running-wireguard-router/
+# and https://wiki.r-selfhosted.com/guides/virtual-private-networks/wireguard/
+# ping Wireguard gateway to test for connection
+# if no contact, restart!
+# cron job that runs every 5 Minutes
+
+PING=/bin/ping
+## DEBIAN
+SERVICE=/usr/sbin/service
+
+tries=0
+while [[ $tries -lt 3 ]]
+do
+ if $PING -c 1 10.10.10.1
+ then
+ echo "wg works"
+ exit 0
+ fi
+ echo "wg fail"
+ tries=$((tries+1))
+done
+echo "wg failed 3 times - restarting tunnel"
+## DEBIAN
+$SERVICE wg-quick@wg0 restart
\ No newline at end of file
diff --git a/Wireguard/raspi.wg0.yaml b/Wireguard/raspi.wg0.yaml
new file mode 100644
index 0000000..88018b8
--- /dev/null
+++ b/Wireguard/raspi.wg0.yaml
@@ -0,0 +1,11 @@
+# file: /etc/wireguard/wg0.conf
+[Interface]
+Address = 10.10.10.10/32
+PrivateKey = PRIVATE_SERVER_KEY
+DNS = 9.9.9.9, 149.112.112.112
+
+[Peer]
+PublicKey = PUBLIC_VPS_KEY
+Endpoint = VPS_IP_ADDRESS:51820
+AllowedIPs = 10.10.10.1/32
+PersistentKeepalive = 25
\ No newline at end of file
diff --git a/Wireguard/vps.wg0.yaml b/Wireguard/vps.wg0.yaml
new file mode 100644
index 0000000..6c342b5
--- /dev/null
+++ b/Wireguard/vps.wg0.yaml
@@ -0,0 +1,9 @@
+# file: /etc/wireguard/wg0.conf
+[Interface]
+Address = 10.10.10.1/24
+ListenPort = 51820
+PrivateKey = PRIVATE_VPS_KEY
+
+[Peer]
+PublicKey = PUBLIC_SERVER_KEY
+AllowedIPs = 10.10.10.10/32
diff --git a/users.md b/users.md
new file mode 100644
index 0000000..88ce056
--- /dev/null
+++ b/users.md
@@ -0,0 +1,11 @@
+## VPS
+Benutzer: **vmadmin**
+Passwort: **sml12345** (nur vom internen Netzwerk, externe anmeldung erfolgt via ssh key)
+
+## Server
+Benutzer: **vmadmin**
+Passwort: **sml12345**
+
+## Portainer
+Benutzer: **vmadmin**
+Passwort: **csQ%FTchrEUfN8**
\ No newline at end of file