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
-
Add a new site
Log in to CloudPanel, click Sites → + New Site → Create a Node.js Site.
-
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
- Domain Name: Your domain (e.g.,
-
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:
- Point your domain's A record at the server IP
- Go to Sites → your site → SSL/TLS → Let's Encrypt
- 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.
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
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.





















