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
22 changes: 11 additions & 11 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
version: "3.8"
services:
mysql:
image: mysql:latest
container_name: mysql
postgres:
image: postgres:15
container_name: postgres
environment:
- MYSQL_ROOT_PASSWORD=Test@123
- MYSQL_DATABASE=BankDB
- POSTGRES_PASSWORD=Test@123
- POSTGRES_DB=BankDB
volumes:
- bankapp-volume:/var/lib/mysql
- bankapp-volume:/var/lib/postgresql/data
networks:
- bankapp
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 3
Expand All @@ -21,13 +21,13 @@ services:
image: ${DUSER}/${IMAGE}
container_name: Bankapp
environment:
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/BankDB
- SPRING_DATASOURCE_PASSWORD=Test@123
ports:
- "8080:8080"
depends_on:
mysql:
postgres:
condition: service_healthy
networks:
- bankapp
Expand All @@ -43,4 +43,4 @@ networks:
bankapp:

volumes:
bankapp-volume:
bankapp-volume:
6 changes: 3 additions & 3 deletions helm/bankapp/templates/configMap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ metadata:
name: {{ .Values.configmap.name }}
namespace: {{ default "bankapp-namespace" .Values.namespace }}
data:
MYSQL_DATABASE: {{ .Values.configmap.data.MYSQL_DATABASE }}
SPRING_DATASOURCE_URL: jdbc:mysql://{{ .Values.db_statefulset.name }}-0.{{ .Values.db_statefulset.name }}-headless.{{ default "bankapp-namespace" .Values.namespace }}.svc.cluster.local:3306/{{ .Values.configmap.data.MYSQL_DATABASE }}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: {{ .Values.configmap.data.SPRING_DATASOURCE_USERNAME }}
POSTGRES_DB: {{ .Values.configmap.data.POSTGRES_DB }}
SPRING_DATASOURCE_URL: jdbc:postgresql://{{ .Values.db_statefulset.name }}-0.{{ .Values.db_statefulset.name }}-headless.{{ default "bankapp-namespace" .Values.namespace }}.svc.cluster.local:5432/{{ .Values.configmap.data.POSTGRES_DB }}
SPRING_DATASOURCE_USERNAME: {{ .Values.configmap.data.SPRING_DATASOURCE_USERNAME }}

4 changes: 2 additions & 2 deletions helm/bankapp/templates/deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ spec:
initContainers:
- name: "wait-for-{{ .Values.db_statefulset.name }}"
image: busybox:1.28
command: ['sh', '-c', 'until nc -z {{ .Values.db_statefulset.name }}-0.{{ .Values.db_statefulset.name }}-headless 3306; do echo waiting for mysql; sleep 5; done;']
command: ['sh', '-c', 'until nc -z {{ .Values.db_statefulset.name }}-0.{{ .Values.db_statefulset.name }}-headless 5432; do echo waiting for postgres; sleep 5; done;']
containers:
- name: {{ .Values.app_deployment.name }}
image: {{ .Values.image.app }}
Expand All @@ -38,7 +38,7 @@ spec:
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
name: postgres-secret
key: SPRING_DATASOURCE_PASSWORD
livenessProbe:
httpGet:
Expand Down
4 changes: 2 additions & 2 deletions helm/bankapp/templates/mysqlService.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ spec:
app: {{ .Values.db_statefulset.name }}
ports:
- protocol: TCP
port: {{ default "3306" .Values.mysql_svc.port}}
targetPort: {{ default "3306" .Values.mysql_svc.targetPort}}
port: {{ default "5432" .Values.postgres_svc.port}}
targetPort: {{ default "5432" .Values.postgres_svc.targetPort}}
30 changes: 14 additions & 16 deletions helm/bankapp/templates/mysqlStatefulSet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,37 +20,35 @@ spec:
- name: {{ .Values.db_statefulset.name }}
image: {{ .Values.image.db }}
ports:
- containerPort: 3306
- containerPort: 5432
env:
- name: MYSQL_ROOT_PASSWORD
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef: ### CRITICAL
name: mysql-secret ### CRITICAL
key: MYSQL_ROOT_PASSWORD ### CRITICAL
- name: MYSQL_DATABASE
secretKeyRef:
name: postgres-secret
key: POSTGRES_PASSWORD
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: {{ .Values.configmap.name }}
key: MYSQL_DATABASE
key: POSTGRES_DB
volumeMounts:
- name: "{{ .Values.db_statefulset.name }}-data"
mountPath: /var/lib/mysql
mountPath: /var/lib/postgresql/data
livenessProbe:
exec:
command:
- mysqladmin
- ping
- -h
- localhost
- pg_isready
- -U
- postgres
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
exec:
command:
- mysqladmin
- ping
- -h
- localhost
- pg_isready
- -U
- postgres
initialDelaySeconds: 10
periodSeconds: 5
volumeClaimTemplates:
Expand Down
2 changes: 1 addition & 1 deletion helm/bankapp/templates/persistentVolume.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ spec:
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: "/tmp/bankapp-mysql" # This will be stored on the host machine running KIND
path: "/tmp/bankapp-postgres"
2 changes: 1 addition & 1 deletion helm/bankapp/templates/secrets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ metadata:
namespace: {{ default "bankapp-namespace" .Values.namespace }}
type: Opaque
data:
MYSQL_ROOT_PASSWORD: {{ .Values.secret.data.MYSQL_ROOT_PASSWORD | b64enc | quote }}
POSTGRES_PASSWORD: {{ .Values.secret.data.POSTGRES_PASSWORD | b64enc | quote }}
SPRING_DATASOURCE_PASSWORD: {{ .Values.secret.data.SPRING_DATASOURCE_PASSWORD | b64enc | quote }}
20 changes: 10 additions & 10 deletions helm/bankapp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ namespace: bankapp-namespace
configmap:
name: bankapp-config
data:
MYSQL_DATABASE: BankDB
SPRING_DATASOURCE_USERNAME: root
POSTGRES_DB: BankDB
SPRING_DATASOURCE_USERNAME: postgres

## name, label and storage size for database
db_statefulset:
name: mysql
name: postgres
storage: 5Gi

## name and label of app deployment
Expand All @@ -24,7 +24,7 @@ app_deployment:
## image repository and tag of app and db.
image:
app: trainwithshubham/springboot-bankapp:latest
db: mysql:latest
db: postgres:15

# NodePort svc for bankapp
bankapp_svc:
Expand All @@ -34,9 +34,9 @@ bankapp_svc:


# headless svc configuration for db
mysql_svc:
port: 3306
targetPort: 3306
postgres_svc:
port: 5432
targetPort: 5432

# HPA minimun and maximum pods and average cpu utilization
hpa:
Expand All @@ -47,8 +47,8 @@ hpa:
# Secret for Database connectivity

secret:
name: mysql-secret
name: postgres-secret
data:
MYSQL_ROOT_PASSWORD: Test@123 # (Base64 encoded 'Test@123')
SPRING_DATASOURCE_PASSWORD: Test@123 # (Base64 encoded 'Test@123')
POSTGRES_PASSWORD: Test@123
SPRING_DATASOURCE_PASSWORD: Test@123

6 changes: 3 additions & 3 deletions kubernetes/bankapp-deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ spec:
configMapKeyRef:
name: bankapp-config
key: SPRING_DATASOURCE_USERNAME
- name: MYSQL_DATABASE
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: bankapp-config
key: MYSQL_DATABASE
key: POSTGRES_DB
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
name: postgres-secret
key: SPRING_DATASOURCE_PASSWORD
# readinessProbe:
# httpGet:
Expand Down
6 changes: 3 additions & 3 deletions kubernetes/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ metadata:
name: bankapp-config
namespace: bankapp-namespace
data:
MYSQL_DATABASE: BankDB
SPRING_DATASOURCE_URL: jdbc:mysql://mysql-svc.bankapp-namespace.svc.cluster.local:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
POSTGRES_DB: BankDB
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres-svc.bankapp-namespace.svc.cluster.local:5432/BankDB
SPRING_DATASOURCE_USERNAME: postgres
34 changes: 17 additions & 17 deletions kubernetes/mysql-deployment.yml
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
name: postgres
namespace: bankapp-namespace
labels:
app: mysql
app: postgres
spec:
replicas: 1
selector:
matchLabels:
app: mysql
app: postgres
template:
metadata:
labels:
app: mysql
app: postgres
spec:
containers:
- name: mysql
image: mysql:8.0 # Use a specific, stable version for production
- name: postgres
image: postgres:15
ports:
- containerPort: 3306
- containerPort: 5432
env:
- name: MYSQL_ROOT_PASSWORD
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_DATABASE
name: postgres-secret
key: POSTGRES_PASSWORD
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: bankapp-config
key: MYSQL_DATABASE
key: POSTGRES_DB
volumeMounts:
- name: mysql-pv-storage
mountPath: /var/lib/mysql
subPath: mysql-data # Optional: Ensure a subdirectory is used for better volume organization
- name: postgres-pv-storage
mountPath: /var/lib/postgresql/data
subPath: postgres-data
volumes:
- name: mysql-pv-storage
- name: postgres-pv-storage
persistentVolumeClaim:
claimName: mysql-pvc
claimName: postgres-pvc

10 changes: 5 additions & 5 deletions kubernetes/mysql-service.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
name: postgres-svc
namespace: bankapp-namespace
labels:
app: mysql
app: postgres
spec:
selector:
app: mysql
app: postgres
ports:
- protocol: TCP
port: 3306
targetPort: 3306
port: 5432
targetPort: 5432
2 changes: 1 addition & 1 deletion kubernetes/persistent-volume-claim.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
name: postgres-pvc
namespace: bankapp-namespace
spec:
accessModes:
Expand Down
8 changes: 4 additions & 4 deletions kubernetes/persistent-volume.yaml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
name: postgres-pv
namespace: bankapp-namespace
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Keeps the PV after the PVC is deleted
storageClassName: standard # Make sure this matches your cluster's default storage class
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
hostPath:
path: /mnt/data/mysql
path: /mnt/data/postgres
type: DirectoryOrCreate
4 changes: 2 additions & 2 deletions kubernetes/secrets.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
name: postgres-secret
namespace: bankapp-namespace
type: Opaque
data:
MYSQL_ROOT_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123"
POSTGRES_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123"
SPRING_DATASOURCE_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123"

11 changes: 5 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,11 @@
<artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
Expand Down
10 changes: 5 additions & 5 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
spring.application.name=bankapp
# MySQL Database configuration
spring.datasource.url=jdbc:mysql://localhost:3306/bankappdb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
# PostgreSQL Database configuration
spring.datasource.url=jdbc:postgresql://localhost:5432/bankappdb
spring.datasource.username=postgres
spring.datasource.password=Test@123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=org.postgresql.Driver

# JPA & Hibernate configuration
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=true