{"id":1237,"date":"2026-08-31T08:32:00","date_gmt":"2026-08-31T08:32:00","guid":{"rendered":"https:\/\/www.kailashcloud.com\/blog\/?p=1237"},"modified":"2026-08-21T08:34:17","modified_gmt":"2026-08-21T08:34:17","slug":"host-a-node-js-application-on-cpanel","status":"publish","type":"post","link":"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/","title":{"rendered":"How to Host a Node.js Application on cPanel: 7 Easy Steps for a Successful Deployment"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Your Node.js app runs perfectly with <code>npm start<\/code> on your laptop. You upload it to cPanel, open your domain, and get a 503 error. Sometimes, you may only see a directory listing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That difference catches almost everyone the first time. cPanel was built primarily for PHP, so it does not run your Node.js application the same way your local machine does. Instead, an application server called Phusion Passenger starts your app, manages the port it listens on, and passes incoming requests to it through Apache.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you understand this difference, the rest becomes much easier. Most of the process involves filling out a few fields and clicking a button.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide explains how to host a Node.js application on cPanel from start to finish. You will learn how to check whether your hosting supports Node.js, prepare your application files, create the application in cPanel, install dependencies, and connect it to your domain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The final sections cover the errors that commonly appear in support tickets. By the end, you should be able to identify and fix most of these problems yourself.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Quick_Answer\" >Quick Answer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#What_You_Need_Before_You_Start\" >What You Need Before You Start<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_1_Confirm_Your_Hosting_Supports_Nodejs\" >Step 1: Confirm Your Hosting Supports Node.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_2_Prepare_Your_Application_Locally\" >Step 2: Prepare Your Application Locally<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Name_your_startup_file_appjs\" >Name your startup file app.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Check_your_packagejson\" >Check your package.json<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Let_Passenger_choose_the_port\" >Let Passenger choose the port<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_3_Create_the_Application_in_cPanel\" >Step 3: Create the Application in cPanel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_4_Upload_Your_Application_Files\" >Step 4: Upload Your Application Files<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_5_Install_Dependencies\" >Step 5: Install Dependencies<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_6_Add_Your_Environment_Variables\" >Step 6: Add Your Environment Variables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Step_7_Start_the_Application_and_Test_It\" >Step 7: Start the Application and Test It<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Common_Problems_and_How_to_Fix_Them\" >Common Problems and How to Fix Them<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#503_Service_Unavailable\" >503 Service Unavailable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#%E2%80%9CCannot_find_module%E2%80%9D\" >&#8220;Cannot find module&#8221;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Code_changes_are_not_appearing\" >Code changes are not appearing<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#%E2%80%9CApplication_root_already_in_use%E2%80%9D\" >&#8220;Application root already in use&#8221;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#%E2%80%9CApache_Passenger_is_required_by_Nodejs_Selector%E2%80%9D\" >&#8220;Apache Passenger is required by Node.js Selector&#8221;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#PM2_does_not_work\" >PM2 does not work<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Useful_Tips\" >Useful Tips<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Conclusion\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Frequently_Asked_Questions\" >Frequently Asked Questions<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Can_I_run_Nodejs_on_shared_hosting\" >Can I run Node.js on shared hosting?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Which_Nodejs_version_should_I_choose\" >Which Node.js version should I choose?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Where_should_the_application_root_be\" >Where should the application root be?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Why_does_my_app_show_%E2%80%9CIt_Works%E2%80%9D_instead_of_my_site\" >Why does my app show &#8220;It Works!&#8221; instead of my site?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Do_I_need_SSH_access\" >Do I need SSH access?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Can_I_use_PM2_to_keep_my_app_running\" >Can I use PM2 to keep my app running?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#Can_I_deploy_Nextjs_or_another_SSR_framework\" >Can I deploy Next.js or another SSR framework?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/www.kailashcloud.com\/blog\/host-a-node-js-application-on-cpanel\/#How_do_I_read_my_applications_logs\" >How do I read my application&#8217;s logs?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quick_Answer\"><\/span>Quick Answer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To host a Node.js application on cPanel:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Confirm your hosting plan includes <strong>Setup Node.js App<\/strong> or <strong>Application Manager<\/strong>.<\/li>\n\n\n\n<li>Prepare your app locally with a valid <code>package.json<\/code> and a startup file named <code>app.js<\/code>.<\/li>\n\n\n\n<li>Open <strong>Setup Node.js App<\/strong> and click <strong>CREATE APPLICATION<\/strong>.<\/li>\n\n\n\n<li>Set the Node.js version, application root, application URL, and startup file.<\/li>\n\n\n\n<li>Upload your project files to the application root, leaving out <code>node_modules<\/code>.<\/li>\n\n\n\n<li>Click <strong>Run NPM Install<\/strong>, then add your environment variables.<\/li>\n\n\n\n<li>Click <strong>Start Application<\/strong> and open your application URL.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Each step is explained below, along with the settings that cause the most trouble.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_You_Need_Before_You_Start\"><\/span>What You Need Before You Start<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check these first. A missing item here is the reason most first deployments fail:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A cPanel hosting account with Node.js support enabled<\/li>\n\n\n\n<li>A working Node.js application with a valid <code>package.json<\/code><\/li>\n\n\n\n<li>A domain or subdomain already pointing to your hosting account<\/li>\n\n\n\n<li>An active SSL certificate on that domain<\/li>\n\n\n\n<li>SSH access or the cPanel <strong>Terminal<\/strong>, useful but not required<\/li>\n\n\n\n<li>The Node.js version you develop on, so you can match it on the server<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If your domain does not open over HTTPS yet, <a href=\"https:\/\/www.kailashcloud.com\/blog\/how-to-activate-ssl-certificate\/\">activate the SSL certificate<\/a> before you begin. Doing it now is simpler than doing it after an application is attached to the domain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the domain does not load at all, the problem sits in your DNS rather than your hosting. Our <a href=\"https:\/\/www.kailashcloud.com\/blog\/what-is-dns-guide\/\">beginner&#8217;s guide to DNS<\/a> explains how nameservers and records fit together.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_1_Confirm_Your_Hosting_Supports_Nodejs\"><\/span>Step 1: Confirm Your Hosting Supports Node.js<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Log in to cPanel and look in the <strong>Software<\/strong> section. You want to see the <strong>Setup Node.js App<\/strong> icon.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Setup Node.js App<\/strong> is the CloudLinux Node.js Selector, which is what most shared hosting accounts use. It gives you a Node.js version dropdown, an isolated environment for your app, and options for installing dependencies and restarting the application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It runs your application through <strong>Phusion Passenger<\/strong>, so everything below applies to this setup.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1474\" height=\"547\" src=\"https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39.png\" alt=\"\" class=\"wp-image-1254\" srcset=\"https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39.png 1474w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-300x111.png 300w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-768x285.png 768w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-1024x380.png 1024w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-525x195.png 525w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-1054x391.png 1054w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-819x304.png 819w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-39-1240x460.png 1240w\" sizes=\"auto, (max-width: 1474px) 100vw, 1474px\" \/><figcaption class=\"wp-element-caption\">Setup Node.js App icon in cPanel<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If the icon is not there<\/strong>, your account does not have Node.js enabled, and this is not something you can switch on yourself. The server needs CloudLinux with the Node.js Selector module and the required Passenger components, which must be installed by the hosting provider through WHM, the server-level control panel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open a support ticket and ask whether Node.js is available on your current hosting plan. If it is not, ask which plan includes Node.js support.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check this before you spend an afternoon uploading files. A missing <strong>Setup Node.js App<\/strong> icon means the deployment cannot work, however correct your code is.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_2_Prepare_Your_Application_Locally\"><\/span>Step 2: Prepare Your Application Locally<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three things need to be right before your project leaves your machine.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Name_your_startup_file_appjs\"><\/span>Name your startup file <code>app.js<\/code><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The startup file is the file Passenger runs first, the entry point of your application. Passenger looks for one called <code>app.js<\/code>. cPanel&#8217;s documentation is direct about this: use that exact name, or add a <code>PassengerStartupFile<\/code> directive in an Apache include file pointing at a different one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Node.js Selector does give you a field for a different filename, which handles the directive for you. Even so, <code>app.js<\/code> is the path of least resistance, and it is what the platform assumes when the field is left blank.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Check_your_packagejson\"><\/span>Check your <code>package.json<\/code><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your dependencies must be listed here, because you will not be uploading <code>node_modules<\/code>. The server installs them itself from this file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"name\": \"my-app\",\n  \"version\": \"1.0.0\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"start\": \"node app.js\"\n  },\n  \"engines\": {\n    \"node\": \"&gt;=18.0.0\"\n  },\n  \"dependencies\": {\n    \"express\": \"^4.21.0\"\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>engines<\/code> field records the minimum Node.js version your app needs. You will use it in Step 3 when choosing a version.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Let_Passenger_choose_the_port\"><\/span>Let Passenger choose the port<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the one code change most deployments need. Passenger uses reverse port binding, meaning it decides which port your application listens on and overrides whatever you hardcoded. An app that insists on a fixed port can fail to start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Read the port from the environment, keeping a local fallback:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const express = require('express');\nconst app = express();\n\nconst port = process.env.PORT || 3000;\n\napp.get('\/', (req, res) =&gt; {\n  res.send('Hello from Node.js on cPanel');\n});\n\napp.listen(port, () =&gt; {\n  console.log(`App listening on port ${port}`);\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One further constraint is worth knowing before you deploy. Passenger installs the first HTTP server your application creates as its request handler, so applications that create several HTTP servers need extra configuration. Phusion documents the approach in its <a href=\"https:\/\/www.phusionpassenger.com\/library\/indepth\/nodejs\/reverse_port_binding.html\" target=\"_blank\" rel=\"noopener\">reverse port binding guide<\/a>.   <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_3_Create_the_Application_in_cPanel\"><\/span>Step 3: Create the Application in cPanel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open <strong>Setup Node.js App<\/strong> and click <strong>CREATE APPLICATION<\/strong>. Five fields appear.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Field<\/th><th>What to enter<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>Node.js version<\/td><td>The version closest to what you develop on. The dropdown lists only versions your host has installed.<\/td><td>20<\/td><\/tr><tr><td>Application mode<\/td><td><code>Production<\/code> for a live app, <code>Development<\/code> while testing<\/td><td>Production<\/td><\/tr><tr><td>Application root<\/td><td>The folder for your app files, relative to your home directory<\/td><td><code>myapp<\/code><\/td><\/tr><tr><td>Application URL<\/td><td>The domain or subdomain that serves the app<\/td><td><code>app.yourdomain.com<\/code><\/td><\/tr><tr><td>Application startup file<\/td><td>Your entry file<\/td><td><code>app.js<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"465\" src=\"https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-1024x465.png\" alt=\"\" class=\"wp-image-1255\" srcset=\"https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-1024x465.png 1024w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-300x136.png 300w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-766x348.png 766w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-1536x698.png 1536w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-526x239.png 526w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-819x372.png 819w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-1055x479.png 1055w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38-1240x563.png 1240w, https:\/\/www.kailashcloud.com\/blog\/wp-content\/uploads\/2026\/08\/image-38.png 1865w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">cPanel Setup Node.js App create application form<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Keep the application root outside <code>public_html<\/code>.<\/strong> Enter something like <code>myapp<\/code>, which resolves to <code>\/home\/yourusername\/myapp<\/code>, replacing <code>yourusername<\/code> with your cPanel account name. Anything placed inside <code>public_html<\/code>, your website&#8217;s document root, can potentially be served as a plain file, which would expose your source code, your <code>node_modules<\/code>, and any configuration sitting beside them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version mismatches cause real failures.<\/strong> An app built against Node 20 may not run on Node 18. If the version you need is missing from the dropdown, ask your host whether they can add it rather than downgrading your app and hoping.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click <strong>CREATE<\/strong>. cPanel builds an isolated environment for the application, along with the matching folder in your home directory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_4_Upload_Your_Application_Files\"><\/span>Step 4: Upload Your Application Files<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your files go into the application root you just named. Choose whichever method suits how you work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>File Manager.<\/strong> Zip your project locally, leaving out <code>node_modules<\/code>. Open <strong>File Manager<\/strong>, go to the application root, click <strong>Upload<\/strong>, then right-click the uploaded archive and choose <strong>Extract<\/strong>. Afterwards, confirm that <code>package.json<\/code> sits directly in the application root rather than one folder deeper. That extra nesting level is a common cause of a failed start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Git Version Control.<\/strong> For a project you will update regularly, this is the better option. Open <strong>Git Version Control<\/strong>, click <strong>Create<\/strong>, enter your repository URL, and set the repository path to your application root. Updates then become a pull instead of a re-upload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>FTP or SFTP.<\/strong> Connect with a client such as FileZilla and copy the files across. Leave out <code>node_modules<\/code> here too, since transferring thousands of small files over FTP is slow and often incomplete.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Whichever route you take, do not upload <code>node_modules<\/code>. Dependencies compiled on your machine may not match the server&#8217;s environment, and the next step installs them correctly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_5_Install_Dependencies\"><\/span>Step 5: Install Dependencies<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Return to <strong>Setup Node.js App<\/strong>, find your application in the list, and click the pencil icon to edit it. Click <strong>Run NPM Install<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">cPanel runs <code>npm install<\/code> inside your application&#8217;s environment, reading <code>package.json<\/code> and creating <code>node_modules<\/code> on the server. A greyed-out button means <code>package.json<\/code> is either missing or not in the application root.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you prefer the command line, the edit screen shows a <code>source<\/code> command near the top. Copy it, open <strong>Terminal<\/strong> in cPanel or connect over SSH, and paste it in. It looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source \/home\/yourusername\/nodevenv\/myapp\/20\/bin\/activate &amp;&amp; cd \/home\/yourusername\/myapp<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the command cPanel generated rather than this example, since yours already contains the correct username, application root, and version. Your prompt changes to show the environment is active. Then run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Installs are sometimes killed on shared hosting when a package needs more memory than your account allows. If that happens, cap the memory Node uses during the install:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NODE_OPTIONS='--max-old-space-size=512' npm install<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_6_Add_Your_Environment_Variables\"><\/span>Step 6: Add Your Environment Variables<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Database credentials, API keys, and secrets belong in environment variables. Not in your source code, and not in a <code>.env<\/code> file sitting in the application root.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the application edit screen, scroll to the environment variables section and add each name and value. They reach your code through <code>process.env<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const dbHost = process.env.DB_HOST;\nconst dbUser = process.env.DB_USER;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NODE_ENV<\/code> is set for you based on the application mode chosen in Step 3, so there is no need to add it yourself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your app uses MySQL, create the database and user through cPanel&#8217;s <strong>MySQL Databases<\/strong> first, then grant that user <strong>ALL PRIVILEGES<\/strong> on the database. cPanel prefixes both names with your account username, so a database you name <code>appdb<\/code> becomes <code>yourusername_appdb<\/code>. Use the full prefixed names in your variables, because the short names will not connect.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_7_Start_the_Application_and_Test_It\"><\/span>Step 7: Start the Application and Test It<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Click <strong>Save<\/strong>, then <strong>Start Application<\/strong>, or <strong>Restart<\/strong> if it is already running. Click <strong>Open<\/strong> beside your application URL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A correctly configured app serves its own homepage. A newly created application that has no code of yours yet shows cPanel&#8217;s default &#8220;It Works!&#8221; page, which confirms Passenger is running but is not yet serving your project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before calling it done, check two things past the homepage:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Open a real route.<\/strong> Load an actual endpoint from your app, such as <code>\/api\/status<\/code>. A homepage can render from a leftover file while your routes are broken.<\/li>\n\n\n\n<li><strong>Confirm it is your code.<\/strong> Change a visible string, restart, and reload. If nothing changes, Passenger may still be serving a cached process. The restart section below covers that.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you see an error instead, the next section explains what it means.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Common_Problems_and_How_to_Fix_Them\"><\/span>Common Problems and How to Fix Them<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"503_Service_Unavailable\"><\/span>503 Service Unavailable<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the error you are most likely to meet. It means Passenger tried to start your application and it did not come up.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with the logs. Check the Passenger log file path shown in your application settings, then check <strong>Metrics &gt; Errors<\/strong> in cPanel for Apache-level messages. The actual stack trace is usually in one of the two.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common causes, roughly in order of frequency:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Cause<\/th><th>Fix<\/th><\/tr><\/thead><tbody><tr><td>Dependencies not installed<\/td><td>Run <strong>Run NPM Install<\/strong> again and watch for failures<\/td><\/tr><tr><td>Node.js version mismatch<\/td><td>Match the dropdown version to your app&#8217;s requirement<\/td><\/tr><tr><td>Wrong startup file<\/td><td>Confirm the filename in the settings matches a file that exists<\/td><\/tr><tr><td>Files nested one folder too deep<\/td><td><code>package.json<\/code> must sit directly in the application root<\/td><\/tr><tr><td>Crash on startup<\/td><td>Read the log, usually a missing module or a syntax error<\/td><\/tr><tr><td>Account resource limits<\/td><td>Check <strong>Resource Usage<\/strong>. A process killed for exceeding limits returns 503<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%80%9CCannot_find_module%E2%80%9D\"><\/span>&#8220;Cannot find module&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The named package is not present in <code>node_modules<\/code> on the server. Run the install again inside the application environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If one package keeps failing, it may need compilation tools that shared hosting does not provide. Packages with native bindings, meaning code compiled for a specific system rather than plain JavaScript, often have pure JavaScript alternatives. <code>bcrypt<\/code> and <code>bcryptjs<\/code> are the usual example.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Code_changes_are_not_appearing\"><\/span>Code changes are not appearing<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Passenger holds your application in memory, so editing a file does not restart it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>Restart<\/strong> in the cPanel interface, or create a restart trigger file over SSH:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/myapp\/tmp\ntouch ~\/myapp\/tmp\/restart.txt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Passenger watches this file and restarts the application when its timestamp changes. Replace <code>myapp<\/code> with your own application root.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%80%9CApplication_root_already_in_use%E2%80%9D\"><\/span>&#8220;Application root already in use&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Another application, whether Node.js, Python, or Ruby, is already registered against that folder. Check your existing applications in the list, and look inside that directory for an <code>.htaccess<\/code> file carrying Passenger directives left over from an earlier setup.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%80%9CApache_Passenger_is_required_by_Nodejs_Selector%E2%80%9D\"><\/span>&#8220;Apache Passenger is required by Node.js Selector&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The server is missing the Passenger module the selector depends on. This is a server-level package your hosting provider installs, so there is nothing to fix from your side. Send them the exact error message.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"PM2_does_not_work\"><\/span>PM2 does not work<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It is not meant to. Passenger is already the process manager, starting, stopping, restarting, and monitoring your application. Running PM2, forever, or nodemon alongside it creates conflicts. Commands such as <code>node app.js<\/code> or <code>npm start<\/code> over SSH will run a process, but that process is not the one serving your domain.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Useful_Tips\"><\/span>Useful Tips<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Match versions locally.<\/strong> Use <code>nvm<\/code> on your machine to develop against the same Node.js version selected in cPanel. Most &#8220;works locally, breaks on the server&#8221; problems begin here.<\/li>\n\n\n\n<li><strong>Set the mode to Production before launch.<\/strong> Development mode can expose stack traces to visitors.<\/li>\n\n\n\n<li><strong>Run <code>npm audit<\/code> regularly.<\/strong> Shared servers are a busy neighbourhood, and outdated dependencies are the easiest way in.<\/li>\n\n\n\n<li><strong>Keep secrets out of Git.<\/strong> If your repository ever held a <code>.env<\/code> file with live credentials, rotate them.<\/li>\n\n\n\n<li><strong>Back up before major changes.<\/strong> When a deployment goes badly, <a href=\"https:\/\/www.kailashcloud.com\/blog\/how-to-restore-a-website-from-backup\/\">restoring from a backup<\/a> is faster than debugging under pressure.<\/li>\n\n\n\n<li><strong>Node.js and PHP can coexist.<\/strong> Your Node app can run on a subdomain while WordPress or another PHP site runs on the main domain within the same account. If you manage a WordPress site there too, our guide on <a href=\"https:\/\/www.kailashcloud.com\/blog\/how-to-install-wordpress-on-cpanel\/\">installing WordPress on cPanel<\/a> covers that side.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hosting a Node.js application on cPanel comes down to one shift in thinking. You are not running your app. Passenger is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let it choose the port, name your startup file the way it expects, keep your code outside <code>public_html<\/code>, and install dependencies on the server rather than shipping them. Get those four right and the process really is a form and a button. Get one wrong and you get a 503, which is why the logs are the first place to look rather than the last.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For small APIs, side projects, and applications running beside an existing PHP site, cPanel is a practical place to deploy. When you later need WebSockets, custom server configuration, or steady resources under heavy load, that is the point to consider a VPS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you are choosing a plan and want to confirm Node.js is available before committing, the details are on our <a href=\"https:\/\/www.kailashcloud.com\/web-hosting-in-nepal\">web hosting page<\/a>, or you can ask our support team directly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Frequently_Asked_Questions\"><\/span>Frequently Asked Questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Can_I_run_Nodejs_on_shared_hosting\"><\/span>Can I run Node.js on shared hosting?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, on plans where the provider has enabled it. Shared accounts normally use the CloudLinux Node.js Selector, which appears in cPanel as <strong>Setup Node.js App<\/strong>. If that icon is missing from your <strong>Software<\/strong> section, your plan does not currently support it. Ask your provider before assuming otherwise.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Which_Nodejs_version_should_I_choose\"><\/span>Which Node.js version should I choose?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The one closest to what your application was built and tested against, picked from the versions your host has installed. The <code>engines<\/code> field in your <code>package.json<\/code> records the minimum your project needs. For anything running in production, prefer an LTS release, meaning a long-term support version that receives security fixes for an extended period.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Where_should_the_application_root_be\"><\/span>Where should the application root be?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Anywhere in your home directory except inside <code>public_html<\/code>. Something like <code>\/home\/yourusername\/myapp<\/code> works well. Placing it inside your document root risks exposing your source files to the web.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_does_my_app_show_%E2%80%9CIt_Works%E2%80%9D_instead_of_my_site\"><\/span>Why does my app show &#8220;It Works!&#8221; instead of my site?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">That page is what a newly created application serves before your own code takes over. Confirm your files extracted into the application root, that the startup file name matches what you set, and that dependencies installed. Then restart.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Do_I_need_SSH_access\"><\/span>Do I need SSH access?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Everything in this guide can be done through the cPanel interface. SSH, or cPanel&#8217;s built-in <strong>Terminal<\/strong>, is useful for reading logs and running installs with more control, but it is not required.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Can_I_use_PM2_to_keep_my_app_running\"><\/span>Can I use PM2 to keep my app running?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Passenger already manages the process lifecycle, and adding a second process manager causes conflicts. Use the <strong>Restart<\/strong> button, or the <code>tmp\/restart.txt<\/code> trigger file described above.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Can_I_deploy_Nextjs_or_another_SSR_framework\"><\/span>Can I deploy Next.js or another SSR framework?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes, though it is harder than a plain Express app. Build locally rather than on the server, since build steps are memory-hungry and often exceed shared hosting limits, then upload the built output and point the startup file at your server entry. For anything substantial, a VPS is the better fit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_do_I_read_my_applications_logs\"><\/span>How do I read my application&#8217;s logs?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Check the Passenger log file path shown in your application settings, and <strong>Metrics &gt; Errors<\/strong> in cPanel for Apache errors. Anything your app writes with <code>console.log<\/code> and <code>console.error<\/code> generally lands in one of these.<\/p>\n","protected":false},"excerpt":{"rendered":"Your Node.js app runs perfectly with npm start on your laptop. You upload it to cPanel, open your&hellip;","protected":false},"author":4,"featured_media":1250,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_display_header_overlay":false,"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","csco_post_video_location":[],"csco_post_video_location_hash":"","csco_post_video_url":"","csco_post_video_bg_start_time":0,"csco_post_video_bg_end_time":0,"csco_post_video_bg_volume":false,"footnotes":""},"categories":[13],"tags":[74,75],"class_list":["post-1237","post","type-post","status-publish","format-standard","has-post-thumbnail","category-web-hosting","tag-host-a-node-js-application-on-cpanel","tag-setup-node-js-app","cs-entry","cs-video-wrap"],"_links":{"self":[{"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/posts\/1237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/comments?post=1237"}],"version-history":[{"count":5,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/posts\/1237\/revisions"}],"predecessor-version":[{"id":1256,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/posts\/1237\/revisions\/1256"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/media\/1250"}],"wp:attachment":[{"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/media?parent=1237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/categories?post=1237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kailashcloud.com\/blog\/wp-json\/wp\/v2\/tags?post=1237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}