{"id":73429,"date":"2018-04-26T11:21:28","date_gmt":"2018-04-26T18:21:28","guid":{"rendered":""},"modified":"2025-06-30T03:26:17","modified_gmt":"2025-06-30T10:26:17","slug":"how-to-deploy-a-production-ready-node-js-ha-stack-on-azure","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/","title":{"rendered":"How to deploy a production-ready Node.js HA Stack on Azure"},"content":{"rendered":"\n<p>In our effort to bring the benefits of pre-packaged software to enterprise workloads in the cloud, Bitnami has recently started shipping a new generation of apps and infrastructure stacks in the Azure Marketplace that are designed for production use. One such stack is our brand-new <a href=\"https:\/\/azuremarketplace.microsoft.com\/en-us\/marketplace\/apps\/bitnami.nodejs-ha?tab=Overview\">Node.js High Availability (HA) Cluster<\/a>, which you can deploy on Azure with absolutely zero software charges ever (besides what Azure charges for compute).<\/p>\n\n\n\n<p>When you launch the Node.js High Availability Cluster ARM template through the Marketplace, you get a cluster of Node.js servers with a shared file-system and load balancer instead of everything running in the same machine. This hooks into a database of your choice \u2013 in the walkthrough that follows we will use the MongoDB flavor of the globally distributed, highly-available database service Azure Cosmos DB. As you\u2019ll see, what was once a painful and error-prone process has been reduced to deploying it all in a few clicks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deploy-an-example-app-to-a-production-environment-in-minutes\">Deploy an example app to a production environment in minutes<\/h2>\n\n\n\n<p>Before we get started, let\u2019s take a look at the topology of our system.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post.webp\" alt=\"Load balancer diagram\" class=\"wp-image-73430 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post.webp 524w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-300x242.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-310x250.webp 310w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-330x266.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-400x323.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post.png 524w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-300x242.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-310x250.png 310w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-330x266.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/Bitnami-diagram_node-ha-post-400x323.png 400w\"><\/figure>\n\n\n\n<p>For this walkthrough, we\u2019ll use a simple To-do list application based on the MEAN (MongoDB, Express, Angular, Node.js) stack. The sample application is <a href=\"https:\/\/github.com\/bitnami\/sample-mean\">available on GitHub<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"assumptions-and-prerequisites\">Assumptions and prerequisites<\/h3>\n\n\n\n<p>This guide makes the following assumptions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You have a Microsoft Azure account. If you don&#8217;t, <a href=\"https:\/\/azure.microsoft.com\/en-us\/free\/\">create one<\/a>.<\/li>\n\n\n\n<li>You have a Node.js application that is <a href=\"https:\/\/github.com\/bitnami\/sample-mean#requirements\">compatible with Bitnami&#8217;s Node.js High-Availability Cluster<\/a>. In case it isn&#8217;t, or if you don&#8217;t have a custom Node.js application, you can <a href=\"https:\/\/github.com\/bitnami\/sample-mean\">use our sample application<\/a>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"step-1-deploy-a-cosmos-db-instance\">Step 1: Deploy a Cosmos DB instance<\/h3>\n\n\n\n<p>The example Node.js application used in this guide needs a MongoDB database. Since MongoDB is not included with Bitnami&#8217;s Node.js High-Availability Cluster, you must deploy this separately. The best way to do this is with the <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/cosmos-db\">Azure Cosmos DB<\/a> service, which provides a scalable, high-availability database in the cloud.<br>As a first step, go ahead and launch a new Azure Cosmos DB instance, as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Browse to the <a href=\"https:\/\/portal.azure.com\/\">Azure Portal<\/a> and log in if needed.<\/li>\n\n\n\n<li>From the menu bar on the left, select the &#8220;Azure Cosmos DB&#8221; item.<\/li>\n\n\n\n<li>Click &#8220;Add&#8221; to add a new Cosmos DB instance.<\/li>\n\n\n\n<li>Enter a unique name for your new database instance in the &#8220;ID&#8221; field and select &#8220;MongoDB&#8221; as the API.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-1024x619.webp\" alt=\"Screenshot 1 - Deploy a Cosmos DB instance\" class=\"wp-image-73444 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-300x181.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-1024x619.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-768x464.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-330x199.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-800x483.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-400x242.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-300x181.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-1024x619.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-768x464.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-330x199.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-800x483.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-2-400x242.png 400w\"><\/figure>\n\n\n\n<p>In the same tab, create a new resource group by entering a name for it, and choose the location for the server to be deployed. Click &#8220;Create&#8221; once done.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-1024x619.webp\" alt=\"Screenshot 2 - Deploy a Cosmos DB instance\" class=\"wp-image-73443 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-1024x619.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-300x181.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-768x464.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-330x199.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-800x483.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-400x242.webp 400w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1.webp 1200w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-node_pic-3-1-1024x619.webp\"><\/figure>\n\n\n\n<p>Your new Azure Cosmos DB instance will be deployed and will appear in the list of instances once online.<\/p>\n\n\n\n<p>Once the instance is online, select the newly-created instance and then select the &#8220;Settings -&gt; Connection String&#8221; menu item. In the &#8220;Read-write Keys&#8221; tab, note the database host name, port, username and primary password, as you will need these when deploying your Node.js application to the cluster.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-1024x663.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73442 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4.webp 1755w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-300x194.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-1024x663.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-768x498.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-1536x995.webp 1536w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-330x214.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-800x518.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-400x259.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4.png 1755w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-300x194.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-1024x663.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-768x498.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-1536x995.png 1536w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-330x214.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-800x518.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-4-400x259.png 400w\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"step-2-deploy-a-node-js-application\">Step 2: Deploy a Node.js application<\/h3>\n\n\n\n<p>The next step is to launch the Bitnami Node.js High-Availability Cluster solution with a Node.js application. The Azure Marketplace lets you do this in just a couple of clicks. Follow these steps:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Browse to the <a href=\"https:\/\/azure.microsoft.com\/marketplace\">Azure Marketplace<\/a>.<\/li>\n\n\n\n<li>Search for the solution by entering the search term &#8220;Bitnami high availability nodejs&#8221; in the search bar at the top.<\/li>\n\n\n\n<li>Select the Bitnami Multi-Tier Solution for Node.js High-Availability Cluster in the list of search results.<\/li>\n\n\n\n<li>On the description page, review the information and fees. Click the &#8220;Get it now&#8221; button to proceed and confirm.<\/li>\n\n\n\n<li>You will now be redirected to the <a href=\"https:\/\/portal.azure.com\/\">Azure Portal<\/a>. Log in if required.<\/li>\n\n\n\n<li>On the solution description page, review the available information and click the &#8220;Create&#8221; button to proceed.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-1024x992.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73441 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-300x291.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-1024x992.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-768x744.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-258x250.webp 258w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-330x320.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-800x775.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-400x388.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-300x291.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-1024x992.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-768x744.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-258x250.png 258w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-330x320.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-800x775.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-5-400x388.png 400w\"><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the &#8220;Basics&#8221; tab, enter an easy-to-remember name for the deployment together. By default, the solution is configured with the URL to <a href=\"https:\/\/github.com\/bitnami\/sample-mean\">Bitnami&#8217;s sample MEAN application<\/a>, but you can edit this to reflect the Git repository URL for your own application.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-1024x934.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73440 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-300x274.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-1024x934.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-768x701.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-274x250.webp 274w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-330x301.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-800x730.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-400x365.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-300x274.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-1024x934.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-768x701.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-274x250.png 274w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-330x301.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-800x730.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-6-400x365.png 400w\"><\/figure>\n\n\n\n<p><em>NOTE: Ensure that your application complies with <\/em><a href=\"https:\/\/github.com\/bitnami\/sample-mean#requirements\"><em>these requirements<\/em><\/a><em> before proceeding. You can use a private repository by including the username and password in the repository URL, in the format https:\/\/USERNAME:PASSWORD@URL.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the same tab, enter the host name, port, username and password for your Cosmos DB instance, a name for the application database and the number of nodes for the cluster. Enter the string ssl=true&amp;replicaSet=globaldb in the &#8220;Database connection options&#8221; field and create a new resource group by entering a name for it and choosing its location. Click &#8220;OK&#8221; when done.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-1024x909.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73439 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-300x266.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-1024x909.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-768x682.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-282x250.webp 282w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-330x293.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-800x710.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-400x355.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-300x266.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-1024x909.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-768x682.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-282x250.png 282w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-330x293.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-800x710.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-7-400x355.png 400w\"><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the &#8220;Environment Configuration&#8221; tab, enter a password or an SSH public key and choose the size of the virtual machines in the deployment. For more information on available sizes and configurations, refer to the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/virtual-machines\/linux\/sizes\">Azure documentation<\/a>.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-1024x601.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73438 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-300x176.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-1024x601.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-768x451.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-330x194.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-800x469.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-400x235.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-300x176.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-1024x601.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-768x451.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-330x194.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-800x469.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-8-400x235.png 400w\"><\/figure>\n\n\n\n<p><em>NOTE: To generate a new SSH key pair, you can use PuTTYgen (Windows) or the ssh-keygen command (Linux, macOS, and Bash on Windows 10). Find <\/em><a href=\"http:\/\/winscp.net\/eng\/docs\/ui_puttygen\"><em>instructions on using PuTTYgen<\/em><\/a><em> and <\/em><a href=\"http:\/\/www.macworld.co.uk\/how-to\/mac-software\/how-generate-ssh-keys-3521606\/\"><em>instructions on using ssh-keygen<\/em><\/a><em>.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>&nbsp;<\/em>In the &#8220;Summary&#8221; tab, verify the chosen settings. Click &#8220;OK&#8221; to proceed.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-1024x781.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73437 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-300x229.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-1024x781.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-768x586.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-328x250.webp 328w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-330x252.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-800x610.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-400x305.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-300x229.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-1024x781.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-768x586.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-328x250.png 328w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-330x252.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-800x610.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-9-400x305.png 400w\"><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In the &#8220;Create&#8221; tab, review the terms of use and click &#8220;Create&#8221; to proceed.<\/li>\n<\/ul>\n\n\n\n<p>Azure will now begin spinning up the new cluster. A notification will appear indicating the current status.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73436 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10.webp 500w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-300x167.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-330x184.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-400x223.webp 400w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-235x132.webp 235w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10.png 500w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-300x167.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-330x184.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-400x223.png 400w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-10-235x132.png 235w\"><\/figure>\n\n\n\n<p>The process can take up to 40 minutes as the various nodes in the cluster are created and the load balancer is initialized. Once all the necessary elements of the solution been provisioned, you will see a notification and the new instances and related resources will appear in the &#8220;Resource groups&#8221; section of the Azure Portal.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-1024x719.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73435 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-300x211.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-1024x719.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-768x540.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-330x232.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-800x562.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-400x281.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-300x211.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-1024x719.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-768x540.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-330x232.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-800x562.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-11-400x281.png 400w\"><\/figure>\n\n\n\n<p>You will see that the resource group includes multiple virtual machines (the nodes of the cluster) as well as a load balancer. Selecting the load balancer will display its properties, including its public IP address.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-1024x403.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73434 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-300x118.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-1024x403.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-768x302.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-330x130.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-800x315.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-400x157.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-300x118.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-1024x403.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-768x302.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-330x130.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-800x315.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-12-400x157.png 400w\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"step-3-test-the-deployed-application\">Step 3: Test the deployed application<\/h3>\n\n\n\n<p>Enter the load balancer&#8217;s IP address directly into your browser&#8217;s address bar. You should now see your application. The image below shows the sample application&#8217;s welcome page:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-1024x422.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73433 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-300x124.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-1024x422.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-768x316.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-330x136.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-800x329.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-400x165.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-300x124.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-1024x422.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-768x316.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-330x136.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-800x329.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-13-400x165.png 400w\"><\/figure>\n\n\n\n<p>Verify that the application is able to read and write data using the MongoDB database configured earlier. With the example application, enter a new to-do item and it should appear in the list, as shown below:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-1024x484.webp\" alt=\"Bitnami Azure screenshot\" class=\"wp-image-73432 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14.webp 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-300x142.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-1024x484.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-768x363.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-330x156.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-800x378.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-400x189.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14.png 1200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-300x142.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-1024x484.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-768x363.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-330x156.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-800x378.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/binami-node_pic-14-400x189.png 400w\"><\/figure>\n\n\n\n<p><em>NOTE: <\/em><a href=\"https:\/\/github.com\/bitnami\/sample-mean#database-configuration\"><em>Find out more about the database configuration variables used by the sample MEAN application<\/em><\/a><em>.<\/em><\/p>\n\n\n\n<p>Congrats, your Node.js application is now deployed, configured for use with Cosmos DB, and available for use in high-availability scenarios!<\/p>\n\n\n\n<p>For more information, including details about how to configure SSL and connect to the individual nodes of the cluster using SSH, <a href=\"https:\/\/docs.bitnami.com\/azure-templates\/infrastructure\/nodejs\/\">refer to the documentation for Bitnami&#8217;s Node.js High-Availability Cluster<\/a>.<\/p>\n\n\n\n<p>Let us know in the comments if you completed the walkthrough and have any feedback!<\/p>\n\n\n\n<p><a href=\"https:\/\/channel9.msdn.com\/Shows\/Azure-Friday\/Deploy-Bitnami-Nodejs-HA-Cluster-with-Azure-Cosmos-DB\/player\">Want to see a video version? We did the walkthrough live on Azure Friday.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our effort to bring the benefits of pre-packaged software to enterprise workloads in the cloud, Bitnami has recently started shipping a new generation of apps and infrastructure stacks in the Azure Marketplace that are designed for production use. One such stack is our brand-new Node.<\/p>\n","protected":false},"author":5562,"featured_media":73479,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[2271,166],"content-type":[340],"topic":[2241,2243,2247],"programming-languages":[2261],"coauthors":[2321],"class_list":["post-73429","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-community-partners","tag-azure","content-type-tutorials-and-demos","topic-cloud","topic-databases","topic-programming-languages","programming-languages-node-js","review-flag-1593580428-734","review-flag-1593580415-931","review-flag-1-1593580432-963","review-flag-2-1593580437-411","review-flag-3-1593580442-169","review-flag-new-1593580248-669"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to deploy a production-ready Node.js HA Stack on Azure | Microsoft Open Source Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to deploy a production-ready Node.js HA Stack on Azure | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"In our effort to bring the benefits of pre-packaged software to enterprise workloads in the cloud, Bitnami has recently started shipping a new generation of apps and infrastructure stacks in the Azure Marketplace that are designed for production use. One such stack is our brand-new Node.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-26T18:21:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-30T10:26:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1801\" \/>\n\t<meta property=\"og:image:height\" content=\"423\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Brad Bock\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brad Bock\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/brad-bock\/\",\"@type\":\"Person\",\"@name\":\"Brad Bock\"}],\"headline\":\"How to deploy a production-ready Node.js HA Stack on Azure\",\"datePublished\":\"2018-04-26T18:21:28+00:00\",\"dateModified\":\"2025-06-30T10:26:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\"},\"wordCount\":1145,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png\",\"keywords\":[\"Community\/partners\",\"Microsoft Azure\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\",\"name\":\"How to deploy a production-ready Node.js HA Stack on Azure | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png\",\"datePublished\":\"2018-04-26T18:21:28+00:00\",\"dateModified\":\"2025-06-30T10:26:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png\",\"width\":1801,\"height\":423,\"caption\":\"a close up of a sign\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to deploy a production-ready Node.js HA Stack on Azure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to deploy a production-ready Node.js HA Stack on Azure | Microsoft Open Source Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/","og_locale":"en_US","og_type":"article","og_title":"How to deploy a production-ready Node.js HA Stack on Azure | Microsoft Open Source Blog","og_description":"In our effort to bring the benefits of pre-packaged software to enterprise workloads in the cloud, Bitnami has recently started shipping a new generation of apps and infrastructure stacks in the Azure Marketplace that are designed for production use. One such stack is our brand-new Node.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2018-04-26T18:21:28+00:00","article_modified_time":"2025-06-30T10:26:17+00:00","og_image":[{"width":1801,"height":423,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png","type":"image\/png"}],"author":"Brad Bock","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Brad Bock","Est. reading time":"4 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/brad-bock\/","@type":"Person","@name":"Brad Bock"}],"headline":"How to deploy a production-ready Node.js HA Stack on Azure","datePublished":"2018-04-26T18:21:28+00:00","dateModified":"2025-06-30T10:26:17+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/"},"wordCount":1145,"commentCount":0,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png","keywords":["Community\/partners","Microsoft Azure"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/","url":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/","name":"How to deploy a production-ready Node.js HA Stack on Azure | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png","datePublished":"2018-04-26T18:21:28+00:00","dateModified":"2025-06-30T10:26:17+00:00","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/04\/bitnami-dark-bg-banner.png","width":1801,"height":423,"caption":"a close up of a sign"},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/04\/26\/how-to-deploy-a-production-ready-node-js-ha-stack-on-azure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to deploy a production-ready Node.js HA Stack on Azure"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/73429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/5562"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=73429"}],"version-history":[{"count":4,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/73429\/revisions"}],"predecessor-version":[{"id":97900,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/73429\/revisions\/97900"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/73479"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=73429"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=73429"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=73429"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=73429"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=73429"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=73429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}