There are a bunch of techniques I can think of for doing this:
- Setting up a replica web-server on a different port and/or IP, then using DNS as load-balancer; restarting one server at a time
- Utilising more explicit load-balancing (which PaaS such as Heroku and OpenShift use) with implicit replicas
- Using some in-built mechanism (e.g.: in nginx)
I am working within an IaaS solution, and will be setting up git
and some listeners to handle this whole setup.