My Node.js or Python app won't start or shows an error (503, 404, placeholder page)

Find your symptom in the table, then follow the matching section.

What you see Most likely cause Go to
The "website coming soon" placeholder, or a default hosting page A leftover index.html in public_html Section 1
A 404 Not Found page on DirectAdmin hosting Your server runs OpenLiteSpeed, which can't run apps Section 2
503 Service Unavailable, or "Web application could not be started" Your app crashed while starting Section 3
The site loads but shows old code The app wasn't restarted after the upload Section 4
It works, then stops after being left alone, then works again slowly Normal idle behaviour Section 5
It works for a while, then 503 or "Resource Limit Reached" under load Account limits hit Section 6
Real-time features or WebSockets don't connect WebSockets aren't supported Section 7
A 500 error, or an error page from your framework A bug in your code, or a missing setting Section 3, then your app's logs

1. The placeholder page appears instead of my app

A new account has a placeholder index.html in public_html. The web server serves that file before it asks Passenger for your app.

  1. Open File Manager and go to public_html.
  2. Delete index.html and any index.php.
  3. Leave .htaccess alone. It holds the lines that route requests to your app.
  4. Reload the site. Clear your browser cache or try a private window if it still shows.

If the app runs on a subdomain, check the subdomain's own folder for a placeholder too.

2. A 404 page on DirectAdmin

Apps run through Phusion Passenger, which needs the Apache web server. Most DirectAdmin servers at Webway run OpenLiteSpeed, which can't run Passenger. The app manager lets you create the app, but requests never reach it and the site shows a 404.

You can't tell which web server your account is on. Open a support ticket and ask us to confirm whether your server supports Node.js and Python apps, or to move your account to one that does. Do this before spending more time debugging.

On cPanel hosting, a 404 is more likely a wrong Application URL or a placeholder problem (Section 1). Open the app screen and check the URL matches the domain or subdomain you are visiting.

3. 503 error or "Web application could not be started"

Your app crashed while Passenger tried to start it. The reason is in the logs.

Find the error

  • Look in the application root for stderr.log, or in the Passenger log file if you set one on the app screen. See Where are my Node.js or Python app's error logs?
  • Switch Application mode to Development on the app screen and restart. Passenger then shows the error in the browser. Switch back to Production when fixed.
  • Over SSH, enter the virtual environment (copy the command from the app screen) and run the startup file directly: node app.js or python app.py. Errors appear straight away.

Match the error

Error in the log Cause Fix
Cannot find module 'express' (or any package) Packages not installed, or you uploaded your own node_modules Delete any uploaded node_modules. Click Run NPM Install or run npm install over SSH. Restart
ModuleNotFoundError: No module named 'flask' Python packages not installed Add requirements.txt on the app screen and click Run Pip Install, or run pip install -r requirements.txt over SSH inside the environment
ERR_REQUIRE_ESM, or Cannot use import statement outside a module Your startup file is an ES module. Passenger can't load it directly Create app_wrapper.cjs containing (() => import('./app.js'))(); and set it as the startup file. See How to set up a Node.js app
Cannot find module '/home/username/myapp/app.js' Wrong Application startup file or Application root Check both on the app screen. The startup file path is relative to the application root
EADDRINUSE, or the app starts but never answers The app listens on a fixed port Listen on process.env.PORT (Node) or let Passenger handle it (Python). Don't hard-code a port
SyntaxError with a file name and line number A typo in your code Fix the line. Test locally before uploading
Errors about DATABASE_URL, SECRET_KEY, an API key, or undefined settings An environment variable is missing Add it on the app screen under Environment variables, save, restart. A .env file only works if your code loads it
application not found, or the WSGI app can't be loaded (Python) Passenger can't find the entry point Check passenger_wsgi.py. It must define application (Flask: from app import app as application)
Killed, heap out of memory The app or a build step used more than the account's memory Build on your own computer and upload the output. Reduce the app's memory use
Error: listen EACCES The app tries to bind a privileged port Use process.env.PORT

After any fix, click Restart on the app screen.

4. The site shows old code

Passenger keeps running the old version until it is told to restart.

  1. Open the app screen and click Restart, or run touch tmp/restart.txt in the application root.
  2. Reload the site in a private window to rule out browser caching.

If you changed package.json, run the install again before restarting.

5. The app stops when idle, then starts slowly

This is how shared hosting apps work. Passenger stops your app after a period with no visitors to free memory, and starts it again on the next request. The first visitor after a quiet spell waits a few seconds.

You can't keep the app running permanently. If your app needs to run all the time (a bot, a queue worker, a loop), shared hosting is the wrong fit. See Can I host a Node.js or Python app on Webway?

For scheduled work, use a cron job that calls a URL on your app or runs a script inside the virtual environment.

6. It fails under load or shows "Resource Limit Reached"

Your account's limits (default 2 GB memory, 30 simultaneous requests, 90 processes) are shared by everything on the account.

  • 30 simultaneous requests: slow endpoints tie up a slot each. Speed up slow routes, add caching, and avoid long-running requests.
  • Memory: check for memory leaks and heavy dependencies. Remember PHP sites and SSH sessions on the same account count too.
  • Check your usage under Resource Usage (cPanel) or Extra Features → Resource Usage (DirectAdmin).

If you regularly hit these limits, a bigger plan or a VPS is the answer.

7. WebSockets or real-time features don't connect

WebSockets don't work on Webway shared hosting. The connection handshake succeeds, but no messages pass through, so libraries appear to connect and then go silent.

  • Socket.IO may work if you force the polling transport on both client and server (transports: ['polling']). This is a fallback, not a guarantee.
  • For anything that depends on WebSockets, use a VPS or a hosted real-time service.

Still stuck?

Open a support ticket and include:

  • The domain or subdomain the app runs on.
  • Whether you are on cPanel or DirectAdmin.
  • The Node.js or Python version and the framework (for example Express, Flask, Django).
  • Exactly what you see in the browser (a screenshot helps) and the address you visited.
  • The last 30 lines of the app's log (stderr.log in the application root, or the Passenger log file you set).
  • The Application root, Application URL and Application startup file as shown on the app screen.
  • Whether you have clicked Restart since your last change, and whether you ran the package install.
  • When it last worked and what changed since (new upload, new package, new environment variable).

Did this answer it?