On this page
Creating a Node.js app via the command-line (advanced)
Use SSH and the cloudlinux-selector CLI to create and manage a Node.js app without touching the cPanel interface.
If you are comfortable using SSH and working in the terminal, the command-line method gives you full control over Node.js application setup and management. While the cPanel interface works well for one-off tasks, the CLI approach is faster and more repeatable when:
- Deploying multiple applications
- Working with version control or automation
- Troubleshooting with real-time feedback
- Managing apps more flexibly via scripts
Using the cloudlinux-selector CLI tool, you can:
- Create applications programmatically
- Install dependencies without using the GUI
- Enter the app's virtual environment for direct
npmor Node use - Start, stop, and restart apps without needing cPanel access
This method is aimed at developers and advanced users who want to streamline app management through SSH.
Step 1: log in via SSH
If SSH is not yet enabled on your account, contact our support team and we will be happy to turn it on.
We use a non-standard SSH port. We will provide the correct port number when SSH access is granted.
Once enabled, connect using an SSH client:
ssh [email protected] -p [port]
Replace [port] with the port number we give you.
Step 2: create and navigate to your application directory
Create the directory where your app will live, then move into it:
mkdir ~/mynodeapp
cd ~/mynodeapp
This folder will serve as your application root when you register the app with the Node.js Selector in the next steps - make a note of the full path (for example, /home/yourusername/mynodeapp).
Step 3: create the package.json file
Use any terminal editor to create your package.json. For example, using nano:
nano package.json
Paste in your package definition, for example:
{
"name": "mynodeapp",
"version": "1.0.0",
"description": "A simple Node.js app using Express",
"main": "app.js",
"author": "Your Name",
"license": "MIT",
"dependencies": {
"express": "^4.18.2"
}
}
Save and exit the file.
Step 4: set up the application startup file
Before you register the app with the Node.js Selector, you need to create (or upload) the startup file - this is usually called app.js, server.js, or similar.
This file must be compatible with Phusion Passenger, which the Node.js Selector uses to serve your app.
For full guidance and code examples, see: Writing the startup file (app.js or similar)
In short:
- Do not use
app.listen(...) - Instead, export your app instance using
module.exports = app
If the startup file is not structured correctly, or you use an incorrect file name, your application may fail to start and return a 503 error.
Make sure the file name matches the value you pass via --startup-file when creating the app.
Step 5: create the application
Run the following command to register your Node.js app:
cloudlinux-selector create --json --interpreter nodejs --version 18 --app-root mynodeapp --domain yourdomain.com --app-uri app --startup-file app.js
Replace the following values to match your setup:
| Placeholder | Replace with |
|---|---|
18 |
Your desired Node.js version (for example, 20 or 22) |
mynodeapp |
Your chosen application root directory |
yourdomain.com |
The domain where the app will be accessible |
app |
The subdirectory URI for the app (omit or leave blank for the root domain) |
app.js |
The filename of your actual startup file |
If you omit --startup-file, it defaults to app.js.
Step 6: install Node modules
To install the dependencies listed in your package.json, run:
cloudlinux-selector install-modules --json --interpreter nodejs --user yourcpaneluser --app-root mynodeapp
Replace yourcpaneluser with your actual cPanel username and mynodeapp with the exact application root directory you used when creating the app.
This command runs npm install inside the correct virtual environment, scoped specifically to your app.
For example, if you created the app with:
cloudlinux-selector create --json --interpreter nodejs --version 18 --app-root myappdir --domain example.com --app-uri app
Then your install command should be:
cloudlinux-selector install-modules --json --interpreter nodejs --user examplecpuser --app-root myappdir
This will:
- Enter the correct virtual environment for your app
- Detect the
package.jsonfile inside~/myappdir - Install all specified dependencies (for example,
express,dotenv)
If you later update your package.json, re-run this command to install any new modules.
Optional: enter the virtual environment
If you want to run npm commands, debug interactively, or use Node-based build tools inside your app's own environment, you can activate the virtual environment manually:
source /home/yourcpaneluser/nodevenv/mynodeapp/18/bin/activate && cd ~/mynodeapp
Replace:
yourcpaneluserwith your actual cPanel usernamemynodeappwith your application root folder18with the Node.js version number you chose
Once activated, you can:
- Run
npm installmanually if needed - Execute any scripts defined in your
package.json(for example,npm run build) - Test your application logic with
node app.js(for non-server logic)
To exit the virtual environment when you are done, type:
deactivate
You do not need to keep the virtual environment active for your app to run - this is only for manual CLI work via SSH.
Managing the application from the CLI
Once your Node.js application has been created, you can control its running state with simple commands - there is no need for process managers like pm2 or forever. The Node.js Selector, via Phusion Passenger, handles everything automatically behind the scenes.
Start the app:
cloudlinux-selector start --json --interpreter nodejs --app-root ~/mynodeapp
Stop the app:
cloudlinux-selector stop --json --interpreter nodejs --app-root ~/mynodeapp
Restart the app:
cloudlinux-selector restart --json --interpreter nodejs --app-root ~/mynodeapp
These commands are all you need to manage the application lifecycle. Passenger ensures your app is properly served over the web once it is started - no custom scripts or background processes required.