EHR Containerization Project

This is a going to be a wiki to respond to and track the development of the containerization project / grant


Containerization ​of​ ​the​ ​LibreHealth​ ​EHR​ ​Platform

The EHR platform is a large application that is used and frequently distributed as a full web stack installation. Installation and setup typically requires a technically savvy user to install all the dependencies, ie: OS, mySQL server, web server, PHP, etc. While there have been both prebuilt VM distributions as well as Windows XAMPP style bundles, these are not typically easy to secure, resilient and scalable.

This project proposes to rework core structure of the EHR so that it can be deployed as a series of containers using common container management standards, such as Kubernetes.

Containerization​ ​Key​ ​Areas​ ​of​ ​Focus

● Cleanly separate PHP/HTML/Javascript Application code from backend services ● Modify document storage to use server (file or database) outside of the application container. ● Modify all configuration data to be stored outside of the application container ● Create containers and container deployment models ● Create Kubernetes, Puppet, Chef or similar management tools to allow easy creation, scaling and deployment ● Document the model and deploy the EHR demo and test sites using the new model

This new model will allow the project to grow by taking advantage of current industry trends in scaling and deployment. Other projects that support one-click installations of services could then adopt the EHR and help spread the use more broadly to more users.

Budget​ ​and​ ​high​ ​level​ ​Plans

Using existing volunteer and vendor resources the funds can will allow a spike in development to accomplish the above focus areas in the next 2-3 months.

Success will be demonstrated by the project’s ability to deploy a fully containerized version of the EHR and subsequently take the lessons learned and apply them to the other Librehealth project code bases.

1 Like

These are the 2 items relevant to getting the grant finalized / funded. @r0bby

  1. We need to finalize and confirm what our internal finance team refers to as a “Statement of Work” for your grant. In most cases, this will align almost completely with your proposal, but we may need to add some additional detail. We will be sending you a proposed Statement of Work for your approval shortly. Please be on the lookout for it, and respond ASAP once you or your team has reviewed & approved it. (Or with any suggested revisions.)

  2. We will need to agree on a final budget and payment schedule. Our internal accounting team requires invoices to be sent to us before we can issue payment on the agreed payment plan times/amounts. To begin this process, please respond to this message ASAP, listing all “line items” and amounts for each type of activity to be collected across all invoices. An example would be “Development - $X; Server Infrastructure - $Y, Printing Costs - $Z”. We will then respond back with a suggested payment schedule for you to review.

Goal - create enterprise capable projects

Project Management - 40h (5h per week for 2 months)

Infrastructure Management and development – Build your own (reference example) - 20h – Use External/Service Partnership, Enterprise Level - $200/m estimated


  • Choose a container Model (Docker) 1-2h
  • Choose a registry (Gitlab and/or Docker Hub) 2h
  • Make specific modifications to the projects as needed (see below) **
  • Add the container to the registry (automation strategy, Jenkins?, etc) 10h
  • Create Installation tools / instructions (where are the secrets managed?) - 20h
  • Choose / design an orchestration model-Kubernetes/OpenShift? Rancher? - 30h
  • Choose or design the Discovery model - 4 hrs
  • Develop a testing plan and recommendations for deployment models and OS - 4h
  • QA and Testing (All 3 Products) - 60hrs
    1. Deploy EHR to at least two environments such as LibreHealth infrastructure, Google Cloud, etc
    2. Deploy Toolkit to at least two environments such as LibreHealth infrastructure, Google Cloud, etc
    3. Deploy RIS to at least two environments such as LibreHealth infrastructure, Google Cloud, etc

EHR Specific:

  • Identify the all the persistent data needs in the EHR - 10h
  • Identify the applications that are outside of the EHR that can also be used from containers (PHP, SQL, COUCHDB, etc) - 5h
  • Determine the disk storage models that will be supported (NAS/Local/Cloud, etc) - 10h
  • Modify the code to allow the persistant data to be external to the EHR application container -30h
  • Create a container(s) (tagged tarfile) for the EHR code, configuration, static-data -10h65

TOOLKIT specific:

  1. Refine and improve current toolkit container (tony’s wild guess: 20h )
  2. Identify dependent contrainers, tomcat8, jdk8, MySQL 5.7 (tony’s wild guess: 2h )
  3. Setup methods that add: demo database, install and the owa module (tony’s wild guess: 15h )

RIS Specific:

  1. Setup methods that add RIS Module and Orthanc PAX (is orthanc standalone? a container already?) (tony’s wild guess: 10h ) .

This will need testing as I have seen in the GCI that Windows Docker is a different animal . The students had problems with the install and we don’t need that as we try to build a customer base. IMHO

Docker Toolbox should work in the case of Windows 10 Home. It doesn’t rely on HyperV.

Don’t it require a BIOS change?

Yeah, they have to enable hardware virtualization :slight_smile:

That will need to be documented for various BIOS’s or the requirement will need to be stated windows 10 home not supported, no telling how many will be lost with that.

That’s what Google is for…

There seems to be some confusion here, I do NOT see the container as the model to deploy self installed versions of the EHR. It’s for use in scalable hosted / enterprise installations, it’s not a good model for one-off deployment. We will still need a installation / setup method for XAMPP, local install from gitrepos, downloaded zips etc.

Whew, I am glad you said that. Feel a lot better.

This is one of the winners for this – Having it containerized means development is easier!

@r0bby, I need your best guesses on the time (man hrs) involved in the items listed above that are “Infrastructure” related. As well as any costs that might be involved to third party for the registry, orchestration etc.

What is the deadline for this?

I am going to ask here again :… when we were prioritizing projects me and @sunbiz thought the containerization would be for all 3 projects managed and directed by @tony

If this is not the case it’s fine but I would like a response … I posted it to chat too but I may have missed a response

Per the second post on the thread… Mike says “ASAP”. I talking tomorrow with Hadrian at Apifocal, who I have been working with on the cTakes and who I mentioned has a platform for this sort of thing and will help us with the project.

@judywawira it can be, but I know nothing about what has already been done for lh-tookit and RIS and apparently neither did Robby. So, jump in and help scope the effort and we will go for as much of it as we can manage!

I did know about RIS and Toolkit’s docker image – how are we budgeting this?

Also, Would you mind if I moved this to the community-infra wiki?

This is a development project first and infrastructure later. Please leave it where it is.

That is the question I am asking. what is needed to bring the toolkit and RIS docker model up to speed? I can’t answer that I as I have no information. Need to get feed back on this from the toolkit team, so we can move forward.