• Work in progress
  • Mifos Research Notes

    1. What we want to run as BB

    2. How they do it

    3. How we will do it.

      1. Sandbox setup

        1. Setup Details

      2. What are the differences

        • Private images from provided repository should be exported and then imported in our repository → Currently AWS ECR.

      3. What are the obstacles


    Resources:
    Payment Hub installation link (https://mifos.gitbook.io/docs/payment-hub-ee/overview/installation-instructions ) or this deployment mode referencing component architecture link (https://mifos.gitbook.io/docs/payment-hub-ee/overview/deployment-models ) or examples (https://mifos.gitbook.io/docs/payment-hub-ee/overview/example ).

     

    Basic information :

    1. Payment hub EE - Mifos (there is a a documentation that I will follow but the repo is empty: https://mifos.gitbook.io/docs/payment-hub-ee/overview )

      1. Questions:

        1. Is there a guidebook/doc that we can follow to run the environment?

          1. https://mifos.gitbook.io/docs/payment-hub-ee/overview/installation-instructions

        2. Will installation guideline execution will set up a full environment or we will need to install other components?

        3. Which are all the repositories that will be used

          1. https://mifos.gitbook.io/docs/payment-hub-ee/overview/source-code-repositories

        4. After we run the environment how do we access the APIs?

          1. Postman Collections

    2. Fineract - Mifos

     

    Information from MIFOS related with running payment BB in sandbox:

     

    Steps  to add/login to ecr from another cluster  :

    1. After AWS configure / login to our ECR cluster :AWS ecr get-login-password --region ap-south-1 > password

    2. After AWS configure / login to third party (Mifos) AWS account / EKS cluster : kubectl create secret docker-registry dockersecret --docker-server=419830066942.dkr.ecr.ap-south-1.amazonaws.com --docker-username=AWS --docker-password=“$(cat password)” --docker-email=somanath@fynarfin.io

    3.  Patching service account with docker imagePullSecret: kubectl patch service account default -p ‘{“imagePullSecrets”: [{“name”: “dockersecret”}]}’

    4. Verify the Service account patch with pod — kubectl get pod <pod name> _n <namespace> -o=jsonpath=‘{.spec.imagePullSecrets[0].name}{“\n”}’

    Paymenthub Setup:-

    1. Link to base PHEE base helm chart :- (for referencing values.yaml) https://github.com/openMF/ph-ee-env-template/blob/master/helm/ph-ee-engine/values.yaml

    2. Link to paymenthub G2Psandbox Helm chart ( git clone env-labs— https://github.com/openMF/ph-ee-env-labs.git )

    3. For G2Psandbox chart—> https://github.com/openMF/ph-ee-env-labs/tree/master/helm/g2p-sandbox

    4. Please refer to Operations app latest version known issue work around in the G2Psandbox helm chart README file

    5. Postman SIT env for paymenthub : https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/Environment/SIT.json

    6. Postman collection for paymenthub : https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/Payment%20Hub.json

    7. Test paymenthub postman collection for channel —>GSMA API—> GSMA P2P API

    Question & Answers over Paymenthub Setup:

    1. What image tag should we use for ph_ee_connector_mojaloop (https://github.com/openMF/ph-ee-env-labs/blob/7ed115f79efd46a42e1c63cdbf845d3adfbfec4e/helm/g2p-sandbox/values.yaml#L215 )

      1. Answered by Somanath Hugar via Slack: “You can use the latest image tag for ph_ee_connector_mojaloop”

    2. we will need some help for starting the ElasticSerach with elastic-certificates

      1. Answered by Somanath Hugar via Slack: Please refer to the documentation for ElasticSearch certificates, secrets
        https://docs.google.com/document/d/1Pk4fHdAONAwZ9j65YuI8qA8MgDmv_oMnlvqNUQGsMTA/edit?usp=sharing

    3. We redeply the chart, but now we have 1 pod restarting, can you help sorting out the error and run the pod?

      1. pod: ph-ee-connector-ams-mifos

      2. we successful run it with ams_local_enabled: true

    4. Identify the pods required to run the Payment Hub bare minimum configuration?

      1. SLCB (commercial bank payment connector) service is not necessarily required for most demos so you can go ahead and remove it.

      2. In barebones, you can remove Zeebe Operate & either one of Mojaloop or GSMA payment schema connectors but that would impede us from giving demos so I wouldn't recommend removing them.

    5. We have a blocker on how to proceed with "Deploying the BPMN flows" and do we need to deploy any BPMN flows. Could you share more information or any short written explanation/procedure? 

      1. That would be the Upload BPMN API. You can find it in Payment Hub APIs Postman Collection Zeebe Operations APIs folder in ph-ee-env-template Github repository.    

      2. BPMNS : BPMNS

     

    FSP Setup :-

    1. Link to fineract base helm chart : https://github.com/fynarfin/fineract-env/blob/master/helm/fineract/values.yaml

    2. Link to fineract g2p sandbox helm chart: https://github.com/fynarfin/fineract-env/blob/master/helm/g2p-Sandbox/values.yaml

    3.  Community app link (for seeing the debits and credits) : - https://communityapp.sandbox.fynarfin.io/?baseApiUrl=https://fynams.sandbox.fynarfin.io&tenantIdentifier=rhino

    4. [ You should always specify the backend via baseApiUrl and tenant via tenant identifier Eg : https://openmf.github.io/community-app?baseApiUrl=https://demo.fineract.dev&tenantIdentifier=default

    5. Note: in case of Self-signed certificates, use curl —insecure flag or open the FSP host name (fynams.sandbox.fynarfin.io)in a new tab and accept the self-signed certs.

    Initial Actions:

    Mifos Fineract (Initial tryouts not used in current solution!)

    Docker run

    Docker Run:

    API Info:

    Local Swagger

    Legacy doc:

     

    Kubernetes:

    Guide Kubernetes :

    • was not able to run working instance in local minikube. The described run information was followed but it’s not working, Tested by @Vladislav Todorov on local minikube and by @Tsvetomir Krumov . Same problem for both error after starting fineract-server (was trying to connect to DB on localhost instead the one described in fineract/kubernetes/fineractmysql-deployment.yml).

    • After adding 3 new environment variables to fineract/kubernetes/fineract-server-deployment.yml fineract-server starts successfully

    - name: fineract_tenants_url value: jdbc:mariadb://fineractmysql:3306/fineract_tenants - name: fineract_tenants_uid valueFrom: secretKeyRef: name: fineract-tenants-db-secret key: username - name: fineract_tenants_pwd valueFrom: secretKeyRef: name: fineract-tenants-db-secret key: password

     

    Access Info:

    Mifos Community APP - UI

    Swagger API:

    Health Check: https://localhost:8443/fineract-provider/actuator/health to return {"status":"UP"}

     

    Paymenthub/Fineract Setup

    Source

    Both provided charts for Paymenthub(PaymentHub Setup) and Fineract (FSP setup) are used as a dependent charts in current setup.

    Mifos PaymentHub and Fineract setup for sandbox

    Images

    All images referenced from Mifos private repository are pulled and pushed in Our ECR

    ElasticSearch secrets

    Original source provided: https://docs.google.com/document/d/1Pk4fHdAONAwZ9j65YuI8qA8MgDmv_oMnlvqNUQGsMTA/edit?usp=sharing

    // curent elasticsearch version 7.16.3 // Current chart namespace "paymenthub" // Change them is other namespace is used //. when chart is installed or different version //. of elasticsearch is used in the chart docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.3 docker run --name elastic-helm-charts-certs -i -w /app \ docker.elastic.co/elasticsearch/elasticsearch:7.16.3 \ /bin/sh -c " \ elasticsearch-certutil ca --out /app/elastic-stack-ca.p12 --pass '' && \ elasticsearch-certutil cert --name security-master --dns security-master --ca /app/elastic-stack-ca.p12 --pass '' --ca-pass '' --out /app/elastic-certificates.p12" docker cp elastic-helm-charts-certs:/app/elastic-certificates.p12 ./ openssl pkcs12 -nodes -passin pass:'' -in elastic-certificates.p12 -out elastic-certificate.pem openssl x509 -outform der -in elastic-certificate.pem -out elastic-certificate.crt kubectl create secret generic elastic-certificates --from-file=elastic-certificates.p12 --namespace paymenthub kubectl create secret generic elastic-certificate-pem --from-file=elastic-certificate.pem --namespace paymenthub kubectl create secret generic elastic-certificate-crt --from-file=elastic-certificate.crt --namespace paymenthub

     

    Install/Update chart commands:

    Repo: Sandbox Github Repo

    Installation instructions github: GitHub Repository

    Obtain dependency:

    helm dependency build helm/g2p-sandbox
    • rebuild the charts/ directory based on the Chart.lock file

      or use "helm dependency update" to update charts/ based on the contents of Chart.yaml

    Upgrade/Install chart:

    Known Issues

    Known Issue Payment hub EE

    Known Issue Fineract

    Uninstall chart

    Uninstall:

    Delete all related Persistent Volume Claims:

     

    Services PaymentHubEE

    NAMESPACE

    NAME

    TYPE

    CLUSTER-IP      

    EXTERNAL-IP

    PORTS  

    COMMENTS  

    Commands Port forwarding

    URLS / status check

    paymenthub        

    fineract-mysql                 

    ClusterIP     

    172.20.160.162  

                                                                                

    mysql:3306►0                 

                           

     

     

    paymenthub        

    fineract-server                

    LoadBalancer  

    172.20.214.30   

    a80156cc82d9d450b812122a2550d372-118577547.eu-central-1.elb.amazonaws.com   

    8443►31694                   

                           

     

     

    paymenthub        

    fineract-server-local          

    ClusterIP     

    172.20.40.248   

                                                                                

    443►0                        

    Connection OK

    kubectl -n paymenthub port-forward service/fineract-server-local 15200:443

    https://127.0.0.1:15200/fineract-provider/actuator/health

    paymenthub        

    kafka                          

    NodePort      

    172.20.171.198  

                                                                                

    9092►30092                   

                           

     

     

    paymenthub        

    message-gateway                

    ClusterIP     

    172.20.230.70   

                                                                                

    port:80►0                    

                           

     

     

    paymenthub        

    mifos-community                

    LoadBalancer  

    172.20.33.11    

    a106843e644274921a9536ef41647a5a-2118717487.eu-central-1.elb.amazonaws.com  

    9090►31659                   

                           

     

     

    paymenthub        

    mifos-community-local          

    ClusterIP     

    172.20.226.30   

                                                                                

    9090►0                       

    Connection OK

    kubectl -n paymenthub port-forward service/mifos-community-local 15201:9090

    http://127.0.0.1:15201/?tenantIdentifier=rhino&baseApiUrl=https://127.0.0.1:15200/fineract-provider#/

    paymenthub        

    operationsmysql                

    ClusterIP     

    172.20.74.236   

                                                                                

    mysql:3306►0                 

                           

     

     

    paymenthub        

    operationsmysql-headless       

    ClusterIP     

                    

                                                                                

    mysql:3306►0                 

                           

     

     

    paymenthub        

    ph-ee-connector-channel        

    ClusterIP     

    172.20.215.128  

                                                                                

    port:80►0 http:82►0          

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-connector-channel 15102:80

    Postman collection

    paymenthub        

    ph-ee-connector-mojaloop-java  

    ClusterIP     

    172.20.108.164  

                                                                                

    port:80►0                    

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-connector-mojaloop-java 15105:80

    curl http://localhost:15105 -verbose

    paymenthub        

    ph-ee-elasticsearch            

    ClusterIP     

    172.20.208.46   

                                                                                

    http:9200►0 transport:9300►0 

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-elasticsearch 15103:9200

    curl -X GET "localhost:15103/_cluster/health?pretty"

    paymenthub        

    ph-ee-elasticsearch-headless   

    ClusterIP     

                    

                                                                                

    http:9200►0 transport:9300►0 

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-elasticsearch-headless 15104:9200

    curl -X GET "localhost:15104/_cluster/health?pretty"

    paymenthub        

    ph-ee-kibana                   

    ClusterIP     

    172.20.75.153   

                                                                                

    http:5601►0                  

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-kibana 15105:5601

    curl -k -s https://localhost:15105/api/status | json_pp

    paymenthub        

    ph-ee-operations-app           

    ClusterIP     

    172.20.172.220  

                                                                                

    port:80►0                    

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-operations-app 15100:80

    Postman collection

    paymenthub        

    ph-ee-operations-web           

    ClusterIP     

    172.20.134.142  

                                                                                

    4200►0                       

    Connection ? 

    Auth request goes trough dns?!? We have CORS error when trying with port forward

    kubectl -n paymenthub port-forward service/ph-ee-operations-web 15101:4200

     

    paymenthub        

    ph-ee-zeebe-ops                

    ClusterIP     

    172.20.240.140  

                                                                                

    port:80►0                    

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-zeebe-ops 15103:80

    Check es and Upload bpmn used

    Postman collection

     

     

    paymenthub        

    zeebe-operate                  

    ClusterIP     

    172.20.64.104   

                                                                                

    http:80►0                    

    Connection OK                  

    kubectl -n paymenthub port-forward service/zeebe-operate 15104:80

    Accesible in browser

    paymenthub        

    zeebe-zeebe                    

    ClusterIP     

                    

                                                                                

    http:9600►0 internal:26502►0 

    command:26501►0

     

     

     

    paymenthub        

    zeebe-zeebe-gateway            

    ClusterIP     

    172.20.81.82    

                                                                                

    http:9600►0 gateway:26500►0  

                 

     

     

    paymenthub

    ph-ee-connector-bulk      

    ClusterIP

     172.20.84.216

     

    port:80►0

    Connection OK

    kubectl -n paymenthub port-forward service/ph-ee-connector-bulk 15106:80

     

     

     

     

     

     

     

     

     

     

     

    BPMN Deployment

    Upload BPMN API. You can find it in Payment Hub Postman Collection Zeebe Operations APIs folder in ph-ee-env-template Github repository.

    Initially provided bpmn-s: BPMNs

    API information provided by Mifos:

    For creating Savings products and Tenant Clients:

    Environment: https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/Environment/FineractCoDevelop_environment.json
    Postman Collection : https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/G2P%20Sandbox%20Demo%20Prep.json

    For transactions:

    Then Use "Bulk APIs" => "Batch Transactions" API endpoint from : https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/Payment%20Hub.json . Environment https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/Environment/SIT.json
    With csv file: https://github.com/openMF/ph-ee-env-template/blob/master/PostmanCollections/ph-ee-bulk-demo-6.csv