diff --git a/backend-services/feed-service/Dockerfile b/backend-services/feed-service/Dockerfile
index 816c12e152289dfb1258fb580208b575cd30b082..4419eff213d22670ded3935632f14109f7bebe20 100644
--- a/backend-services/feed-service/Dockerfile
+++ b/backend-services/feed-service/Dockerfile
@@ -19,4 +19,4 @@ RUN unzip -d svc target/universal/feed-service-1.0.0.zip \
 EXPOSE 9000
 
 # Delete the RUNNING_PID fle that incorrectly tells Play there is already an instance running
-CMD rm -f svc/RUNNING_PID && svc/bin/start
+CMD rm -f svc/RUNNING_PID && svc/bin/start -Dplay.http.secret.key=$PLAY_HTTP_SECRET_KEY
diff --git a/backend-services/feed-service/conf/application.conf b/backend-services/feed-service/conf/application.conf
index 9d3697fda5e7b0fe38d862498d1901870c20fc22..7fd8d366175550e4ab708622b3fec0937f273a21 100644
--- a/backend-services/feed-service/conf/application.conf
+++ b/backend-services/feed-service/conf/application.conf
@@ -24,13 +24,8 @@ user.service.uri = "http://localhost:9000/"
 # Application Secret Key - https://www.playframework.com/documentation/2.8.x/ApplicationSecret
 play.http.secret.key="DUvbrcM2AbuB7oXboI1x`ZI_?1Iou>/ch2@lFXfrvVkWlHuA848y?GyR/0i2Ma:A"
 
-# Disable CSRF
-play.filters.disabled += play.filters.csrf.CSRFFilter
-
-# Enable and configure CORS
-play.filters.enabled += play.filters.cors.CORSFilter
-# play.filters.cors.allowedOrigins = ["localhost:9000"]
-# play.filters.cors.allowedHttpMethods = ["GET", "POST"]
+# Disable all default filters
+play.filters.enabled=[]
 
 # Use a custom error handler to not return HTML views
 play.http.errorHandler = "models.CustomErrorHandler"
diff --git a/docker-compose.yml b/docker-compose.yml
index 143c052c6b32477b0c76fd5b483f1f1dc24434e8..3cd75caa960512a6cf43ded34a848f2f1d161989 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -13,12 +13,14 @@ services:
     build:
       context: "./backend-services/feed-service"
       dockerfile: Dockerfile
+    image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/feed-service:v1
     restart: unless-stopped
     ports:
       - "9000"
     environment:
       - MONGO_URI=mongodb://feed-mongo:27017/
       - JWT_PRIVATE_KEY=yB/uX5KdyjHN9P34IE49HxAcrlQ4gfvpVJEzGbo5E/I=
+      - PLAY_HTTP_SECRET_KEY=DUvbrcM2AbuB7oXboI1x`ZI_?1Iou>/ch2@lFXfrvVkWlHuA848y?GyR/0i2Ma:A
       - FRIEND_SERVICE_URI=http://friend-service:9000/
       - ENABLE_QUESTION_DB_SEEDING=true
 
@@ -26,6 +28,7 @@ services:
     build:
       context: "./backend-services/user-service"
       dockerfile: Dockerfile
+    image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/user-service:v1
     restart: unless-stopped
     ports:
       - "9000"
@@ -39,6 +42,7 @@ services:
     build:
       context: "./backend-services/friend-service"
       dockerfile: Dockerfile
+    image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/friend-service:v1
     restart: unless-stopped
     ports:
       - "9000"
@@ -52,6 +56,7 @@ services:
     build:
       context: "./backend-services/comment-service-2"
       dockerfile: Dockerfile
+    image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/comment-service:v1
     restart: unless-stopped
     ports:
       - "9000"
@@ -65,6 +70,7 @@ services:
     build:
       context: "./daily-thought-frontend"
       dockerfile: Dockerfile
+    image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/frontend-service:v1
     restart: unless-stopped
     ports:
       - "3000"
diff --git a/gcloud/Deployment Steps.md b/gcloud/Deployment Steps.md
new file mode 100644
index 0000000000000000000000000000000000000000..27844444f2b8b6c2a595eca319f41d7ccea425ec
--- /dev/null
+++ b/gcloud/Deployment Steps.md	
@@ -0,0 +1,178 @@
+## Artifact Registry
+
+Our dockerised services have to be accessible from our Google Cloud project. To do this we use Google's (Artifact Registry)[https://cloud.google.com/artifact-registry] Service. This allows us to create a repository where we can store our own repository Docker images.
+
+#### Creating the Repository
+
+We first need to create the repository:
+
+`gcloud artifacts repositories create daily-repo --repository-format=docker --location=europe-west2 --description="Docker repository"`
+
+#### Service Account Permission
+
+We now need to create a service account with read-only access to the repository we made. This is so that our container instances and other resources can pull images from it.
+
+    gcloud artifacts repositories add-iam-policy-binding daily-repo \
+        --location=europe-west2
+        --member=serviceAccount:438503002799-compute@developer.gserviceaccount.com
+        --role="roles/artifactregistry.reader"
+
+## Pushing Docker Images
+
+Now that we have our own repository, we can push our custom images we defined in our (docker-compose.yml)[docker-compose.yml] file.
+
+- The **image** tag contains the repository to push the image to, as well as the name and tag of the image.
+
+First, we need to configure the Docker command-line tool to authenticate with the Artifact Registry:
+
+` gcloud auth configure-docker europe-west2-docker.pkg.dev`
+
+We can now push the images to our repository:
+
+`docker compose push`
+
+After the command has finished, you should see all our images on (Google Cloud)[https://console.cloud.google.com/artifacts/docker/daily-384822/europe-west2/daily-repo?project=daily-384822].
+
+<br />
+
+## Kubernetes Cluster
+
+Kubernetes is an _amazing_ open-source container orchestration system for automating software deployment, scaling, and management. We use it to manage our services!#
+
+First, we need to create a cluster:
+
+`gcloud container clusters create-auto daily-cluster --region=europe-west2`
+
+Verify the cluster is connected:
+
+`gcloud container clusters get-credentials daily-cluster --region europe-west2`
+
+The output should be: _kubeconfig entry generated for daily-cluster_. If so, you are now connected to the cluster!
+
+<br />
+
+**We can now move on to deploying our images!!! :D**
+
+<br />
+
+## Mongo Volumes
+
+### Storage Class
+
+Here we create a storage class that defines what properties the **default-mongo** class should have.
+
+`kubectl apply -f gcloud/mongo-pv/mongo-storage-class.yaml`
+
+You can check the current storage classes:
+
+`kubectl get storageclasses`
+
+### Creating Mongo Persistent Volumes
+
+We need a storage system for the Mongo instances. For this, we use (Persistent Volumes)[https://kubernetes.io/docs/concepts/storage/persistent-volumes/]
+
+- When we make a claim, Kubernetes automatically makes the Persistent Volume for us based on the Storage Class defined.
+
+#### User Mongo Volume
+
+`kubectl apply -f gcloud/user-mongo/user-mongo-pvc.yaml`
+
+#### Friend Mongo Volume
+
+`kubectl apply -f gcloud/friend-mongo/friend-mongo-pvc.yaml`
+
+#### Feed Mongo Volume
+
+`kubectl apply -f gcloud/feed-mongo/feed-mongo-pvc.yaml`
+
+#### Comment Mongo Volume
+
+`kubectl apply -f gcloud/comment-mongo/comment-mongo-pvc.yaml`
+
+### Checking Result
+
+You can check the current Persistent Volumes in our cluster:
+`kubectl get pv`
+
+As well as the current Persistent Volume Claims in our cluster:
+`kubectl get pvc`
+
+<br />
+
+## Deploying Mongo Services
+
+Now that we have the storage for our Mongo instances, we can deploy the services.
+
+- The deployment defines that the instance should use our created volumes.
+
+#### User Mongo Service
+
+`kubectl apply -f gcloud/user-mongo/user-mongo-deployment.yaml`
+
+#### Friend Mongo Service
+
+`kubectl apply -f gcloud/friend-mongo/friend-mongo-deployment.yaml`
+
+#### Feed Mongo Service
+
+`kubectl apply -f gcloud/feed-mongo/feed-mongo-deployment.yaml`
+
+#### Comment Mongo Service
+
+`kubectl apply -f gcloud/comment-mongo/comment-mongo-deployment.yaml`
+
+<br />
+
+## Deploying Main Services
+
+For our main services, we first define our Horizontal Autoscaler, then we deploy our service.
+
+### Frontend
+
+`kubectl apply -f gcloud/frontend-service/frontend-service-autoscaler.yaml`
+`kubectl apply -f gcloud/frontend-service/frontend-service-deployment.yaml`
+
+### User Backend
+
+`kubectl apply -f gcloud/user-service/user-service-autoscaler.yaml`
+`kubectl apply -f gcloud/user-service/user-service-deployment.yaml`
+
+### Friend Backend
+
+`kubectl apply -f gcloud/friend-service/friend-service-autoscaler.yaml`
+`kubectl apply -f gcloud/friend-service/friend-service-deployment.yaml`
+
+### Feed Backend
+
+`kubectl apply -f gcloud/feed-service/feed-service-autoscaler.yaml`
+`kubectl apply -f gcloud/feed-service/feed-service-deployment.yaml`
+
+### Comment Backend
+
+`kubectl apply -f gcloud/comment-service/comment-service-autoscaler.yaml`
+`kubectl apply -f gcloud/comment-service/comment-service-deployment.yaml`
+
+<br />
+
+## NGINX Service
+
+Thanks to our smort teammate Matt, we have a NGINX service. We use this service as a reverse proxy. What this means is that none of our services are exposed. Instead, we expose our NGINX service, and it manages our routes to services!
+
+### ConfigMap
+
+In Kubernetes, a ConfigMap is a key-value store that stores configuration data for your application. The ConfigMap can then be mounted as a volume inside a container, allowing the configuration data to be read by the application running inside the container.
+
+So we define the config in the (nginx.conf)[gcloud\nginx-service\nginx.conf] file and deploy it:
+
+`kubectl create configmap nginx-conf --from-file=gcloud/nginx-service/nginx.conf`
+
+### Deploying NGINX Service
+
+Before deploying the NGINX service, we define our Horizontal Autoscaler for it:
+`kubectl apply -f gcloud/nginx-service/nginx-service-autoscaler.yaml`
+
+We can now deploy NGINX as a service:
+
+`kubectl apply -f gcloud/nginx-service/nginx-service-deployment.yaml`
+
+What is different about this service, is that it is on a public endpoint!
diff --git a/gcloud/comment-mongo/comment-mongo-deployment.yaml b/gcloud/comment-mongo/comment-mongo-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3534555e8243728c12c16bca607c75f53d9fd9d0
--- /dev/null
+++ b/gcloud/comment-mongo/comment-mongo-deployment.yaml
@@ -0,0 +1,40 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: comment-mongo-deployment
+spec:
+  selector:
+    matchLabels:
+      app: comment-mongo
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: comment-mongo
+    spec:
+      containers:
+        - name: comment-mongo
+          image: mongo
+          ports:
+            - containerPort: 27017
+          volumeMounts:
+            - name: mongo-data
+              mountPath: /data/db
+      volumes:
+        - name: mongo-data
+          persistentVolumeClaim:
+            claimName: comment-mongo-volume
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: comment-mongo-service
+spec:
+  selector:
+    app: comment-mongo
+  ports:
+    - name: mongo-port
+      protocol: TCP
+      port: 27020
+      targetPort: 27017
+  type: ClusterIP
diff --git a/gcloud/comment-mongo/comment-mongo-pvc.yaml b/gcloud/comment-mongo/comment-mongo-pvc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a7c98d5de8a4b4444da45873ef233effbfc6d57c
--- /dev/null
+++ b/gcloud/comment-mongo/comment-mongo-pvc.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: comment-mongo-volume
+spec:
+  storageClassName: default-mongo
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
diff --git a/gcloud/comment-service/comment-service-autoscaler.yaml b/gcloud/comment-service/comment-service-autoscaler.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4be63e516aa8027aa0108f6983e5d05b4106cadc
--- /dev/null
+++ b/gcloud/comment-service/comment-service-autoscaler.yaml
@@ -0,0 +1,12 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: comment-backend-deployment-hpa
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: comment-backend-deployment
+  minReplicas: 1
+  maxReplicas: 3
+  targetCPUUtilizationPercentage: 80
diff --git a/gcloud/comment-service/comment-service-deployment.yaml b/gcloud/comment-service/comment-service-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e71598114c477118beec7badda59d44a5f85615b
--- /dev/null
+++ b/gcloud/comment-service/comment-service-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: comment-backend-deployment
+spec:
+  selector:
+    matchLabels:
+      app: comment-backend
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: comment-backend
+    spec:
+      containers:
+        - name: comment-service
+          image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/comment-service:v1
+          ports:
+            - containerPort: 9000
+          env:
+            - name: MONGO_HOST
+              value: "comment-mongo-service"
+            - name: MONGO_PORT
+              value: "27020"
+            - name: MONGO_DBNAME
+              value: "comments"
+            - name: JWT_PRIVATE_KEY
+              value: "yB/uX5KdyjHN9P34IE49HxAcrlQ4gfvpVJEzGbo5E/I="
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: comment-backend-service
+spec:
+  selector:
+    app: comment-backend
+  ports:
+    - name: http
+      port: 9000
+      targetPort: 9000
+  type: ClusterIP
diff --git a/gcloud/feed-mongo/feed-mongo-deployment.yaml b/gcloud/feed-mongo/feed-mongo-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..62948b4c598c831d113e7b391b0f6bb9eee0c768
--- /dev/null
+++ b/gcloud/feed-mongo/feed-mongo-deployment.yaml
@@ -0,0 +1,40 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: feed-mongo-deployment
+spec:
+  selector:
+    matchLabels:
+      app: feed-mongo
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: feed-mongo
+    spec:
+      containers:
+        - name: feed-mongo
+          image: mongo
+          ports:
+            - containerPort: 27017
+          volumeMounts:
+            - name: mongo-data
+              mountPath: /data/db
+      volumes:
+        - name: mongo-data
+          persistentVolumeClaim:
+            claimName: feed-mongo-volume
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: feed-mongo-service
+spec:
+  selector:
+    app: feed-mongo
+  ports:
+    - name: mongo-port
+      protocol: TCP
+      port: 27017
+      targetPort: 27017
+  type: ClusterIP
diff --git a/gcloud/feed-mongo/feed-mongo-pvc.yaml b/gcloud/feed-mongo/feed-mongo-pvc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..923445b86c1231fdb9bc9881912829bcee74bc0f
--- /dev/null
+++ b/gcloud/feed-mongo/feed-mongo-pvc.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: feed-mongo-volume
+spec:
+  storageClassName: default-mongo
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
diff --git a/gcloud/feed-service/feed-service-autoscaler.yaml b/gcloud/feed-service/feed-service-autoscaler.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8bfa24c20778922fd0ef71bc08dee2152c757f21
--- /dev/null
+++ b/gcloud/feed-service/feed-service-autoscaler.yaml
@@ -0,0 +1,12 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: feed-backend-deployment-hpa
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: feed-backend-deployment
+  minReplicas: 1
+  maxReplicas: 3
+  targetCPUUtilizationPercentage: 80
diff --git a/gcloud/feed-service/feed-service-deployment.yaml b/gcloud/feed-service/feed-service-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..59e7f2c9d4aaf1d151b8897582a50e8b53cf5e6e
--- /dev/null
+++ b/gcloud/feed-service/feed-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: feed-backend-deployment
+spec:
+  selector:
+    matchLabels:
+      app: feed-backend
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: feed-backend
+    spec:
+      containers:
+        - name: feed-service
+          image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/feed-service:v1
+          ports:
+            - containerPort: 9000
+          env:
+            - name: MONGO_URI
+              value: "mongodb://feed-mongo-service:27017/"
+            - name: FRIEND_SERVICE_URI
+              value: "http://friend-backend-service:9000/"
+            - name: ENABLE_QUESTION_DB_SEEDING
+              value: "true"
+            - name: JWT_PRIVATE_KEY
+              value: "yB/uX5KdyjHN9P34IE49HxAcrlQ4gfvpVJEzGbo5E/I="
+            - name: PLAY_HTTP_SECRET_KEY
+              value: "DUvbrcM2AbuB7oXboI1x`ZI_?1Iou>/ch2@lFXfrvVkWlHuA848y?GyR/0i2Ma:A"
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: feed-backend-service
+spec:
+  selector:
+    app: feed-backend
+  ports:
+    - name: http
+      port: 9000
+      targetPort: 9000
+  type: ClusterIP
diff --git a/gcloud/friend-mongo/friend-mongo-deployment.yaml b/gcloud/friend-mongo/friend-mongo-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..80380df902b98443f4b19ca812ae08716606b5f3
--- /dev/null
+++ b/gcloud/friend-mongo/friend-mongo-deployment.yaml
@@ -0,0 +1,40 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: friend-mongo-deployment
+spec:
+  selector:
+    matchLabels:
+      app: friend-mongo
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: friend-mongo
+    spec:
+      containers:
+        - name: friend-mongo
+          image: mongo
+          ports:
+            - containerPort: 27017
+          volumeMounts:
+            - name: mongo-data
+              mountPath: /data/db
+      volumes:
+        - name: mongo-data
+          persistentVolumeClaim:
+            claimName: friend-mongo-volume
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: friend-mongo-service
+spec:
+  selector:
+    app: friend-mongo
+  ports:
+    - name: mongo-port
+      protocol: TCP
+      port: 27019
+      targetPort: 27017
+  type: ClusterIP
diff --git a/gcloud/friend-mongo/friend-mongo-pvc.yaml b/gcloud/friend-mongo/friend-mongo-pvc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..cb237340bc4f19982d43c0bebd1460b0c4033ca1
--- /dev/null
+++ b/gcloud/friend-mongo/friend-mongo-pvc.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: friend-mongo-volume
+spec:
+  storageClassName: default-mongo
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
diff --git a/gcloud/friend-service/friend-service-autoscaler.yaml b/gcloud/friend-service/friend-service-autoscaler.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1aab299fad3ee6bc82ecaa870f3430ee6966dc21
--- /dev/null
+++ b/gcloud/friend-service/friend-service-autoscaler.yaml
@@ -0,0 +1,12 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: friend-backend-deployment-hpa
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: friend-backend-deployment
+  minReplicas: 1
+  maxReplicas: 3
+  targetCPUUtilizationPercentage: 80
diff --git a/gcloud/friend-service/friend-service-deployment.yaml b/gcloud/friend-service/friend-service-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a6ab027fb41da3594ed09693ce1e3340b77822f5
--- /dev/null
+++ b/gcloud/friend-service/friend-service-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: friend-backend-deployment
+spec:
+  selector:
+    matchLabels:
+      app: friend-backend
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: friend-backend
+    spec:
+      containers:
+        - name: friend-service
+          image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/friend-service:v1
+          ports:
+            - containerPort: 9000
+          env:
+            - name: MONGO_HOST
+              value: "friend-mongo-service"
+            - name: MONGO_PORT
+              value: "27019"
+            - name: MONGO_DBNAME
+              value: "friends"
+            - name: JWT_PRIVATE_KEY
+              value: "yB/uX5KdyjHN9P34IE49HxAcrlQ4gfvpVJEzGbo5E/I="
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: friend-backend-service
+spec:
+  selector:
+    app: friend-backend
+  ports:
+    - name: http
+      port: 9000
+      targetPort: 9000
+  type: ClusterIP
diff --git a/gcloud/frontend-service/frontend-service-autoscaler.yaml b/gcloud/frontend-service/frontend-service-autoscaler.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..63215ac671198d7f35b595161c30f59c1d43bbc5
--- /dev/null
+++ b/gcloud/frontend-service/frontend-service-autoscaler.yaml
@@ -0,0 +1,12 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: frontend-deployment-hpa
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: frontend-deployment
+  minReplicas: 1
+  maxReplicas: 3
+  targetCPUUtilizationPercentage: 80
diff --git a/gcloud/frontend-service/frontend-service-deployment.yaml b/gcloud/frontend-service/frontend-service-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..bceeac19dd6ba3e627e7f2196b3fbf1e4d6eecc0
--- /dev/null
+++ b/gcloud/frontend-service/frontend-service-deployment.yaml
@@ -0,0 +1,32 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: frontend-deployment
+spec:
+  selector:
+    matchLabels:
+      app: frontend
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: frontend
+    spec:
+      containers:
+        - name: frontend-service
+          image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/frontend-service:v1
+          ports:
+            - containerPort: 3000
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: frontend-service
+spec:
+  selector:
+    app: frontend
+  ports:
+    - name: http
+      port: 80
+      targetPort: 3000
+  type: ClusterIP
diff --git a/gcloud/mongo-pv/mongo-pvc.yaml b/gcloud/mongo-pv/mongo-pvc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c3fb9eb50c6c580d02ec7ba0b6296d43a5b019e0
--- /dev/null
+++ b/gcloud/mongo-pv/mongo-pvc.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: mongo-volume
+spec:
+  storageClassName: default-mongo
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
diff --git a/gcloud/mongo-pv/mongo-storage-class.yaml b/gcloud/mongo-pv/mongo-storage-class.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fc36a95609f8095a1bce2ed9a5257b01d1789682
--- /dev/null
+++ b/gcloud/mongo-pv/mongo-storage-class.yaml
@@ -0,0 +1,12 @@
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: default-mongo
+provisioner: kubernetes.io/gce-pd
+volumeBindingMode: Immediate
+allowVolumeExpansion: true
+reclaimPolicy: Delete
+parameters:
+  type: pd-standard
+  fstype: ext4
+  replication-type: none
diff --git a/gcloud/nginx-service/nginx-service-autoscaler.yaml b/gcloud/nginx-service/nginx-service-autoscaler.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3ab00c760ec2dc2c223fe1eac554e9767eda66be
--- /dev/null
+++ b/gcloud/nginx-service/nginx-service-autoscaler.yaml
@@ -0,0 +1,12 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: nginx-deployment-hpa
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: nginx-deployment
+  minReplicas: 1
+  maxReplicas: 3
+  targetCPUUtilizationPercentage: 80
diff --git a/gcloud/nginx-service/nginx-service-deployment.yaml b/gcloud/nginx-service/nginx-service-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f470cb7333dd621a2d5b06002b3207c36a7c699e
--- /dev/null
+++ b/gcloud/nginx-service/nginx-service-deployment.yaml
@@ -0,0 +1,39 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: nginx-deployment
+spec:
+  selector:
+    matchLabels:
+      app: nginx
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+        - name: nginx
+          image: nginx:latest
+          volumeMounts:
+            - name: nginx-conf
+              mountPath: /etc/nginx/conf.d
+          ports:
+            - containerPort: 80
+      volumes:
+        - name: nginx-conf
+          configMap:
+            name: nginx-conf
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nginx-service
+spec:
+  selector:
+    app: nginx
+  ports:
+    - name: http
+      port: 80
+      targetPort: 80
+  type: LoadBalancer
diff --git a/gcloud/nginx-service/nginx.conf b/gcloud/nginx-service/nginx.conf
new file mode 100644
index 0000000000000000000000000000000000000000..eda407a6c1a0e8562aa0493508c49a543da177f9
--- /dev/null
+++ b/gcloud/nginx-service/nginx.conf
@@ -0,0 +1,68 @@
+upstream frontend-service {
+    server frontend-service:80; 
+}
+
+upstream user-service {
+    server user-backend-service:9000;
+}
+
+upstream friend-service {
+    server friend-backend-service:9000;
+}
+
+upstream feed-service {
+    server feed-backend-service:9000;
+}
+
+upstream comment-service {
+    server comment-backend-service:9000;
+}
+
+server {
+    listen 80;
+
+    location / {
+        rewrite ^//(.*) /$1 break;
+        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; 
+        proxy_pass http://frontend-service/;
+    }
+
+    location /api/user-service/ {
+        rewrite ^/user-service/(.*) /$1 break; # works for both /server1 and /server1/
+        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; 
+        proxy_pass http://user-service/;
+    }
+
+    location /api/friend-service/ {
+        rewrite ^/friend-service/(.*) /$1 break;
+        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; 
+        proxy_pass http://friend-service/;
+    }
+
+    location /api/feed-service/ {
+        rewrite ^/feed-service/(.*) /$1 break;
+        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; 
+        proxy_pass http://feed-service/;
+    }
+
+    location /api/comment-service/ {
+        rewrite ^/comment-service/(.*) /$1 break;
+        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; 
+        proxy_pass http://comment-service/;
+    }
+}
diff --git a/gcloud/user-mongo/user-mongo-deployment.yaml b/gcloud/user-mongo/user-mongo-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f9cae8254e78aeaa1bfd2745289d8ab4edfdeb21
--- /dev/null
+++ b/gcloud/user-mongo/user-mongo-deployment.yaml
@@ -0,0 +1,40 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: user-mongo-deployment
+spec:
+  selector:
+    matchLabels:
+      app: user-mongo
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: user-mongo
+    spec:
+      containers:
+        - name: user-mongo
+          image: mongo
+          ports:
+            - containerPort: 27017
+          volumeMounts:
+            - name: mongo-data
+              mountPath: /data/db
+      volumes:
+        - name: mongo-data
+          persistentVolumeClaim:
+            claimName: user-mongo-volume
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: user-mongo-service
+spec:
+  selector:
+    app: user-mongo
+  ports:
+    - name: mongo-port
+      protocol: TCP
+      port: 27018
+      targetPort: 27017
+  type: ClusterIP
diff --git a/gcloud/user-mongo/user-mongo-pvc.yaml b/gcloud/user-mongo/user-mongo-pvc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fdee261f9cce78711b836871b02cc274680f3639
--- /dev/null
+++ b/gcloud/user-mongo/user-mongo-pvc.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: user-mongo-volume
+spec:
+  storageClassName: default-mongo
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
diff --git a/gcloud/user-service/user-service-autoscaler.yaml b/gcloud/user-service/user-service-autoscaler.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..dd8c74071460ddd7ec5132c054841fd58baec03b
--- /dev/null
+++ b/gcloud/user-service/user-service-autoscaler.yaml
@@ -0,0 +1,12 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: user-backend-deployment-hpa
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: user-backend-deployment
+  minReplicas: 1
+  maxReplicas: 3
+  targetCPUUtilizationPercentage: 80
diff --git a/gcloud/user-service/user-service-deployment.yaml b/gcloud/user-service/user-service-deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0eda05aa68c63a7c722180b7d608df53ef7f758c
--- /dev/null
+++ b/gcloud/user-service/user-service-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: user-backend-deployment
+spec:
+  selector:
+    matchLabels:
+      app: user-backend
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: user-backend
+    spec:
+      containers:
+        - name: user-service
+          image: europe-west2-docker.pkg.dev/daily-384822/daily-repo/user-service:v1
+          ports:
+            - containerPort: 9000
+          env:
+            - name: MONGO_URI
+              value: "mongodb://user-mongo-service:27018/userdb"
+            - name: ENABLE_USER_DB_SEEDING
+              value: "true"
+            - name: SEEDED_ADMIN_PASSWORD
+              value: "doesntreallymatter"
+            - name: JWT_PRIVATE_KEY
+              value: "yB/uX5KdyjHN9P34IE49HxAcrlQ4gfvpVJEzGbo5E/I="
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: user-backend-service
+spec:
+  selector:
+    app: user-backend
+  ports:
+    - name: http
+      port: 9000
+      targetPort: 9000
+  type: ClusterIP