There are a number of ways to deploy these apps but the most efficient in our experience is to deploy them using Docker. Docker effectively creates a self contained executable called a container. This container holds your app and everything it needs to run and can be deployed and scaled quickly and easily.
In some ways the container is similar to a virtual machine but is much more streamlined and portable, as well as being scalable.
Docker is used to run apps in development and QA on our local machines prior to deployment. The same app can then be deployed to our production servers once they have passed QA.
The containers can also be deployed on a number of cloud services and, for customers with large internal infrastructures, we will use Kubernetes to control, administer and scale the services across the server cluster.