Skip to main content
A Virtual Container hosts one Node.js, Python, or Ruby app inside your cPanel account. Each app runs in a sandboxed virtualenv, sits inside your account’s CloudLinux LVE limits, and is served by Phusion Passenger. Three runtimes, same UI shape. Pick a version, set the application root, hit Restart.

Pick your runtime

Node.js

Node 18, 20, 22 LTS. NPM Install, Run JS Script, Application Mode toggle.

Python

alt-python 3.7 to 3.11. Virtualenv, WSGI entry point, Pip Install.

Ruby

mod_passenger, Bundler, Rails-friendly. One Ruby version per server.

How the container is built

Two CloudLinux primitives handle the isolation. LVE caps CPU, memory, I/O, IOPS, entry processes, and process count for your cPanel user, using Linux cgroups under the hood. CageFS gives every user their own filesystem view of /usr, /etc, and /proc, so other users on the server are invisible. The app itself is not a separate container. It’s a process tree inside your existing user sandbox, started and supervised by Phusion Passenger. Apache talks to Passenger over a Unix socket, Passenger forks your runtime, and the runtime handles each request.
Don’t bind to a port in your code. Passenger drives the runtime. A Node app calling app.listen(3000), or a Python WSGI app starting its own server, refuses to boot or returns 503.Export a handler instead. The runtime page for each language shows the exact shape.

What every container ships with

  • Per-app sandbox under ~/nodevenv/<app>/<ver>/, ~/virtualenv/<app>/<ver>/, or a per-app gem path for Ruby.
  • Run [Package Manager] Install button. Triggers npm install, pip install -r requirements.txt, or bundle install inside the activated env.
  • Environment variables editor for secrets and runtime config.
  • Application Mode (Node, Python) flips NODE_ENV between Production and Development.
  • Restart button. Same effect as touch tmp/restart.txt from SSH.
The Selector writes the .htaccess for you (PassengerAppRoot, PassengerAppType, PassengerStartupFile, runtime path). Don’t hand-edit those lines. The cPanel form is the source of truth and overwrites them on every save.

Limits to plan around

Exact values depend on your plan tier. See the cPanel overview for the plan matrix.

Common deployment recipes

Step-by-step guides in the Knowledge Base:

Deploy Next.js

Server-rendered Next.js on the Node.js Selector.

Deploy Express

REST API on Express with Passenger.

Deploy Django

Django app, virtualenv, static files.

Deploy Flask

Lean Flask service via passenger_wsgi.py.

Deploy Rails

Rails app, Bundler, asset precompilation.

Need a hand?

Open a ticket

Best for anything that needs an account check or a config change on our end.

Live chat

Faster for quick questions during business hours.