 <p>As ZZ Coder has already mentioned load balancer is a good solution especially for big deployments. For my own project I use reverse http proxy functionality of nginx web server. It redirects all http packets from a specified web context (seen from the Internet) to a server inside my network. Configuration is really easy:</p> <p><code> location /best-app-ever/ { proxy_pass host-address:8080/some-app-1.1 root /home/www/some-app-1.1 } </code></p> <p>Switching version should be smooth as well. Assuming that you have already deployed new version of application just change nginx configuration file and apply changes:</p> <p><code> location /best-app-ever/ { proxy_pass host-address:8080/some-app-1.2 root /home/www/some-app-1.2 } </code></p> <p><code>sudo nginx -t</code> <br/> <code>sudo service nginx restart</code></p> <p>Be warned that in case your web application is stateful and/or contains some running or scheduled processes, the deployment and undeployment might not be as smooth.</p>