Web Hosting Issues

Node.js App Shows 503 Service Unavailable on cPanel — How to Fix It

October 23, 2026 · 2 views

You deployed your Node.js app with cPanel's Setup Node.js App, opened the domain, and got 503 Service Unavailable — or the even less helpful "Incomplete response received from application". Both mean the same thing: the web server tried to start your app and the Node process died before it could answer. The browser message never tells you why. The log does.

Step 1: read the real error

  • Look for stderr.log in your application root (the folder you set as Application root). On most CloudLinux servers the app's startup errors are written there.
  • Or start the app by hand over SSH: copy the source …/bin/activate && cd … command from the Setup Node.js App page, run it, then node server.js (your startup file). The crash and its stack trace print straight to the terminal.

Once you can see the error, it's almost always one of the causes below.

The usual causes

"Cannot find module 'express'" (or any package)

Dependencies were never installed on the server, or were installed for a different Node version. Press Run NPM Install again after selecting the right version, then Restart. Never upload a node_modules folder built on your own computer — native packages compiled for Windows or macOS won't load on Linux.

Wrong startup file

If Application startup file says app.js but your entry point is src/server.js or dist/main.js, Node exits immediately. Make it match exactly, including the folder.

"require() of ES Module" / "Cannot use import statement outside a module"

Your code uses import but the startup file is loaded as CommonJS (or the other way round). Either set "type": "module" in package.json to match your code, or add a small CommonJS starter file that loads your app with import('./server.mjs').

Node.js version too old

Syntax errors on ?., ?? or top-level await, or a package refusing to install, usually mean the selected Node version is older than your code expects. Pick a newer version on the app page, run NPM Install again and restart.

A missing environment variable

Many apps throw at startup when DATABASE_URL, JWT_SECRET or an API key is undefined. Add it under Environment variables, save and restart — variables are read only at start.

The database refuses the connection

On cPanel the database host is localhost, and both the database and user names carry your account prefix (youruser_dbname). Make sure the user was added to the database with privileges.

Out of memory

Builds such as next build or heavy imports can exceed the account's memory limit and get killed without a clear message. Build once over SSH (or locally, uploading only the build output), and keep the running app lean.

After the fix

Restart the app from the Setup Node.js App page — touching files is not enough — and reload the site. If it still answers 503, read stderr.log again: each fix often reveals the next error.

Still stuck?

This is exactly the kind of problem we fix every day. Send us the site for a free diagnosis — you pay only after it's running. And if you'd rather not fight your host again, Droxin Node.js hosting comes with engineers who deploy and fix your app with you.

Is your website having a similar issue?

We diagnose and fix it within 24 hours — you only pay after the fix is confirmed.

Get a Free Diagnosis

More from the blog