diff --git a/README.md b/README.md index 42c577bf7..e415d06fe 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,35 @@ _(Note that in previous versions, the `mysqlserver` environment variable used at and the `mysqlserver` environment variable is now no longer supported.)_ +Instructions to run using minikube and kubectl +=================================================== + +You can also run Fineract using containers on a kubernetes cluster. + +As Prerequisites, you must have `minikube` and `kubectl` installed on your machine; see +[Minikube & Kubectl install](https://kubernetes.io/docs/tasks/tools/install-minikube/). + +Now to run a new Fineract instance on minikube you can simply: + +1. `git clone https://github.com/apache/fineract.git ; cd fineract` +1. `minikube start --mount-string="./fineract-db/docker:/fineract-db" --mount` +1. `kubectl apply -f kubernetes/secrets.yml` +1. `kubectl apply -f kubernetes/fineractmysql-deployment.yml` +1. `kubectl apply -f kubernetes/fineract-server-deployment.yml` +1. `minikube service fineract-server --url` +1. Fineract will run at the provided url + +NB : Change protocol from `http` to `https` +======================================= + +To check the status of your containers on your local kubernetes cluster, run: + `minikube dashboard` + +Having difficulties setting up minikube locally, you can try out the deployment +using katacoda(https://www.katacoda.com/courses/kubernetes/launch-single-node-cluster) +From there start the scenario and follow the instructions as indicated above. + + Checkstyle ============ diff --git a/kubernetes/fineract-server-deployment.yml b/kubernetes/fineract-server-deployment.yml new file mode 100644 index 000000000..7e23e3337 --- /dev/null +++ b/kubernetes/fineract-server-deployment.yml @@ -0,0 +1,76 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +apiVersion: v1 +kind: Service +metadata: + labels: + app: fineract-server + name: fineract-server +spec: + ports: + - protocol: TCP + port: 8443 + targetPort: 8443 + selector: + app: fineract-server + tier: backend + type: LoadBalancer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fineract-server + labels: + app: fineract-server +spec: + selector: + matchLabels: + app: fineract-server + tier: backend + strategy: + type: Recreate + template: + metadata: + labels: + app: fineract-server + tier: backend + spec: + containers: + - name: fineract-server + image: apache/fineract:latest + env: + - name: JAVA_OPTS + value: -Dfineract_tenants_url=jdbc:mysql:thin://fineractmysql:3306/fineract_tenants -Dfineract_tenants_driver=org.drizzle.jdbc.DrizzleDriver -Dfineract_tenants_uid=root -Dfineract_tenants_pwd=skdcnwauicn2ucnaecasdsajdnizucawencascdca -Djava.awt.headless=true -XX:+UseG1GC -Dfile.encoding=UTF-8 + - name: FINERACT_DEFAULT_TENANTDB_HOSTNAME + value: fineractmysql + - name: FINERACT_DEFAULT_TENANTDB_PORT + value: '3306' + - name: FINERACT_DEFAULT_TENANTDB_UID + valueFrom: + secretKeyRef: + name: fineract-tenants-db-secret + key: username + - name: FINERACT_DEFAULT_TENANTDB_PWD + valueFrom: + secretKeyRef: + name: fineract-tenants-db-secret + key: password + ports: + - containerPort: 8443 + name: fineract-server diff --git a/kubernetes/fineractmysql-deployment.yml b/kubernetes/fineractmysql-deployment.yml new file mode 100644 index 000000000..02176da8f --- /dev/null +++ b/kubernetes/fineractmysql-deployment.yml @@ -0,0 +1,113 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +apiVersion: v1 +kind: PersistentVolume +metadata: + name: fineractmysql-pv-volume + labels: + type: local +spec: + storageClassName: manual + capacity: + storage: 10Gi + accessModes: + - ReadWriteMany + hostPath: + path: "/mnt/data" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fineractmysql-pv-claim +spec: + storageClassName: manual + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: fineract-server + name: fineractmysql +spec: + ports: + - protocol: TCP + port: 3306 + targetPort: 3306 + selector: + app: fineract-server + tier: fineractmysql + clusterIP: None +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: fineract-server + name: fineractmysql +spec: + selector: + matchLabels: + app: fineract-server + tier: fineractmysql + strategy: + type: Recreate + template: + metadata: + labels: + app: fineract-server + tier: fineractmysql + spec: + containers: + - image: mysql:5.7 + name: mysql + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: fineract-tenants-db-secret + key: password + livenessProbe: + exec: + command: + - mysqladmin + - ping + - -h + - localhost + failureThreshold: 10 + timeoutSeconds: 10 + ports: + - containerPort: 3306 + name: fineractmysql + volumeMounts: + - name: fineractmysql-persistent-storage + mountPath: /var/lib/mysql/ + - name: fineractmysql-host-path + mountPath: /docker-entrypoint-initdb.d/ + volumes: + - name: fineractmysql-persistent-storage + persistentVolumeClaim: + claimName: fineractmysql-pv-claim + - name: fineractmysql-host-path + hostPath: + path: /fineract-db diff --git a/kubernetes/secrets.yml b/kubernetes/secrets.yml new file mode 100644 index 000000000..70eedce0d --- /dev/null +++ b/kubernetes/secrets.yml @@ -0,0 +1,26 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +apiVersion: v1 +kind: Secret +metadata: + name: fineract-tenants-db-secret +type: Opaque +stringData: + username: root + password: skdcnwauicn2ucnaecasdsajdnizucawencascdca \ No newline at end of file