How To Install CloudPanel and Host Node.js Apps
Step-by-step guide to installing CloudPanel on a VPS and deploying Node.js applications like Strapi with PM2 for automatic restarts.

CloudPanel is a free hosting panel you install on a VPS. It runs on Nginx and supports PHP, Node.js, Python, and static sites through a clean web UI. No licensing fees, no per-site limits.
This guide walks you through installing CloudPanel on a fresh VPS and deploying a Node.js application (we’ll use Strapi as the example) with PM2 for process management.
What CloudPanel offers
- File Manager
- IP and bot blocking
- Varnish Cache and Redis
- SSH/FTP access
- Firewall
- Cron jobs
- Vhost editor
- Remote backup with Rclone
- Free Let’s Encrypt certificates
- Cloudflare integration
- User management
- System resource usage graphs
- Multiple PHP versions
- MySQL and MariaDB support
- Node.js and Python support
- Nginx web server
Minimum requirements
- 1 CPU core (2+ recommended for production)
- 2 GB RAM (4 GB+ recommended for production)
- 10 GB disk space
If you want to monitor server resources like CPU, memory, and disk space, check: How To Monitor Server and Docker Resources
CloudPanel has direct cloud integrations with DigitalOcean, Vultr, Hetzner, Hostinger, AWS, and Google Cloud. These integrations let you create and manage snapshots from the CloudPanel UI.
This article uses Hetzner with Ubuntu 24.04. If you’re choosing a provider, check the DigitalOcean vs Vultr vs Hetzner comparison.
If you want to monitor CPU usage and get automatic email alerts when load is high: Monitor CPU Usage and Send Email Alerts in Linux
Video walkthrough
If you want a web panel that also works as a reverse proxy, check this course:
CloudPanel Setup CourseYou can also check Setup CloudPanel with Docker and Dockge to use CloudPanel as a reverse proxy for Docker containers and CloudPanel Remote Backups.
Looking for free self-hosted apps? Check toolhunt.net self hosted section.
1. Install CloudPanel
After your VPS is created, SSH in and run the commands below.
1.1 Update the OS
apt update && apt -y upgrade && apt -y install curl wget sudo
1.2 Install CloudPanel
CloudPanel supports Ubuntu 24.04/22.04 and Debian 13/12/11. The installer hash below is current as of mid-2026. Always check the CloudPanel install docs for the latest hash and available database options.
For Hetzner with MariaDB 11.4:
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh; \
echo "6eac061df80f08b75224fcd7fce2f115e201696d8a6122e31abf7259a813b462 install.sh" | \
sha256sum -c && sudo CLOUD=hetzner DB_ENGINE=MARIADB_11.4 bash install.sh
For Hetzner with MySQL 8.4:
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh; \
echo "6eac061df80f08b75224fcd7fce2f115e201696d8a6122e31abf7259a813b462 install.sh" | \
sha256sum -c && sudo CLOUD=hetzner DB_ENGINE=MYSQL_8.4 bash install.sh
Available database options depend on your OS. Check the docs for MySQL 8.0, MariaDB 10.11, and other combinations. For non-Hetzner providers, change the CLOUD= value or omit it entirely.
1.3 Access CloudPanel admin
Access the admin panel at https://serverIpAddress:8443. You’ll get a self-signed certificate warning – click through it.
Important: Create the admin user immediately. There’s a short window after install where bots could create the user first. For extra security, restrict port 8443 to your IP via firewall until you’ve set the admin password.
1.4 Create an admin subdomain
To access CloudPanel securely with a proper SSL certificate, create a subdomain (e.g., admin.yourdomain.com) and point it to your VPS IP. If you use Cloudflare, add an A record under DNS.
Then go to Settings in the CloudPanel admin and add the subdomain there to secure the admin area.
DigitalOcean $100 Free Vultr $100 Free Hetzner €20 Free Hostinger VPS2. Deploy a Node.js app on CloudPanel
We’ll deploy Strapi, a popular open-source headless CMS built on Node.js. The same process works for any Node.js application.
2.1 Add a Node.js site in CloudPanel
Click Add Site and choose Create a Node.js Site. Fill in your domain, select a Node.js version (22 LTS is recommended), set the app port, and create your site user credentials.

2.2 Point the domain to CloudPanel
Add an A record in your DNS (e.g., Cloudflare) pointing your domain or subdomain to the VPS IP. Enable the Cloudflare proxy if you want CDN benefits.
2.3 Generate the SSL certificate
Go to SSL/TLS for your site in CloudPanel and generate a Let’s Encrypt certificate so the site works over HTTPS.
2.4 Install Strapi
SSH in as the site user (not root):
sudo su - <your-site-username>
cd htdocs && rm -rf www.yourdomain.com
npx create-strapi@latest www.yourdomain.com --skip-cloud
The CLI will ask a few questions (TypeScript or JavaScript, database choice, etc.). For a quick start, accept the defaults – Strapi v5 uses SQLite by default.
If you prefer to use MySQL or MariaDB (which CloudPanel already has running), pass the database flags:
npx create-strapi@latest www.yourdomain.com --skip-cloud \
--dbclient=mysql \
--dbhost=127.0.0.1 \
--dbport=3306 \
--dbname=strapi_db \
--dbusername=strapi_user \
--dbpassword=your_password
You’ll need to create the database and user first in CloudPanel under Databases.
2.5 Build Strapi for production
cd htdocs/www.yourdomain.com/
NODE_ENV=production npm run build
2.6 Start Strapi
NODE_ENV=production npm start
You’ll see output like:
Project information
┌────────────────────┬──────────────────────────────────────────┐
│ Time │ ... │
│ Launched in │ 1047 ms │
│ Environment │ production │
│ Process PID │ 121469 │
│ Version │ 5.x.x (node v22.x.x) │
│ Database │ sqlite │
└────────────────────┴──────────────────────────────────────────┘
Create your first administrator by going to:
http://0.0.0.0:1337/admin
2.7 Create the admin user
Visit https://www.yourdomain.com/admin and fill in your admin credentials to set up the Strapi dashboard.
3. Enable auto-start with PM2
A Node.js app won’t restart on its own after a server reboot. PM2 handles that.
3.1 Install PM2
For a complete PM2 guide, check Manage Applications with PM2.
npm install pm2@latest -g
3.2 Start the app and save the config
pm2 start npm --name strapi-app -- start
pm2 save
3.3 Add a cron job to restore PM2 on reboot
Get the current PATH:
echo $PATH
Edit the user crontab:
crontab -e
Add these lines, replacing the PATH value with your actual output:
PATH=/home/your-site-user/.nvm/versions/node/v22.x.x/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
@reboot pm2 resurrect &> /dev/null
Verify it was saved:
crontab -l
Reboot the server and confirm the app comes back:
pm2 status
You should see the status as online:
┌─────┬───────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼───────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ strapi-app │ default │ 5.x.x │ fork │ 1521 │ 50s │ 0 │ online │ 0% │ 56.7mb │ bit… │ disabled │
└─────┴───────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Conclusions
This is how you install CloudPanel on a VPS and host Node.js apps like Strapi. The panel handles Nginx configuration, SSL certificates, and database management through a web interface, while PM2 keeps your Node.js process alive across reboots.
CloudPanel has been reliable in my experience. It’s free, actively maintained, and covers most use cases for developers who want a simple server management panel without the overhead of cPanel or Plesk.
DigitalOcean $100 Free Vultr $100 Free Hetzner €20 Free Hostinger VPS

