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
> >
>

Reply via email to