Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added app-running.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 5 additions & 5 deletions exam-code/docker/be/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Dockerfile for Backend Service
FROM python:3.12-slim

WORKDIR /app



COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY src ./src

EXPOSE 5001

CMD ["python", "main.py"]

EXPOSE 5001
CMD ["python", "src/main.py"]
33 changes: 30 additions & 3 deletions exam-code/docker/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,36 @@
services:
web:

build:
context: ./fe
ports:
- "5002:5002"
depends_on:
- backend-service
networks:
- app-net

backend-service:

build:
context: ./be
ports:
- "5001:5001"
environment:
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
depends_on:
- mysqldb
networks:
- app-net

mysqldb:

image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
networks:
- app-net

networks:
app-net:
driver: bridge
9 changes: 5 additions & 4 deletions exam-code/docker/fe/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# Dockerfile for Frontend Service
FROM python:3.12-slim

WORKDIR /app



COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY src ./src

EXPOSE 5002

CMD ["python", "main.py"]

CMD ["python", "src/main.py"]
6 changes: 6 additions & 0 deletions exam-code/helm/backend/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: v2
name: backend
description: Helm chart for the backend service
type: application
version: 0.1.0
appVersion: "1.0"
11 changes: 11 additions & 0 deletions exam-code/helm/backend/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{{- define "backend.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{- define "backend.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name (include "backend.name" .) | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
43 changes: 43 additions & 0 deletions exam-code/helm/backend/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "backend.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "backend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "backend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "backend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: backend
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.containerPort }}
env:
- name: MYSQL_HOST
value: {{ .Values.mysql.host | quote }}
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_USER
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_PASSWORD
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_DATABASE
12 changes: 12 additions & 0 deletions exam-code/helm/backend/templates/secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ .Values.secret.name }}
labels:
app.kubernetes.io/name: {{ include "backend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
type: Opaque
stringData:
MYSQL_USER: {{ .Values.mysql.user | quote }}
MYSQL_PASSWORD: {{ .Values.mysql.password | quote }}
MYSQL_DATABASE: {{ .Values.mysql.database | quote }}
15 changes: 15 additions & 0 deletions exam-code/helm/backend/templates/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "backend.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "backend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
selector:
app.kubernetes.io/name: {{ include "backend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.containerPort }}
24 changes: 24 additions & 0 deletions exam-code/helm/backend/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Number of backend replicas.
replicaCount: 2

image:
repository: be
tag: latest
pullPolicy: IfNotPresent

service:
type: ClusterIP
port: 5001

containerPort: 5001

# Database connection info and credentials for the backend secret.
mysql:
host: mysqldb
user: "CHANGE_ME"
password: "CHANGE_ME"
database: "CHANGE_ME"

# Name of the secret created for backend DB credentials.
secret:
name: backend-secrets
6 changes: 6 additions & 0 deletions exam-code/helm/frontend/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: v2
name: frontend
description: Helm chart for the frontend service
type: application
version: 0.1.0
appVersion: "1.0"
11 changes: 11 additions & 0 deletions exam-code/helm/frontend/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{{- define "frontend.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{- define "frontend.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name (include "frontend.name" .) | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
25 changes: 25 additions & 0 deletions exam-code/helm/frontend/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "frontend.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "frontend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "frontend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "frontend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: frontend
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.containerPort }}
15 changes: 15 additions & 0 deletions exam-code/helm/frontend/templates/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "frontend.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "frontend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
selector:
app.kubernetes.io/name: {{ include "frontend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.containerPort }}
12 changes: 12 additions & 0 deletions exam-code/helm/frontend/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
replicaCount: 2

image:
repository: fe
tag: latest
pullPolicy: IfNotPresent

service:
type: LoadBalancer
port: 5002

containerPort: 5002
6 changes: 6 additions & 0 deletions exam-code/helm/mysql/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: v2
name: mysql
description: Helm chart for the MySQL database
type: application
version: 0.1.0
appVersion: "5.7"
11 changes: 11 additions & 0 deletions exam-code/helm/mysql/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{{- define "mysql.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{- define "mysql.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name (include "mysql.name" .) | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
46 changes: 46 additions & 0 deletions exam-code/helm/mysql/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "mysql.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "mysql.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "mysql.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "mysql.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: mysql
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.containerPort }}
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_DATABASE
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_USER
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.secret.name }}
key: MYSQL_PASSWORD
13 changes: 13 additions & 0 deletions exam-code/helm/mysql/templates/secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ .Values.secret.name }}
labels:
app.kubernetes.io/name: {{ include "mysql.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
type: Opaque
stringData:
MYSQL_ROOT_PASSWORD: {{ .Values.auth.rootPassword | quote }}
MYSQL_DATABASE: {{ .Values.auth.database | quote }}
MYSQL_USER: {{ .Values.auth.user | quote }}
MYSQL_PASSWORD: {{ .Values.auth.password | quote }}
15 changes: 15 additions & 0 deletions exam-code/helm/mysql/templates/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "mysql.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "mysql.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
selector:
app.kubernetes.io/name: {{ include "mysql.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.containerPort }}
24 changes: 24 additions & 0 deletions exam-code/helm/mysql/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Number of mysql replicas.
replicaCount: 1

image:
repository: mysql
tag: "5.7"
pullPolicy: IfNotPresent

service:
type: ClusterIP
port: 3306

containerPort: 3306

# Database credentials for the mysql secret.
auth:
rootPassword: "CHANGE_ME"
database: "CHANGE_ME"
user: "CHANGE_ME"
password: "CHANGE_ME"

# Name of the secret created for mysql credentials.
secret:
name: mysql-secrets
Loading