This guide explains how to integrate the newer ph-ee-operations-web (v1.26.0-gazelle-1.2.0-beta) with your existing mifos-gazelle Kubernetes deployment using hostPath mounting.
✅ Tenant Selector UI Component - Runtime tenant switching between greenbank, bluebank, and redbank
✅ Multi-tenant Support - Reads PH_PLATFORM_TENANT_IDS and displays all tenants in dropdown
✅ Local Storage - Remembers selected tenant in browser localStorage
- Local Development: Angular app built on your host machine
- Kubernetes Integration: Built dist/ folder mounted via hostPath into nginx container
- Live Updates: Rebuild and pod will serve new files automatically
cd ~/ph-ee-operations-web
./build-for-k8s.shThis will:
- Export all required environment variables
- Install npm dependencies (if needed)
- Build production-ready Angular app to
dist/directory
The helm values have been configured to mount your local build:
operations_web:
deployment:
extraVolumeMounts:
- name: ops-web-dist
mountPath: /usr/share/nginx/html
extraVolumes:
- name: ops-web-dist
hostPath:
path: /home/tdaly/ph-ee-operations-web/dist
type: DirectoryApply the changes:
cd ~/mifos-gazelle
helm upgrade ph-ee-engine ./repos/ph_template/helm/ph-ee-engine \
--namespace paymenthub \
-f config/ph_values.yamlkubectl rollout status deployment/ph-ee-operations-web -n paymenthubOpen your browser to: https://ops.mifos.gazelle.localhost
Login credentials:
- Username:
mifos - Password:
password
Look for the tenant selector in the UI header (building icon with dropdown). You can now switch between:
- greenbank
- bluebank
- redbank
PH_PLATFORM_TENANT_ID: Default tenant (greenbank)PH_PLATFORM_TENANT_IDS: Comma-separated list of all tenantsPH_OPS_BACKEND_SERVER_URL: Operations app backend APIPH_OPS_BULK_CONNECTOR_URL: Bulk processor API- And many more...
Located at: ~/mifos-gazelle/config/ph_values.yaml
Key sections modified:
operations_web.deployment.extraVolumeMounts: Mount point configurationoperations_web.deployment.extraVolumes: hostPath source configurationoperations_web.backend.PH_PLATFORM_TENANT_IDS: Tenant list
Modified to support:
extraVolumeMountsfor custom volume mountsextraVolumesfor hostPath volumes
cd ~/ph-ee-operations-web
./build-for-k8s.sh
# Pod will automatically serve new files
# No helm upgrade needed, just wait a moment and hard refresh browserEdit build-for-k8s.sh and modify:
export PH_PLATFORM_TENANT_IDS=greenbank,bluebank,redbank,newbankThen rebuild:
./build-for-k8s.shHard refresh browser (Ctrl+Shift+R) to see new tenant list.
- Check browser console for errors (F12)
- Verify environment:
window.env.platformTenantIds - Ensure you're on the correct branch:
Should show:
cd ~/ph-ee-operations-web && git branch
* v1.26.0-gazelle-1.2.0-beta
cd ~/ph-ee-operations-web
rm -rf node_modules package-lock.json
npm install
./build-for-k8s.sh# Check pod volumes
kubectl describe pod -n paymenthub -l app=ph-ee-operations-web
# Look for:
# Volumes:
# ops-web-dist:
# Type: HostPath (bare host directory volume)
# Path: /home/tdaly/ph-ee-operations-web/dist# Restart the pod
kubectl delete pod -n paymenthub -l app=ph-ee-operations-web
# Wait for new pod
kubectl wait --for=condition=ready pod -n paymenthub -l app=ph-ee-operations-webLocation: src/app/shared/tenant-selector/
- HTML: Material Design dropdown with building icon
- TypeScript: Reads from SettingsService, stores selection in localStorage
- Behavior: Only enabled when
tenants.length > 1
Location: src/app/settings/settings.service.ts
Methods:
setTenantIdentifier(id): Sets current tenantget tenantIdentifiers(): Gets list of available tenants from localStorage- Reads from
window['env']['platformTenantIds']
- ✅
/home/tdaly/ph-ee-operations-web/build-for-k8s.sh(new) - ✅
/home/tdaly/ph-ee-operations-web/.env.local(new) - ✅
/home/tdaly/mifos-gazelle/config/ph_values.yaml(modified) - ✅
/home/tdaly/mifos-gazelle/repos/ph_template/helm/ph-ee-engine/operations-web/templates/deployment.yaml(modified)
- Run
./build-for-k8s.shto build the app - Apply helm upgrade
- Test tenant selector with redbank batches
- ✅ No Docker image building required
- ✅ Fast iteration - just rebuild and refresh
- ✅ Full Kubernetes integration
- ✅ Production-like environment
- ✅ Easy to switch back to official image (comment out hostPath in values)
To go back to the official Docker image:
# In config/ph_values.yaml, comment out the deployment section:
operations_web:
enabled: true
image: docker.io/openmf/ph-ee-operations-web:gazelle-v1.1.0
# deployment:
# extraVolumeMounts: ...
# extraVolumes: ...Then helm upgrade again.