Finally got node.js hosting up and running on Cloudways hosting... well sort of

Continuing the discussion from Nodejs hosting with Hetzner on KonsoleH:

Used the following from the above post in .htaccess file and my index.js opens up fine(just a button).

    DirectoryIndex disabled
    RewriteEngine On
    RewriteRule ^(.*)$ http://localhost:3000/$1 [P,L]
    RewriteRule ^$ http://localhost:3000/ [P,L]

Clicking on a button should open the register page but I get:

{"status":"404","message":"/register not found."}

Works on my local dev environment. Anyone has pointers as to why it would not work on hosted environment?

1 Like

The htaccess file is used on apache server only.

Thanks @Teodor The tech support advised me to configure the .htaccess file, so I guess it is an Apache server config. Setup as custom php app and they installed pm2 to running node application in the backend. index.js opens fine. Just as soon as I browse to another page insite a template/main page it does not find it.

Definitely Apache:

Screenshot 2021-11-08 at 11.55.44

So the root path of your node server works? Then at least node is setup correctly. Do you have any logging for node on that server?

I do not have, I have cloudways tech support looking into it at the moment - I can see they are busy since I get Forbidden on page. As soon as I get access I will chase it up with them. Thanks

I use Apache in front of PM2 so maybe these parts of my config will help:

ProxyRequests On
ProxyPass /errors/ !
ErrorDocument 503 /errors/503.html
ProxyPass / http://localhost:3011/ timeout=300 Keepalive=On
ProxyPassReverse / http://localhost:3011/
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:3011/$1 [P,L]

It handles websocket forwards and a custom error page for when node is restarting/down.

Obviously make sure your port matches what you have setup with pm2.

I gave up on cloudways for node.js hosting and just opened a hetzner account (thanks for the credit Wappler) - 5 minutes and I had a docker engine up and running that still connects to my remote db without issues.

So easy as Wappler should be.

2 Likes

Resurrecting this old one since I have attempted moving away from docker containers again. This time using Dreamhost and following their node.js setup and via ssh setting up the node server. All seems to be looking fine, I just cannot get mu inde.js file to serve. I ran node index.js from the terminal and it seems it is working but when visiting the page ppswealthmentor.co.za I still get the Dreamhost defaults. Here is the output I got when running index.js in terminal:

[ps612124]$ node index.js

server-connect:setup:config {

server-connect:setup:config port: 3000,

server-connect:setup:config debug: true,

server-connect:setup:config secret: ‘xxxxxxxxxxxxxx’,

server-connect:setup:config tmpFolder: ‘/home/ppswealthuser/ppswealthmentor.co.za/public/tmp’,

server-connect:setup:config createApiRoutes: true,

server-connect:setup:config compression: true,

server-connect:setup:config redis: false,

server-connect:setup:config static: { index: false },

server-connect:setup:config session: {

server-connect:setup:config name: ‘myadvisor.sid’,

server-connect:setup:config resave: false,

server-connect:setup:config saveUninitialized: false,

server-connect:setup:config store: { ‘$type’: ‘memory’, ttl: 86400000 }

server-connect:setup:config },

server-connect:setup:config cors: {

server-connect:setup:config origin: false,

server-connect:setup:config methods: ‘GET,POST’,

server-connect:setup:config allowedHeaders: ‘*’,

server-connect:setup:config credentials: true

server-connect:setup:config },

server-connect:setup:config globals: {},

server-connect:setup:config mail: {},

server-connect:setup:config auth: {},

server-connect:setup:config oauth: {},

server-connect:setup:config db: {},

server-connect:setup:config s3: {},

server-connect:setup:config jwt: {},

server-connect:setup:config stripe: {},

server-connect:setup:config env: {}

server-connect:setup:config } +0ms

server-connect:setup:session init session store { ‘$type’: ‘memory’, ttl: 86400000 } +0ms

server-connect:setup:upload Upload middleware configured. +0ms

server-connect:setup:routes Api route /api/Budget/BudgetStep0(.json)? created +0ms

server-connect:setup:routes Api route /api/Budget/BudgetStep1(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/BudgetStep2(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/BudgetStep3(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/BudgetStep4(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/BudgetStep5(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/BudgetStep6(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/BudgetStep7(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/BudgetStep8(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/BudgetUpdateStep1(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/actualDisplay(.json)? created +0ms

server-connect:setup:routes Api route /api/Budget/actualStep1(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/actualStep2(.json)? created +3ms

server-connect:setup:routes Api route /api/Budget/actualStep3(.json)? created +5ms

server-connect:setup:routes Api route /api/Budget/actualStep4(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/actualStep5(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/actualStep6(.json)? created +6ms

server-connect:setup:routes Api route /api/Budget/actualStep7(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/actualStep8(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/budgetDate(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/budgetDisplay(.json)? created +2ms

server-connect:setup:routes Api route /api/Budget/budgetFormData(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/incomeExpensesBudgetCalc(.json)? created +1ms

server-connect:setup:routes Api route /api/Budget/showActualsCharts(.json)? created +0ms

server-connect:setup:routes Api route /api/Budget/userBudgets(.json)? created +1ms

server-connect:setup:routes Api route /api/MyPlanner/quickplanSummary(.json)? created +1ms

server-connect:setup:routes Api route /api/MyProfile/myProfile(.json)? created +1ms

server-connect:setup:routes Api route /api/MyProfile/updateProfile(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/Step1(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/Step2(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/Step3(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/Step4(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/cashflow(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/flowOfCapitalChartCalc(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/formData(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/houseHoldExpences(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/houseHoldIncome(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/investments(.json)? created +3ms

server-connect:setup:routes Api route /api/QuickPlan/lifeExpectancy(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/livingAnnuitiesFuture(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/otherIncome(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/pensionFunds(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/retirementAnnuitiesFuture(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/retirementAnnuityFunds(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/salaries(.json)? created +2ms

server-connect:setup:routes Api route /api/QuickPlan/selfEmployed(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/tax(.json)? created +3ms

server-connect:setup:routes Api route /api/QuickPlan/voluntaryInvestmentProjection(.json)? created +1ms

server-connect:setup:routes Api route /api/QuickPlan/voluntaryInvestments(.json)? created +1ms

server-connect:setup:routes Api route /api/Registration/acceptTermsConditions(.json)? created +1ms

server-connect:setup:routes Api route /api/Registration/registerEmail(.json)? created +1ms

server-connect:setup:routes Api route /api/Registration/setPassword(.json)? created +1ms

server-connect:setup:routes Api route /api/Registration/setdetails(.json)? created +1ms

server-connect:setup:routes Api route /api/Security/login(.json)? created +1ms

server-connect:setup:routes Api route /api/Security/logout(.json)? created +1ms

server-connect:setup:routes Api route /api/Security/user(.json)? created +0ms

server-connect:setup:routes Api route /api/charts/incomeExpences(.json)? created +3ms

server-connect:setup:routes Api route /api/charts/quickplanCapitalGrowth(.json)? created +1ms

server-connect:setup:routes Api route /api/charts/quickplanIncomeExpences(.json)? created +1ms

server-connect:setup:routes Api route /api/charts/spending(.json)? created +3ms

server-connect:setup:routes Api route /api/charts/spendingActuals(.json)? created +1ms

App listening at http://localhost:3000

this is what I have in my .htaccess file:

RewriteEngine On

RewriteBase /

RewriteRule ^server/(.*)?$ http://127.0.0.1:3000/$1 [P,L]

Just got it working by changing the .htaccess file to:

DirectoryIndex disabled
RewriteEngine On
RewriteRule ^(.*)$ http://localhost:3000/$1 [P,L]
RewriteRule ^$ http://localhost:3000/ [P,L]

1 Like