From f8dc9c9bb59b2d1533f6df049c94112f471c8ff9 Mon Sep 17 00:00:00 2001 From: dvirlabs Date: Wed, 25 Mar 2026 01:57:31 +0200 Subject: [PATCH] Update oramap to work with mongo --- charts/oramap-chart/Chart.yaml | 4 +- charts/oramap-chart/README.md | 72 ++++++++++++++++-- charts/oramap-chart/templates/deployment.yaml | 12 +-- .../templates/mongodb-service.yaml | 20 +++++ .../templates/mongodb-statefulset.yaml | 75 +++++++++++++++++++ charts/oramap-chart/values.yaml | 22 +++++- 6 files changed, 185 insertions(+), 20 deletions(-) create mode 100644 charts/oramap-chart/templates/mongodb-service.yaml create mode 100644 charts/oramap-chart/templates/mongodb-statefulset.yaml diff --git a/charts/oramap-chart/Chart.yaml b/charts/oramap-chart/Chart.yaml index 8e91c0a..39a679f 100644 --- a/charts/oramap-chart/Chart.yaml +++ b/charts/oramap-chart/Chart.yaml @@ -1,11 +1,11 @@ apiVersion: v2 name: oramap -description: Ora Map - Family Location Mapping Application (Microservices Architecture) +description: Ora Map - Family Location Mapping Application with MongoDB (Microservices Architecture) type: application # Chart version -version: 0.2.0 +version: 0.3.0 # Application version appVersion: "1.0.0" diff --git a/charts/oramap-chart/README.md b/charts/oramap-chart/README.md index 7693ff5..40c0132 100644 --- a/charts/oramap-chart/README.md +++ b/charts/oramap-chart/README.md @@ -4,10 +4,11 @@ Helm chart for deploying Ora Map application in Kubernetes with microservices ar ## Architecture -This chart deploys two main components: +This chart deploys three main components: -- **Backend**: Node.js Express API server (Port 3000) -- **Frontend**: Nginx serving static files (Port 80) +- **Backend**: Node.js Express API server with MongoDB integration (Port 3000) +- **Frontend**: Nginx serving static files with API proxy (Port 80) +- **MongoDB**: Database for storing family location data (Port 27017) ## Installation @@ -62,6 +63,13 @@ The following table lists the configurable parameters and their default values: | `ingress.enabled` | Enable ingress | `true` | | `ingress.className` | Ingress class name | `traefik` | | `ingress.hosts[0].host` | Ingress hostname | `oramap.dvirlabs.com` | +| `mongodb.enabled` | Enable MongoDB deployment | `true` | +| `mongodb.image.repository` | MongoDB image repository | `mongo` | +| `mongodb.image.tag` | MongoDB image tag | `7.0` | +| `mongodb.persistence.enabled` | Enable persistent storage | `true` | +| `mongodb.persistence.size` | PVC size | `5Gi` | +| `mongodb.persistence.storageClass` | Storage class name | `""` (default) | +| `mongodb.database` | Database name | `oramap` | ### Example Custom Values @@ -70,6 +78,12 @@ The following table lists the configurable parameters and their default values: backend: image: tag: "v1.0.0" +mongodb: + persistence: + enabled: true + size: 10Gi + storageClass: "fast-ssd" + replicaCount: 3 frontend: @@ -107,13 +121,55 @@ ingress: ### Services - **Backend Service**: Internal ClusterIP service on port 3000 -- **Frontend Service**: ClusterIP service on port 80 (exposed via Ingress) +- **Frontend Service**: ClusterIP -### Ingress +### MongoDB StatefulSet -- Routes external traffic to frontend service -- TLS/SSL termination support -- Configurable hostname and paths +- Persistent database storage for family data +- Health checks using mongosh +- Configurable storage size and class +- Automatic PVC creation + +## Database Setup + +### Initial Data Seeding + +After deployment, seed the database with initial family data: + +```bash +# Access the backend pod +kubectl exec -it deployment/oramap-backend -- sh + +# Run the seed script +npm run seed + +# Or force re-seed +npm run seed:force +``` + +### MongoDB Access + +```bash +# Port-forward to MongoDB +kubectl port-forward svc/oramap-mongodb 27017:27017 + +# Check StatefulSet +kubectl get statefulset oramap-mongodb +kubectl get pvc +``` + +### View Logs + +```bash +# Backend logs +kubectl logs -l app=oramap-backend + +# Frontend logs +kubectl logs -l app=oramap-frontend + +# MongoDB logs +kubectl logs oramap-mongodb-0 +``` ## CI/CD Integration diff --git a/charts/oramap-chart/templates/deployment.yaml b/charts/oramap-chart/templates/deployment.yaml index f3c8845..b6cd85c 100644 --- a/charts/oramap-chart/templates/deployment.yaml +++ b/charts/oramap-chart/templates/deployment.yaml @@ -24,10 +24,6 @@ spec: release: {{ .Release.Name }} component: backend spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} containers: - name: backend image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag }}" @@ -40,6 +36,10 @@ spec: value: "production" - name: PORT value: "{{ .Values.backend.containerPort }}" + {{- if .Values.mongodb.enabled }} + - name: MONGODB_URI + value: "mongodb://{{ include \"oramap.fullname\" . }}-mongodb:27017/{{ .Values.mongodb.database }}" + {{- end }} livenessProbe: httpGet: path: /api/health @@ -80,10 +80,6 @@ spec: release: {{ .Release.Name }} component: frontend spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} containers: - name: frontend image: "{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}" diff --git a/charts/oramap-chart/templates/mongodb-service.yaml b/charts/oramap-chart/templates/mongodb-service.yaml new file mode 100644 index 0000000..f8004ab --- /dev/null +++ b/charts/oramap-chart/templates/mongodb-service.yaml @@ -0,0 +1,20 @@ +{{- if .Values.mongodb.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "oramap.fullname" . }}-mongodb + labels: + {{- include "oramap.labels" . | nindent 4 }} + app.kubernetes.io/component: database +spec: + type: ClusterIP + clusterIP: None + ports: + - port: 27017 + targetPort: 27017 + protocol: TCP + name: mongodb + selector: + {{- include "oramap.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: database +{{- end }} diff --git a/charts/oramap-chart/templates/mongodb-statefulset.yaml b/charts/oramap-chart/templates/mongodb-statefulset.yaml new file mode 100644 index 0000000..832316d --- /dev/null +++ b/charts/oramap-chart/templates/mongodb-statefulset.yaml @@ -0,0 +1,75 @@ +{{- if .Values.mongodb.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "oramap.fullname" . }}-mongodb + labels: + {{- include "oramap.labels" . | nindent 4 }} + app.kubernetes.io/component: database +spec: + serviceName: {{ include "oramap.fullname" . }}-mongodb + replicas: 1 + selector: + matchLabels: + {{- include "oramap.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: database + template: + metadata: + labels: + {{- include "oramap.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: database + spec: + containers: + - name: mongodb + image: "{{ .Values.mongodb.image.repository }}:{{ .Values.mongodb.image.tag }}" + imagePullPolicy: {{ .Values.mongodb.image.pullPolicy }} + ports: + - name: mongodb + containerPort: 27017 + protocol: TCP + env: + - name: MONGO_INITDB_DATABASE + value: {{ .Values.mongodb.database }} + livenessProbe: + exec: + command: + - mongosh + - --eval + - "db.adminCommand('ping')" + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + readinessProbe: + exec: + command: + - mongosh + - --eval + - "db.adminCommand('ping')" + initialDelaySeconds: 10 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 3 + resources: + {{- toYaml .Values.mongodb.resources | nindent 12 }} + volumeMounts: + - name: data + mountPath: /data/db + {{- if .Values.mongodb.persistence.enabled }} + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: ["ReadWriteOnce"] + {{- if .Values.mongodb.persistence.storageClass }} + storageClassName: {{ .Values.mongodb.persistence.storageClass }} + {{- end }} + resources: + requests: + storage: {{ .Values.mongodb.persistence.size }} + {{- else }} + volumes: + - name: data + emptyDir: {} + {{- end }} +{{- end }} diff --git a/charts/oramap-chart/values.yaml b/charts/oramap-chart/values.yaml index 5824d51..7e5a009 100644 --- a/charts/oramap-chart/values.yaml +++ b/charts/oramap-chart/values.yaml @@ -1,7 +1,5 @@ replicaCount: 1 -imagePullSecrets: [] - # Backend API configuration backend: image: @@ -43,6 +41,26 @@ service: port: 80 targetPort: 80 +# MongoDB configuration +mongodb: + enabled: true + image: + repository: mongo + tag: "7.0" + pullPolicy: IfNotPresent + persistence: + enabled: true + storageClass: "" + size: 5Gi + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 100m + memory: 256Mi + database: oramap + ingress: enabled: true className: "traefik"