Great, Courage! I'll have a look at this. On Fri, Feb 22, 2019 at 4:49 PM Courage Angeh <[email protected]> wrote:
> Hi Alek, > > I have migrated the Docker files to their respective Fineract repositories. > Here are draft PRs for three microservices. Please review it and I will > appreciate your feedback on any updates: > https://github.com/apache/fineract-cn-identity/pull/8 > https://github.com/apache/fineract-cn-office/pull/8 > https://github.com/apache/fineract-cn-customer/pull/9 > > You could review already built docker images on > https://cloud.docker.com/u/anh3h/repository/list > It's just a rough sample though. > > In the main time, I am updating the Docker-compose file so it spins up a > swarm cluster. > > Thanks, > Courage. > > On Fri, Feb 1, 2019 at 8:00 PM Courage Angeh <[email protected]> > wrote: > >> Hi Alek, >> >> I think we can start with that. >> We can connect Docker Hub-Jenkins-GitHub. >> If Fineract can't use Jenkins at the moment, then >> we can connect GitHub directly to Docker Hub. >> >> Thanks, >> Courage >> >> On Thu, Jan 31, 2019 at 9:44 PM Aleksandar Vidakovic < >> [email protected]> wrote: >> >>> Hi Courage, >>> >>> ... would be great if you could help out... especially with your >>> knowledge >>> about Docker. >>> >>> Preparing the Git repositories should be fairly easy... another nice >>> thing >>> to have: some kind of CI server to build and push images to Docker hub; >>> not >>> sure if Fineract is currently using Jenkins at Apache... in any case not >>> a >>> big thing... setting up things with Travis or similar is not a big deal. >>> >>> Anything else you can think of? >>> >>> On Thu, Jan 31, 2019 at 6:27 PM Courage Angeh <[email protected]> >>> wrote: >>> >>> > Hi Aleksandar, >>> > >>> > I can work with you on migrating the Fineract services from Docker >>> compose >>> > to Docker Swarm. >>> > Then pushing the Fineract images to Docker Hub so it's easily >>> accessible. >>> > >>> > I think that will require Ed to create a Docker Hub account for >>> > Mifos/Fineract. >>> > >>> > Thanks, >>> > Courage. >>> > >>> > On Sat, Jan 19, 2019 at 1:49 PM Aleksandar Vidakovic < >>> > [email protected]> wrote: >>> > >>> > > Hi Juan, >>> > > >>> > > ... thanks for chiming in... and thanks for the pointer to the Git >>> > > repository with the Dockerfiles; that makes life already a lot >>> easier. >>> > > >>> > > You are right, once you have the docker-compose.yml files lined up >>> it's >>> > not >>> > > a big stretch to setup a Swarm cluster. After running such a cluster >>> for >>> > a >>> > > client of mine I just want to add: >>> > > >>> > > - a Swarm cluster with less than 3 nodes will not run very stable; >>> I'm >>> > > saying this, because at the moment we have 2 servers at our disposal >>> (I >>> > > think) >>> > > - colleagues told me that Swarm cluster worked less reliable for them >>> > than >>> > > other solutions; I don't think for a demo system that is too much of >>> a >>> > > concern, but again I had one running in a production environment and >>> had >>> > no >>> > > major problems >>> > > >>> > > If you want then let's connect ([email protected]) and figure out >>> how we >>> > > can >>> > > proceed with this... before the next GSoC season begins ;-) >>> > > >>> > > Cheers >>> > > >>> > > >>> > > On Sat, Jan 19, 2019 at 4:03 PM Juhan Aasaru <[email protected]> >>> wrote: >>> > > >>> > > > Hi Aleks >>> > > > >>> > > > Thanks for your work on pushing the demo server to live. >>> > > > I have played around with the containers also and I add my >>> feedback and >>> > > > ideas. >>> > > > >>> > > > > - it would come in handy to have default Fineract CN Docker >>> images >>> > > > published on Docker Hub >>> > > > >>> > > > I think this is a way to go. If we want to promote adoption of >>> > > Fineract-CN >>> > > > then public images >>> > > > lower the burden to anyone to download and get going with the >>> project. >>> > > > Does the CI server already exist that could potentially build the >>> > images? >>> > > > >>> > > > > - I suggest to add a Dockerfile in every microservice Git >>> > repository >>> > > > (e. >>> > > > > g. fineract-cn-customer, fineract-cn-teller, >>> fineract-cn-payroll) >>> > > and >>> > > > let a >>> > > > > CI server build and publish Docker images of these >>> > > > >>> > > > Yes. Most of the Dockerfiles already exist here >>> > > > https://github.com/openMF/fineract-cn-containers >>> > > > But they logically belong to the application's own code base so I >>> see >>> > no >>> > > > harm in adding all >>> > > > Dockerfiles to the app's own repository. >>> > > > >>> > > > - I am assuming that we **don't** want to go all the way to >>> setup a >>> > > > Kubernetes (or even a Docker Swarm) cluster; the goal is to just >>> have a >>> > > set >>> > > > >>> > > > If we plan to operate with docker-compose already (and run in two >>> > > servers) >>> > > > then I, in my opinion, it wouldn't be much overhead to create a >>> Swarm >>> > > > cluster. >>> > > > If I look at the instructions ( >>> > > https://docs.docker.com/get-started/part4/) >>> > > > it doesn't seem like a lot of work. >>> > > > Also if something happens then Swarm can detect and relaunch >>> > containers. >>> > > > But I'm no system administrator myself so I might be mistaken in >>> terms >>> > of >>> > > > how much work it requires. >>> > > > >>> > > > > - to avoid code changes or Docker image rebuilds we should >>> introduce >>> > > > > environment variables in the application.yml files of these >>> > > > microservice >>> > > > > projects; e. g.: >>> > > > > cassandra: >>> > > > > clusterName: staging_cluster >>> > > > /---/ >>> > > > > ... should look something like this: >>> > > > > cassandra: >>> > > > > clusterName: >>> > > > ${FINERACT_CUSTOMER_CASSANDRA_CLUSTER_NAME:staging_cluster} >>> > > > /---/ >>> > > > >>> > > > I think there is no need to change application.yml files. >>> > > > In docker-compose.yml you can overwrite any application.yml >>> property in >>> > > > "environment" section like this: >>> > > > >>> > > > environment: >>> > > > - >>> > > > >>> > > > >>> > > >>> > >>> "cassandra.clusterName=${FINERACT_CUSTOMER_CASSANDRA_CLUSTER_NAME:staging_cluster}" >>> > > > >>> > > > Juhan >>> > > > >>> > > > >>> > > > >>> > > > Kontakt Aleksandar Vidakovic (<[email protected]>) >>> kirjutas >>> > > > kuupƤeval N, 17. jaanuar 2019 kell 03:46: >>> > > > >>> > > > > Hi everyone, >>> > > > > >>> > > > > ... hope you all enjoyed the holidays and had a good start into >>> the >>> > new >>> > > > > year :-) >>> > > > > >>> > > > > I have to appologize for my radio silence concerning the demo >>> server, >>> > > > but I >>> > > > > got a bit steam rolled by work in the last 6 months. >>> > > > > >>> > > > > Anyway, I just wanted to get this effort going again and would >>> like >>> > to >>> > > > > discuss it with anyone interested. >>> > > > > >>> > > > > The current status: >>> > > > > >>> > > > > - we have 2 (quite big) servers provided by the Apache >>> Foundation >>> > to >>> > > > run >>> > > > > the demo setup >>> > > > > - initially I tried to get it running on one, but was not >>> enough >>> > > (even >>> > > > > with 32GB of RAM and some swap configuration tricks) >>> > > > > - I've used the demo server module with some minor >>> modifications >>> > to >>> > > > turn >>> > > > > off non-essential components (thanks Myrle) >>> > > > > >>> > > > > Trying all of this took quite some time... even on the beefy >>> machine >>> > > from >>> > > > > Apache it took (as far as I remember) 30-40min until the demo >>> server >>> > > > > startup would ultimately fail. >>> > > > > >>> > > > > Instead of going down that route again I'd like to propose a >>> > different >>> > > > > strategy: >>> > > > > >>> > > > > - I am assuming that we **don't** want to go all the way to >>> setup >>> > a >>> > > > > Kubernetes (or even a Docker Swarm) cluster; the goal is to >>> just >>> > > have >>> > > > a >>> > > > > set >>> > > > > of docker-compose.yml files to start the system >>> > > > > - it would come in handy to have default Fineract CN Docker >>> images >>> > > > > published on Docker Hub >>> > > > > - I suggest to add a Dockerfile in every microservice Git >>> > repository >>> > > > (e. >>> > > > > g. fineract-cn-customer, fineract-cn-teller, >>> fineract-cn-payroll) >>> > > and >>> > > > > let a >>> > > > > CI server build and publish Docker images of these >>> > > > > - to avoid code changes or Docker image rebuilds we should >>> > introduce >>> > > > > environment variables in the application.yml files of these >>> > > > microservice >>> > > > > projects; e. g.: >>> > > > > >>> > > > > [code] >>> > > > > ... >>> > > > > cassandra: >>> > > > > clusterName: staging_cluster >>> > > > > contactPoints: 127.0.0.1:9042,127.0.0.2:9042,127.0.0.3:9042 >>> > > > > keyspace: seshat >>> > > > > cl: >>> > > > > read: LOCAL_QUORUM >>> > > > > write: LOCAL_QUORUM >>> > > > > delete: LOCAL_QUORUM >>> > > > > ... >>> > > > > [/code] >>> > > > > >>> > > > > ... should look something like this: >>> > > > > >>> > > > > [code] >>> > > > > ... >>> > > > > cassandra: >>> > > > > clusterName: >>> > > > ${FINERACT_CUSTOMER_CASSANDRA_CLUSTER_NAME:staging_cluster} >>> > > > > contactPoints: ${FINERACT_CUSTOMER_CASSANDRA_CONTACT_ENDPOINTS: >>> > > > > 127.0.0.1:9042,127.0.0.2:9042,127.0.0.3:9042} >>> > > > > keyspace: ${FINERACT_CUSTOMER_CASSANDRA_KEYSPACE:seshat} >>> > > > > cl: >>> > > > > read: LOCAL_QUORUM >>> > > > > write: LOCAL_QUORUM >>> > > > > delete: LOCAL_QUORUM >>> > > > > ... >>> > > > > [/config] >>> > > > > >>> > > > > - with the above changes we could then define >>> docker-compose.yml >>> > > files >>> > > > > like this (pseudo file for customer microservice): >>> > > > > >>> > > > > [code] >>> > > > > version: '3.6' >>> > > > > >>> > > > > services: >>> > > > > customer: >>> > > > > image: >>> > nexus.pelotoninnovations.com/rspndr/server-in-memory:latest >>> > > > > depends_on: >>> > > > > - mongo >>> > > > > env_file: >>> > > > > - ./customer.env >>> > > > > ports: >>> > > > > - "10000:10000" >>> > > > > command: sh -c "java -Xmx1024m -Duser.timezone=UTC >>> > > > > -Dlogging.config=./logback.xml -jar >>> -Djava.net.preferIPv4Stack=true >>> > > > > fineract-cn-customer.jar" >>> > > > > [/code] >>> > > > > >>> > > > > ... and the customer.env file would contain something like this: >>> > > > > >>> > > > > [code] >>> > > > > FINERACT_CUSTOMER_CASSANDRA_CLUSTER_NAME=prod_cluster >>> > > > > >>> > > > > >>> > > > >>> > > >>> > >>> FINERACT_CUSTOMER_CASSANDRA_CONTACT_ENDPOINTS=server1:9042,server2:9042,server3:9042 >>> > > > > FINERACT_CUSTOMER_CASSANDRA_KEYSPACE=seshat >>> > > > > [/code] >>> > > > > >>> > > > > - we would provide templates for those env files (e. g. >>> > > > > "customer.env.template"); custom configurations (e. g. >>> > > "customer.env") >>> > > > > should not be checked into Git >>> > > > > - if no environment variables are provided then the defaults >>> in >>> > the >>> > > > > application.yml config files kick in with reasonable values >>> for a >>> > > > local >>> > > > > dev >>> > > > > machine deployment (given the required resources unlikely for >>> most >>> > > > devs) >>> > > > > >>> > > > > >>> > > > > Advantages: >>> > > > > >>> > > > > - ready to consume Fineract CN Docker images >>> > > > > - no lengthy builds >>> > > > > - no re-build (Gradle, Docker) for configuration changes >>> > > > > - no requirement to do cluster (Swarm, Kubernetes) setup >>> > > > > - the Docker images could still be used as the basic building >>> > blocks >>> > > > of >>> > > > > more complex architectures (Kubernetes) >>> > > > > - every service can be started/stopped separately which makes >>> > life a >>> > > > lot >>> > > > > easier when we have to figure out the right configuration for >>> the >>> > > demo >>> > > > > setup (I guess it would make it also easier for others that >>> would >>> > > like >>> > > > > to >>> > > > > setup their own environments) >>> > > > > >>> > > > > I am using most (if not all) of the required bits and pieces for >>> this >>> > > > setup >>> > > > > on a daily basis and I think it should be not too complicated to >>> get >>> > > this >>> > > > > working. And it would not interfere (too much) with the existing >>> Git >>> > > > > repositories. >>> > > > > >>> > > > > Please let me know what you think... >>> > > > > >>> > > > > Cheers, >>> > > > > >>> > > > > Aleks >>> > > > > >>> > > > >>> > > >>> > >>> >>
