This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new f94c0e7329 FINERACT-2421: Fix kubernetes minikube example configuration
f94c0e7329 is described below
commit f94c0e732909f97af5dc1bc8d12642b2b05626b0
Author: Dömötör D. Lugosi <[email protected]>
AuthorDate: Thu Dec 18 13:50:25 2025 +0100
FINERACT-2421: Fix kubernetes minikube example configuration
---
README.md | 28 ++++++++++
kubernetes/fineract-mifoscommunity-deployment.yml | 66 +++++++++++++++++++++--
kubernetes/fineract-server-deployment.yml | 24 +++++----
kubernetes/fineractmysql-deployment.yml | 4 +-
kubernetes/kubectl-shutdown.sh | 22 ++++++--
kubernetes/kubectl-startup.sh | 65 +++++++++++-----------
6 files changed, 157 insertions(+), 52 deletions(-)
diff --git a/README.md b/README.md
index 8c4883ef97..ff11bc4b68 100644
--- a/README.md
+++ b/README.md
@@ -203,6 +203,26 @@ git clone https://github.com/apache/fineract.git
cd fineract/kubernetes
minikube start
./kubectl-startup.sh
+```
+
+Wait for all pods to be ready:
+```bash
+kubectl get pods -w
+```
+
+Once all pods are running, access the Mifos web application:
+```bash
+minikube service mifos-community
+```
+
+This opens the Mifos X web application in your browser. The nginx reverse
proxy in the mifos-community pod forwards API requests to the fineract-server
backend.
+
+**Default credentials:**
+- Username: `mifos`
+- Password: `password`
+
+You can also access the Fineract API directly:
+```bash
minikube service fineract-server --url --https
```
@@ -210,14 +230,22 @@ Fineract is now running at the printed URL, which you can
check e.g. using:
```bash
http --verify=no --timeout 240 --check-status get $(minikube service
fineract-server --url --https)/fineract-provider/actuator/health
```
+
To check the status of your containers on your local minikube Kubernetes
cluster, run:
```bash
minikube dashboard
```
+
You can check Fineract logs using:
```bash
kubectl logs deployment/fineract-server
```
+
+You can check Mifos web app logs using:
+```bash
+kubectl logs deployment/mifos-community
+```
+
To shutdown and reset your cluster, run:
```bash
./kubectl-shutdown.sh
diff --git a/kubernetes/fineract-mifoscommunity-deployment.yml
b/kubernetes/fineract-mifoscommunity-deployment.yml
index eeb13fc1b7..7aba7e16b2 100644
--- a/kubernetes/fineract-mifoscommunity-deployment.yml
+++ b/kubernetes/fineract-mifoscommunity-deployment.yml
@@ -17,6 +17,45 @@
#
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: web-app-config
+data:
+ environment.json: |
+ {
+ "fineractApiUrls": ["/fineract-provider"],
+ "oauth": {
+ "enabled": false
+ },
+ "defaultLanguage": "en-US",
+ "supportedLanguages": ["en-US", "es-MX"],
+ "preloadClients": true
+ }
+ nginx.conf: |
+ server {
+ listen 80;
+ server_name localhost;
+ root /usr/share/nginx/html;
+ index index.html;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+
+ location /fineract-provider/ {
+ proxy_pass https://fineract-server:8443/fineract-provider/;
+ proxy_ssl_verify off;
+ 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 https;
+ proxy_redirect https:// http://;
+ }
+ }
+
+---
+
apiVersion: v1
kind: Service
metadata:
@@ -60,7 +99,7 @@ spec:
command: ['sh', '-c', 'echo -e "Checking for the availability of
Fineract server deployment"; while ! nc -z "fineract-server" 8443; do sleep 1;
printf "-"; done; echo -e " >> Fineract server has started";']
containers:
- name: mifos-community
- image: openmf/community-app:latest
+ image: openmf/web-app:master
resources:
limits:
cpu: "1000m"
@@ -68,18 +107,35 @@ spec:
requests:
cpu: "200m"
memory: "0.5Gi"
+ volumeMounts:
+ - name: web-app-config
+ mountPath: /usr/share/nginx/html/assets/configuration
+ readOnly: true
+ - name: nginx-config
+ mountPath: /etc/nginx/conf.d/default.conf
+ subPath: nginx.conf
+ readOnly: true
livenessProbe:
httpGet:
path: /
port: 80
- initialDelaySeconds: 90
- periodSeconds: 1
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 80
- initialDelaySeconds: 90
- periodSeconds: 1
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ failureThreshold: 3
ports:
- containerPort: 80
name: mifos-community
+ volumes:
+ - name: web-app-config
+ configMap:
+ name: web-app-config
+ - name: nginx-config
+ configMap:
+ name: web-app-config
diff --git a/kubernetes/fineract-server-deployment.yml
b/kubernetes/fineract-server-deployment.yml
index ec937dda51..25e49fd37e 100644
--- a/kubernetes/fineract-server-deployment.yml
+++ b/kubernetes/fineract-server-deployment.yml
@@ -64,22 +64,26 @@ spec:
resources:
limits:
cpu: "1000m"
- memory: "1Gi"
+ memory: "2Gi"
requests:
cpu: "200m"
- memory: "0.5Gi"
+ memory: "1Gi"
livenessProbe:
httpGet:
path: /fineract-provider/actuator/health/liveness
- port: 8080
- initialDelaySeconds: 180
- periodSeconds: 1
+ port: 8443
+ scheme: HTTPS
+ initialDelaySeconds: 90
+ periodSeconds: 10
+ failureThreshold: 3
readinessProbe:
httpGet:
path: /fineract-provider/actuator/health/readiness
- port: 8080
- initialDelaySeconds: 180
- periodSeconds: 1
+ port: 8443
+ scheme: HTTPS
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ failureThreshold: 3
env:
- name: FINERACT_NODE_ID
value: '1'
@@ -113,8 +117,10 @@ spec:
key: password
- name: FINERACT_DEFAULT_TENANTDB_CONN_PARAMS
value: ''
+ - name: FINERACT_SERVER_PORT
+ value: "8443"
- name: JAVA_TOOL_OPTIONS
- value: '-Xmx1G'
+ value: '-Xmx1G -XX:MaxMetaspaceSize=256m'
ports:
- containerPort: 8443
name: fineract-server
diff --git a/kubernetes/fineractmysql-deployment.yml
b/kubernetes/fineractmysql-deployment.yml
index a0b4b35f72..c9da4518f7 100644
--- a/kubernetes/fineractmysql-deployment.yml
+++ b/kubernetes/fineractmysql-deployment.yml
@@ -103,7 +103,7 @@ spec:
key: password
livenessProbe:
exec:
- command: ["sh","-c","mysqladmin ping -h localhost -uroot
-p${MARIADB_ROOT_PASSWORD}"]
+ command: ["sh","-c","mariadb -uroot -p${MARIADB_ROOT_PASSWORD}
-e 'SELECT 1'"]
failureThreshold: 10
timeoutSeconds: 10
readinessProbe:
@@ -111,7 +111,7 @@ spec:
command:
- sh
- -c
- - mysqladmin ping -uroot -p${MARIADB_ROOT_PASSWORD}
+ - mariadb -uroot -p${MARIADB_ROOT_PASSWORD} -e 'SELECT 1'
failureThreshold: 10
initialDelaySeconds: 5
periodSeconds: 5
diff --git a/kubernetes/kubectl-shutdown.sh b/kubernetes/kubectl-shutdown.sh
index 8d64d2395e..09fffea368 100755
--- a/kubernetes/kubectl-shutdown.sh
+++ b/kubernetes/kubectl-shutdown.sh
@@ -18,8 +18,20 @@
# under the License.
#
-kubectl delete secret fineract-tenants-db-secret
-kubectl delete -f fineractmysql-configmap.yml
-kubectl delete -f fineractmysql-deployment.yml
-kubectl delete -f fineract-server-deployment.yml
-kubectl delete -f fineract-mifoscommunity-deployment.yml
+echo "Shutting down Fineract Kubernetes deployment..."
+
+echo "Deleting mifos-community..."
+kubectl delete -f fineract-mifoscommunity-deployment.yml
--ignore-not-found=true
+
+echo "Deleting fineract-server..."
+kubectl delete -f fineract-server-deployment.yml --ignore-not-found=true
+
+echo "Deleting fineractmysql..."
+kubectl delete -f fineractmysql-deployment.yml --ignore-not-found=true
+kubectl delete -f fineractmysql-configmap.yml --ignore-not-found=true
+
+echo "Deleting secrets..."
+kubectl delete secret fineract-tenants-db-secret --ignore-not-found=true
+
+echo
+echo "Fineract Kubernetes deployment has been shut down."
diff --git a/kubernetes/kubectl-startup.sh b/kubernetes/kubectl-startup.sh
index 8ca9055f40..477e47e994 100755
--- a/kubernetes/kubectl-startup.sh
+++ b/kubernetes/kubectl-startup.sh
@@ -18,53 +18,56 @@
# under the License.
#
-echo "Setting Up Fineract service configuration..."
-kubectl create secret generic fineract-tenants-db-secret
--from-literal=username=root --from-literal=password=$(head /dev/urandom |
LC_CTYPE=C tr -dc A-Za-z0-9 | head -c 16)
+set -e
+
+echo "Setting up Fineract service configuration..."
+kubectl create secret generic fineract-tenants-db-secret
--from-literal=username=root --from-literal=password=$(head /dev/urandom |
LC_CTYPE=C tr -dc A-Za-z0-9 | head -c 16) 2>/dev/null || echo "Secret already
exists, skipping..."
kubectl apply -f fineractmysql-configmap.yml
echo
echo "Starting fineractmysql..."
kubectl apply -f fineractmysql-deployment.yml
-fineractmysql_pod=""
-while [[ ${#fineractmysql_pod} -eq 0 ]]; do
- fineractmysql_pod=$(kubectl get pods -l tier=fineractmysql --template
'{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
-done
-
-fineractmysql_status=$(kubectl get pods ${fineractmysql_pod} --no-headers -o
custom-columns=":status.phase")
-while [[ ${fineractmysql_status} -ne 'Running' ]]; do
- sleep 1
- fineractmysql_status=$(kubectl get pods ${fineractmysql_pod} --no-headers
-o custom-columns=":status.phase")
-done
+echo "Waiting for fineractmysql to be ready..."
+kubectl wait --for=condition=ready pod -l tier=fineractmysql --timeout=300s
echo
echo "Starting fineract server..."
kubectl apply -f fineract-server-deployment.yml
-fineract_server_pod=""
-while [[ ${#fineract_server_pod} -eq 0 ]]; do
- fineract_server_pod=$(kubectl get pods -l tier=backend --template '{{range
.items}}{{.metadata.name}}{{"\n"}}{{end}}')
-done
-
-fineract_server_status=$(kubectl get pods ${fineract_server_pod} --no-headers
-o custom-columns=":status.phase")
-while [[ ${fineract_server_status} -ne 'Running' ]]; do
- sleep 1
- fineract_server_status=$(kubectl get pods ${fineract_server_pod}
--no-headers -o custom-columns=":status.phase")
-done
+echo "Waiting for fineract-server to be ready..."
+kubectl wait --for=condition=ready pod -l app=fineract-server --timeout=300s
echo "Fineract server is up and running"
+echo
echo "Starting Mifos Community UI..."
kubectl apply -f fineract-mifoscommunity-deployment.yml
-fineract_mifoscommunity_pod=""
-while [[ ${#fineract_mifoscommunity_pod} -eq 0 ]]; do
- fineract_mifoscommunity_pod=$(kubectl get pods -l tier=backend --template
'{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
-done
+echo "Waiting for mifos-community to be ready..."
+kubectl wait --for=condition=ready pod -l app=mifos-community --timeout=300s
-fineract_mifoscommunity_status=$(kubectl get pods
${fineract_mifoscommunity_pod} --no-headers -o custom-columns=":status.phase")
-while [[ ${fineract_mifoscommunity_status} -ne 'Running' ]]; do
- sleep 1
- fineract_mifoscommunity_status=$(kubectl get pods
${fineract_mifoscommunity_pod} --no-headers -o custom-columns=":status.phase")
-done
echo "Mifos Community UI is up and running"
+
+echo
+echo "============================================"
+echo "Fineract Kubernetes deployment is ready!"
+echo "============================================"
+echo
+echo "To access the Mifos web application:"
+echo " minikube service mifos-community"
+echo
+echo "To access the Fineract API directly:"
+echo " minikube service fineract-server --url --https"
+echo
+echo "Default credentials:"
+echo " Username: mifos"
+echo " Password: password"
+echo
+echo "To check pod status:"
+echo " kubectl get pods"
+echo
+echo "To view logs:"
+echo " kubectl logs deployment/fineract-server"
+echo " kubectl logs deployment/mifos-community"
+echo