Update oramap to work with mongo
This commit is contained in:
parent
01e6b3d1c7
commit
f8dc9c9bb5
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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 }}"
|
||||
|
||||
20
charts/oramap-chart/templates/mongodb-service.yaml
Normal file
20
charts/oramap-chart/templates/mongodb-service.yaml
Normal file
@ -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 }}
|
||||
75
charts/oramap-chart/templates/mongodb-statefulset.yaml
Normal file
75
charts/oramap-chart/templates/mongodb-statefulset.yaml
Normal file
@ -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 }}
|
||||
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user