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.
- Open File Manager and go to
public_html. - Delete
index.htmland anyindex.php. - Leave
.htaccessalone. It holds the lines that route requests to your app. - 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.jsorpython 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.
- Open the app screen and click Restart, or run
touch tmp/restart.txtin the application root. - 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.login 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?