UnderHost
Knowledgebase Docs

How to create a Node.js site in CloudPanel

Set up a Node.js application in CloudPanel. Create the site, configure the app port, set up a reverse proxy, and issue a Let's Encrypt SSL certificate.

On this page

CloudPanel supports Node.js applications by acting as a reverse proxy in front of your Node.js server process. Your app runs on a port of your choice (e.g., 3000) and Nginx forwards public requests on port 80/443 to it.

How Node.js works in CloudPanel

CloudPanel does not manage the Node.js process itself-it manages Nginx configuration that proxies traffic to your app. You are responsible for starting, monitoring, and restarting your Node.js application (typically via PM2 or systemd). CloudPanel handles the domain, SSL, and Nginx proxy configuration.

Create a Node.js site

  1. Add a new site

    Log in to CloudPanel, click Sites → + New Site → Create a Node.js Site.

  2. Configure the site

    • Domain Name: Your domain (e.g., myapp.yourdomain.com)
    • Node.js Version: Select the Node.js version your app requires
    • App Port: The port your Node.js app will listen on (e.g., 3000). Must be different from 80 and 443
    • System User / Password: Used for SSH/SFTP access to deploy your app files
  3. Create

    Click Create. CloudPanel sets up the Nginx vHost as a reverse proxy to localhost:PORT.

Deploy your application

Connect via SFTP or SSH using the system user credentials created with the site. Your application files belong in:

/home/SYSTEM_USER/htdocs/yourdomain.com/

Upload your Node.js application files here. Then install dependencies over SSH:

cd /home/SYSTEM_USER/htdocs/yourdomain.com/
npm install --production

Start the Node.js process

CloudPanel does not start your Node.js process automatically. Start it manually via SSH:

node app.js

Or, for a specific port (must match what you set in CloudPanel):

PORT=3000 node app.js

Running Node.js with plain node means it stops when your SSH session closes. Use PM2 to keep it running persistently (see below).

SSL certificate

Issue a Let's Encrypt certificate the same way as any other site:

  1. Point your domain's A record at the server IP
  2. Go to Sites → your site → SSL/TLS → Let's Encrypt
  3. Click Save & Install Certificate

Your Node.js app does not need to handle SSL-Nginx terminates SSL and proxies plain HTTP to your app on the internal port.

Keeping Node.js running with PM2

PM2 is a process manager that keeps Node.js running after SSH disconnects and restarts it on server reboot. Install PM2 globally:

npm install -g pm2

Start your application with PM2:

pm2 start app.js --name "myapp"
pm2 save
pm2 startup

Run the command that pm2 startup outputs to enable PM2 auto-start on reboot. Check app status with pm2 status and view logs with pm2 logs myapp.

Node.js management is your responsibility on unmanaged VPS

On an unmanaged VPS, the running state of your Node.js process is your responsibility. UnderHost support cannot restart your app for you on an unmanaged plan. On a managed plan, contact support if you need assistance.

Related: How to create a website in CloudPanel | SSL certificates in CloudPanel-Let's Encrypt free SSL | How to connect to your VPS via SSH | CloudPanel troubleshooting-common issues and fixes

Was this article helpful?

Need CloudPanel on a server?

Use CloudPanel on an UnderHost VPS or dedicated server for fast PHP app and WordPress hosting without a heavy panel stack.

Related articles

Back to CloudPanel