From 583a662fa667d122c5b083562a148482ead50463 Mon Sep 17 00:00:00 2001
From: abduki <abdullah.kiran@student.reutlingen-university.de>
Date: Mon, 16 Dec 2024 00:48:33 +0100
Subject: [PATCH] too much shit

---
 frontend/Dockerfile                           | 14 +++-
 minikube-prod/backend.yaml                    |  5 +-
 minikube-prod/caddy.yaml                      | 76 +++++++++++++++++++
 minikube-prod/frontend.yaml                   | 33 ++++++++
 minikube-prod/mongodb-pv.yaml                 | 11 +++
 minikube-prod/mongodb-pvc.yaml                | 10 +++
 .../todo/controller/UserController.java       |  7 +-
 7 files changed, 149 insertions(+), 7 deletions(-)
 create mode 100644 minikube-prod/caddy.yaml
 create mode 100644 minikube-prod/frontend.yaml
 create mode 100644 minikube-prod/mongodb-pv.yaml
 create mode 100644 minikube-prod/mongodb-pvc.yaml

diff --git a/frontend/Dockerfile b/frontend/Dockerfile
index e1a86ad..5f0b7e5 100644
--- a/frontend/Dockerfile
+++ b/frontend/Dockerfile
@@ -15,5 +15,15 @@ COPY . .
 RUN npm run build
 
 # stage 2: move static frontend stuff to caddys root folder to make caddy serve our frontend instead of spring
-FROM caddy:alpine
-COPY --from=build-frontend /app/dist /usr/share/caddy
\ No newline at end of file
+FROM node:20-alpine
+
+WORKDIR /app
+
+RUN npm install -g http-server
+
+COPY --from=build-frontend /app/dist /app
+
+EXPOSE 80
+
+# einfacher http-server
+CMD ["http-server", "/app", "-p", "80"]
\ No newline at end of file
diff --git a/minikube-prod/backend.yaml b/minikube-prod/backend.yaml
index 4ee0907..6b7fd99 100644
--- a/minikube-prod/backend.yaml
+++ b/minikube-prod/backend.yaml
@@ -14,7 +14,8 @@ spec:
     spec:
       containers:
         - name: backend-container
-          image: backend-image
+          image: backend-image:latest
+          imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 9876
           env:
@@ -23,7 +24,7 @@ spec:
             - name: MONGO_PASSWORD
               value: tododbadminpassword
             - name: MONGO_HOST
-              value: mongodb-servicevice in Kubernetes.
+              value: mongodb-service
             - name: MONGO_PORT
               value: "27017"
             - name: MONGO_DB
diff --git a/minikube-prod/caddy.yaml b/minikube-prod/caddy.yaml
new file mode 100644
index 0000000..308df16
--- /dev/null
+++ b/minikube-prod/caddy.yaml
@@ -0,0 +1,76 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: caddy-deployment
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: caddy-server
+  template:
+    metadata:
+      labels:
+        app: caddy-server
+    spec:
+      containers:
+        - name: caddy-container
+          image: caddy:alpine
+          ports:
+            - containerPort: 80
+          volumeMounts:
+            - mountPath: /usr/share/caddy
+              name: frontend-files
+            - mountPath: /etc/caddy/Caddyfile
+              subPath: Caddyfile
+              name: caddy-config
+      volumes:
+        - name: frontend-files
+          persistentVolumeClaim:
+            claimName: caddy-pvc
+        - name: caddy-config
+          configMap:
+            name: caddy-config
+
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: caddy-config
+data:
+  Caddyfile: |
+    :80 {
+      root * /usr/share/caddy
+      file_server
+
+      reverse_proxy /user* backend-service:9876 {
+          health_uri /health
+          health_interval 10s
+          health_timeout 1s
+      }
+    }
+
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: caddy-pvc
+spec:
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: caddy-service
+spec:
+  selector:
+    app: caddy-server
+  ports:
+    - protocol: TCP
+      port: 80
+      targetPort: 80
+  type: LoadBalancer
diff --git a/minikube-prod/frontend.yaml b/minikube-prod/frontend.yaml
new file mode 100644
index 0000000..f47fc85
--- /dev/null
+++ b/minikube-prod/frontend.yaml
@@ -0,0 +1,33 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: frontend-deployment
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: frontend
+  template:
+    metadata:
+      labels:
+        app: frontend
+    spec:
+      containers:
+        - name: frontend-container
+          image: frontend-image
+          imagePullPolicy: IfNotPresent # ohne diesen wert versucht minikube wieso auch immer images von dockerhub zu ziehen
+          ports:
+            - containerPort: 80
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: frontend-service
+spec:
+  selector:
+    app: frontend
+  ports:
+    - protocol: TCP
+      port: 80
+      targetPort: 80
+  type: LoadBalancer
diff --git a/minikube-prod/mongodb-pv.yaml b/minikube-prod/mongodb-pv.yaml
new file mode 100644
index 0000000..84b522b
--- /dev/null
+++ b/minikube-prod/mongodb-pv.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+  name: mongo-pv
+spec:
+  capacity:
+    storage: 1Gi
+  accessModes:
+    - ReadWriteOnce
+  hostPath:
+    path: /data/mongo
diff --git a/minikube-prod/mongodb-pvc.yaml b/minikube-prod/mongodb-pvc.yaml
new file mode 100644
index 0000000..586dbe4
--- /dev/null
+++ b/minikube-prod/mongodb-pvc.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: mongo-pvc
+spec:
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
diff --git a/src/main/java/com/cloudcomputing/todo/controller/UserController.java b/src/main/java/com/cloudcomputing/todo/controller/UserController.java
index 8589673..0fec196 100644
--- a/src/main/java/com/cloudcomputing/todo/controller/UserController.java
+++ b/src/main/java/com/cloudcomputing/todo/controller/UserController.java
@@ -13,11 +13,12 @@ import java.util.List;
 
 /*
  * 1. eval $(minikube docker-env) (docker-befehle werden dadurch in minikube ausgeführt) |
- *    windows: Invoke-Expression (minikube docker-env) // minikube muss dafür laufen auf windows, also erst 2. dann 1.
+ *    windows: & minikube -p minikube docker-env --shell powershell | Invoke-Expression
+ *    minikube muss dafür laufen auf windows, also erst 2. dann 1.
  * 2. minikube starten
  * 3. docker build -t <name> (einmal für jedes dockerfile um images zu erstellen)
- * 4.
-
+ * 4. lokale images in minikube laden mit minikube image load <name>
+ * 5. .yaml dateien mit kubectl apply -f <pfad-zur-yaml-datei>
  */
 
 @RestController
-- 
GitLab