Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.
Worker processes keep an application running in the background on your website, start it again if it stops, and pass visitors’ requests to it. Use them for Node.js apps (such as Express or Next.js), Laravel queue workers or any other program that needs to keep running.
Upload your application to your website with the File Manager, SFTP or FTP. Put it outsidepublic_html, for example in a folder called myapp in your home directory, so its source files can’t be downloaded.
Install its packages if it has any. Connect with SSH, go to the app’s folder and run npm install.
Make sure your app listens on 0.0.0.0 and a fixed port, such as 3000.
If your website also runs WordPress or another site, don’t send the whole website to your app. Use a path such as /app instead (see step 4). Proxying / sends every visitor to your app, and your existing website stops showing.
Go to Websites, click your website, then open Advanced → Worker processes and click Launch. You can also click Launch on the website card on the Home tab.
2
Choose how it runs
Automatic (Production): your worker process will be started automatically and restarted if it exits. Choose this for live apps.
Manual (Development): requests are passed to your app, but it isn’t started for you. Use this while you start and stop the app yourself over SSH.
3
Pick a type and enter the command
Choose Node.js, Custom, Laravel or PHP. Each fills in a typical command that you can change:
Type
Default startup command
Extra option
Node.js
npm start
Node.js version: Stable or a specific version from 15 to 26
Laravel
php artisan queue:work
PHP
php -S 0.0.0.0:8000 -t public
PHP version
Custom
Your own command
In Working directory, enter the folder that contains your app, for example myapp. Leave it empty to use your home directory.
The Launch worker process form
4
Set up the HTTP proxy
Leave HTTP Proxy on if visitors should reach your app through your domain.
Path: where the app appears. For example, app makes it available at https://yourdomain.com/app. Leave it empty to send the whole website to your app.
Port: the port your app listens on, for example 3000.
Allow web socket proxy upgrade: tick this if your app uses websockets (for example live chat or Socket.IO).
Turn HTTP Proxy off for background workers that don’t serve web pages, such as a Laravel queue worker.
5
Click Launch
The worker appears as a card. The first time you launch a Node.js worker, Node.js is downloaded and installed for you, which can take a minute. Click View logs to watch.
6
Test it
Open https://yourdomain.com/app (or the path you chose) in your browser. In our test, a small app was answering about 15 seconds after it was saved.
Click the pencil next to Startup command, Working directory, Proxy status, Proxy path or Proxy port to change it. Changing the startup command shows Startup command updated and restarts the app.
Use the Version and Start mode drop-downs to switch Node.js version or between Automatic and Manual.
View logs shows everything your app prints, plus start-up messages. The same log is saved as a persistent_app_….log file in your home directory.
⋮ → Delete removes the worker.
The website card on the Home tab shows the worker’s status, for example Running.
The app isn’t running or isn’t listening where the proxy expects it.
Open View logs and look for errors.
Check the Proxy port matches the port your app listens on, and that it listens on 0.0.0.0.
If Node.js is still being installed, wait a minute and refresh.
The app keeps restarting
The startup command fails straight away. Check View logs. Put your code in a file and run it with a simple command such as node app.js or npm start rather than a long command with lots of quotes.
Cannot find module
The app’s packages aren’t installed. Connect with SSH, go to the app’s folder and run npm install, then change the startup command (or restart the worker) to try again. Make sure Working directory points to the folder that contains package.json.
My WordPress site disappeared
The worker’s Proxy path is empty or /, so the whole website goes to your app. Set a path such as app, or delete the worker.
The Deploy from GitHub option in Add website and the website’s GitHub tab can deploy apps from a GitHub repository. GitHub deployment isn’t available on a website that already has an app (such as WordPress) installed.
Ready to upgrade your hosting? Use code KB20 at checkout for 20% off your first order!
Last Updated: October 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"FREAKHOSTING","colors":{"primary":"#1a6fd1","light":"#4da3ff","dark":"#1a6fd1"},"favicon":"https://cdn.freakhosting.com/website/favicon.ico","appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#ffffff","dark":"#0a0e17"}},"seo":{"metatags":{"og:image":"https://cdn.freakhosting.com/core/assets/heldesk-main.png","og:site_name":"FREAKHOSTING Help Center","og:locale":"en_GB","twitter:site":"@freakhosting","twitter:card":"summary_large_image","author":"FREAKHOSTING LTD","robots":"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1","copyright":"Copyright 2018-2026 FREAKHOSTING LTD","theme-color":"#0a0e17","color-scheme":"light dark"},"organization":{"id":"https://freakhosting.com/#organization","name":"FREAKHOSTING","legalName":"FREAKHOSTING LTD","url":"https://freakhosting.com","logo":"https://cdn.freakhosting.com/core/assets/img/logo-footer.png","sameAs":["https://x.com/freakhosting","https://discord.gg/freakhosting","https://github.com/freakhosting"]},"indexing":"all"},"integrations":{"ga4":{"measurementId":"G-TSY6L544EM"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity",{"title":"Order a Server","description":"Browse our game server hosting plans","icon":"server","href":"https://freakhosting.com"},{"title":"Submit a Ticket","description":"Contact our 24/7 support team","icon":"ticket","href":"https://freakhosting.com/clientarea/submitticket.php"},{"title":"Join Discord","description":"Get community support and updates","icon":"discord","href":"https://discord.gg/freakhosting"}],"display":"header"},"interaction":{"drilldown":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"freakhostingltd","hasAudioNarration":false,"actualSubdomain":"freakhostingltd","customDomains":["help.freakhosting.com"],"gitSource":{"type":"github","owner":"freakhosting","repo":"help.freakhosting.com","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6aecadf81f2bb168c88a53ac","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Games","count":763},{"language":"default","tag":"Game Panel guides","count":225},{"language":"default","tag":"Other","count":208},{"language":"default","tag":"Survival Games","count":192},{"language":"default","tag":"Commands \u0026 settings","count":186},{"language":"default","tag":"Popular Games","count":179},{"language":"default","tag":"Guides \u0026 tips","count":169},{"language":"default","tag":"Shooters","count":136},{"language":"default","tag":"Troubleshooting","count":94},{"language":"default","tag":"Start here","count":93}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"portals/web-panel/how-to-deploy-nodejs-applications","slug":"/portals/web-panel/how-to-deploy-nodejs-applications","pageMetadata":{"title":"How to Run a Node.js App with Worker Processes","sidebarTitle":"Node.js \u0026 Worker Processes","description":"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.","keywords":["FREAKHOSTING","web hosting","Node.js","worker process","npm start","Express","Laravel queue","reverse proxy","websocket","persistent app"],"href":"/portals/web-panel/how-to-deploy-nodejs-applications"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Worker processes`}),` keep an application running in the background on your website, start it again if it stops, and pass visitors’ requests to it. Use them for Node.js apps (such as Express or Next.js), Laravel queue workers or any other program that needs to keep running.`]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Difficulty`,icon:`gauge-high`,children:_jsx(_components.p,{children:`Advanced`})}),_jsx(Card,{title:`Time`,icon:`clock`,children:_jsx(_components.p,{children:`10–15 minutes`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Upload your application to your website with the `,_jsx(_components.a,{href:`/portals/web-panel/how-to-use-the-file-manager`,children:`File Manager`}),`, `,_jsx(_components.a,{href:`/portals/web-panel/how-to-connect-with-ssh-and-sftp`,children:`SFTP`}),` or `,_jsx(_components.a,{href:`/portals/web-panel/how-to-create-and-manage-ftp-accounts`,children:`FTP`}),`. Put it `,_jsx(_components.strong,{children:`outside`}),` `,_jsx(_components.code,{children:`public_html`}),`, for example in a folder called `,_jsx(_components.code,{children:`myapp`}),` in your home directory, so its source files can’t be downloaded.`]}),`\n`,_jsxs(_components.li,{children:[`Install its packages if it has any. Connect with `,_jsx(_components.a,{href:`/portals/web-panel/how-to-connect-with-ssh-and-sftp`,children:`SSH`}),`, go to the app’s folder and run `,_jsx(_components.code,{children:`npm install`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Make sure your app listens on `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`0.0.0.0`})}),` and a fixed `,_jsx(_components.strong,{children:`port`}),`, such as `,_jsx(_components.code,{children:`3000`}),`.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If your website also runs WordPress or another site, don’t send the whole website to your app. Use a path such as `,_jsx(_components.code,{children:`/app`}),` instead (see step 4). Proxying `,_jsx(_components.code,{children:`/`}),` sends `,_jsx(_components.strong,{children:`every`}),` visitor to your app, and your existing website stops showing.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`launch-a-worker-process`,children:`Launch a worker process`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Worker processes`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://web.freakhosting.com/websites`,children:_jsx(_components.strong,{children:`Websites`})}),`, click your website, then open `,_jsx(_components.strong,{children:`Advanced`}),` → `,_jsx(_components.strong,{children:`Worker processes`}),` and click `,_jsx(_components.strong,{children:`Launch`}),`. You can also click `,_jsx(_components.strong,{children:`Launch`}),` on the website card on the `,_jsx(_components.strong,{children:`Home`}),` tab.`]})}),_jsx(Step,{title:`Choose how it runs`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Automatic (Production)`}),`: your worker process will be started automatically and restarted if it exits. Choose this for live apps.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Manual (Development)`}),`: requests are passed to your app, but it isn’t started for you. Use this while you start and stop the app yourself over SSH.`]}),`\n`]})}),_jsxs(Step,{title:`Pick a type and enter the command`,children:[_jsxs(_components.p,{children:[`Choose `,_jsx(_components.strong,{children:`Node.js`}),`, `,_jsx(_components.strong,{children:`Custom`}),`, `,_jsx(_components.strong,{children:`Laravel`}),` or `,_jsx(_components.strong,{children:`PHP`}),`. Each fills in a typical command that you can change:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Default startup command`}),_jsx(_components.th,{children:`Extra option`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Node.js`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`npm start`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Node.js version`}),`: Stable or a specific version from 15 to 26`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Laravel`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`php artisan queue:work`})}),_jsx(_components.td,{})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`PHP`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`php -S 0.0.0.0:8000 -t public`})}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`PHP version`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Custom`})}),_jsx(_components.td,{children:`Your own command`}),_jsx(_components.td,{})]})]})]}),_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Working directory`}),`, enter the folder that contains your app, for example `,_jsx(_components.code,{children:`myapp`}),`. Leave it empty to use your home directory.`]}),_jsx(Frame,{caption:`The Launch worker process form`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=0cb73280075fb6611d4b90af4619ad4a`,alt:`Launch worker process form with Automatic and Manual options, Node.js, Custom, Laravel and PHP buttons, a Node.js version drop-down set to stable, startup command npm start, working directory, an HTTP Proxy toggle, path, port 3000 and a web socket checkbox`,\"data-og-width\":`1110`,width:`1110`,\"data-og-height\":`822`,height:`822`,\"data-path\":`images/web-panel/worker-launch.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?w=280\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=407bde1dd036216b45d0922815727749 280w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?w=560\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=5ca2eab83356eb94072e9f179c159283 560w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?w=840\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=80862770b4b6e2f9571cb2187b9544a0 840w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?w=1100\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=2b614c6629e2f017401a8f6ea8e57e8a 1100w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?w=1650\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=cd5ed55cfa936a941d7af5fc10fdd94b 1650w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-launch.png?w=2500\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=8b72929324ad7679f89226fbb2036de6 2500w`})})]}),_jsxs(Step,{title:`Set up the HTTP proxy`,children:[_jsxs(_components.p,{children:[`Leave `,_jsx(_components.strong,{children:`HTTP Proxy`}),` on if visitors should reach your app through your domain.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Path`}),`: where the app appears. For example, `,_jsx(_components.code,{children:`app`}),` makes it available at `,_jsx(_components.code,{children:`https://yourdomain.com/app`}),`. Leave it empty to send the whole website to your app.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Port`}),`: the port your app listens on, for example `,_jsx(_components.code,{children:`3000`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Allow web socket proxy upgrade`}),`: tick this if your app uses websockets (for example live chat or Socket.IO).`]}),`\n`]}),_jsxs(_components.p,{children:[`Turn `,_jsx(_components.strong,{children:`HTTP Proxy`}),` off for background workers that don’t serve web pages, such as a Laravel queue worker.`]})]}),_jsx(Step,{title:`Click Launch`,children:_jsxs(_components.p,{children:[`The worker appears as a card. The first time you launch a Node.js worker, Node.js is downloaded and installed for you, which can take a minute. Click `,_jsx(_components.strong,{children:`View logs`}),` to watch.`]})}),_jsx(Step,{title:`Test it`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.code,{children:`https://yourdomain.com/app`}),` (or the path you chose) in your browser. In our test, a small app was answering about 15 seconds after it was saved.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`manage-a-worker-process`,children:`Manage a worker process`}),`\n`,_jsx(Frame,{caption:`A running Node.js worker`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=4e643e4a8027eec2a64f7bbd9399a31a`,alt:`Worker processes page with a Node.js worker card showing startup command node app.js, version Stable, working directory Home directory, start mode Automatic, proxy status HTTP, proxy path /node and proxy port 3000`,\"data-og-width\":`1473`,width:`1473`,\"data-og-height\":`427`,height:`427`,\"data-path\":`images/web-panel/worker-card.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?w=280\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=26bb05676365c9f911e7d2425c35506f 280w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?w=560\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=bf63f946898942783cebbbd44c69c64e 560w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?w=840\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=8302b8e36008850741fe43c032a20d06 840w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?w=1100\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=85fc3e980bebf1b85a9f1418e3abcfa8 1100w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?w=1650\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=5202c696881e8e5c95f669821f933b0b 1650w, https://mintcdn.com/freakhostingltd/p0TGPFhMJ61UBHgI/images/web-panel/worker-card.png?w=2500\u0026fit=max\u0026auto=format\u0026n=p0TGPFhMJ61UBHgI\u0026q=85\u0026s=59d7bfe62b3733b0d7deaf4ceba3dc04 2500w`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`pencil`}),` next to `,_jsx(_components.strong,{children:`Startup command`}),`, `,_jsx(_components.strong,{children:`Working directory`}),`, `,_jsx(_components.strong,{children:`Proxy status`}),`, `,_jsx(_components.strong,{children:`Proxy path`}),` or `,_jsx(_components.strong,{children:`Proxy port`}),` to change it. Changing the startup command shows `,_jsx(_components.em,{children:`Startup command updated`}),` and restarts the app.`]}),`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.strong,{children:`Version`}),` and `,_jsx(_components.strong,{children:`Start mode`}),` drop-downs to switch Node.js version or between `,_jsx(_components.strong,{children:`Automatic`}),` and `,_jsx(_components.strong,{children:`Manual`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`View logs`}),` shows everything your app prints, plus start-up messages. The same log is saved as a `,_jsx(_components.code,{children:`persistent_app_….log`}),` file in your home directory.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`⋮`}),` → `,_jsx(_components.strong,{children:`Delete`}),` removes the worker.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The website card on the `,_jsx(_components.strong,{children:`Home`}),` tab shows the worker’s status, for example `,_jsx(_components.strong,{children:`Running`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`example-a-minimal-node-js-app`,children:`Example: a minimal Node.js app`}),`\n`,_jsxs(_components.p,{children:[`To check everything works, create a file called `,_jsx(_components.code,{children:`app.js`}),` in your home directory with the `,_jsx(_components.a,{href:`/portals/web-panel/how-to-use-the-file-manager`,children:`File Manager`}),` containing:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` http`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` require`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'http'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`http`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createServer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`end`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Hello from Node.js'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`listen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'0.0.0.0'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Launch a `,_jsx(_components.strong,{children:`Node.js`}),` worker with the startup command `,_jsx(_components.code,{children:`node app.js`}),`, path `,_jsx(_components.code,{children:`node`}),` and port `,_jsx(_components.code,{children:`3000`}),`. Visiting `,_jsx(_components.code,{children:`https://yourdomain.com/node`}),` shows `,_jsx(_components.em,{children:`Hello from Node.js`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`503 Service Unavailable on the app's address`,id:`503-service-unavailable-on-the-apps-address`,children:[_jsx(_components.p,{children:`The app isn’t running or isn’t listening where the proxy expects it.`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.strong,{children:`View logs`}),` and look for errors.`]}),`\n`,_jsxs(_components.li,{children:[`Check the `,_jsx(_components.strong,{children:`Proxy port`}),` matches the port your app listens on, and that it listens on `,_jsx(_components.code,{children:`0.0.0.0`}),`.`]}),`\n`,_jsx(_components.li,{children:`If Node.js is still being installed, wait a minute and refresh.`}),`\n`]})]}),_jsx(Accordion,{title:`The app keeps restarting`,id:`the-app-keeps-restarting`,children:_jsxs(_components.p,{children:[`The startup command fails straight away. Check `,_jsx(_components.strong,{children:`View logs`}),`. Put your code in a file and run it with a simple command such as `,_jsx(_components.code,{children:`node app.js`}),` or `,_jsx(_components.code,{children:`npm start`}),` rather than a long command with lots of quotes.`]})}),_jsx(Accordion,{title:`Cannot find module`,id:`cannot-find-module`,children:_jsxs(_components.p,{children:[`The app’s packages aren’t installed. Connect with SSH, go to the app’s folder and run `,_jsx(_components.code,{children:`npm install`}),`, then change the startup command (or restart the worker) to try again. Make sure `,_jsx(_components.strong,{children:`Working directory`}),` points to the folder that contains `,_jsx(_components.code,{children:`package.json`}),`.`]})}),_jsx(Accordion,{title:`My WordPress site disappeared`,id:`my-wordpress-site-disappeared`,children:_jsxs(_components.p,{children:[`The worker’s `,_jsx(_components.strong,{children:`Proxy path`}),` is empty or `,_jsx(_components.code,{children:`/`}),`, so the whole website goes to your app. Set a path such as `,_jsx(_components.code,{children:`app`}),`, or delete the worker.`]})})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Deploy from GitHub`}),` option in `,_jsx(_components.a,{href:`/portals/web-panel/how-to-add-and-manage-websites`,children:`Add website`}),` and the website’s `,_jsx(_components.strong,{children:`GitHub`}),` tab can deploy apps from a GitHub repository. GitHub deployment isn’t available on a website that already has an app (such as WordPress) installed.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsxs(Note,{children:[_jsx(Heading,{level:`3`,id:`need-extra-help`,children:`Need Extra Help?`}),_jsx(_components.p,{children:`If you encounter any issues, our support team is ready to assist:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Live Chat:`}),` Quick assistance via our website.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Support Ticket:`}),` `,_jsx(_components.a,{href:`https://freakhosting.com/clientarea/submitticket.php`,children:`Open a Ticket`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Discord:`}),` `,_jsx(_components.a,{href:`https://discord.gg/freakhosting`,children:`Join our Community`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Email:`}),` `,_jsx(_components.a,{href:`mailto:support@freakhosting.com`,children:`support@freakhosting.com`})]}),`\n`]})]}),`\n`,_jsxs(Tip,{children:[_jsx(Heading,{level:`3`,id:`save-on-your-hosting`,children:`Save on Your Hosting`}),_jsxs(_components.p,{children:[`Ready to upgrade your hosting? Use code `,_jsx(_components.strong,{children:`KB20`}),` at checkout for `,_jsx(_components.strong,{children:`20% off`}),` your first order!`]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(`div`,{align:`center`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Last Updated:`}),` October 2026`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"How to Run a Node.js App with Worker Processes","sidebarTitle":"Node.js \u0026 Worker Processes","description":"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.","keywords":["FREAKHOSTING","web hosting","Node.js","worker process","npm start","Express","Laravel queue","reverse proxy","websocket","persistent app"],"href":"/portals/web-panel/how-to-deploy-nodejs-applications"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Launch a worker process","slug":"launch-a-worker-process","depth":2,"children":[]},{"title":"Manage a worker process","slug":"manage-a-worker-process","depth":2,"children":[]},{"title":"Example: a minimal Node.js app","slug":"example-a-minimal-node-js-app","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[{"title":"Need Extra Help?","slug":"need-extra-help","depth":3,"children":[]},{"title":"Save on Your Hosting","slug":"save-on-your-hosting","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"freakhostingltd","siteName":"FREAKHOSTING","title":"How to Run a Node.js App with Worker Processes - FREAKHOSTING","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T16:57:31.115Z","originalFileLocation":"portals/web-panel/how-to-deploy-nodejs-applications.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.\">\u003cmeta data-mint-head name=\"application-name\" content=\"FREAKHOSTING\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/x-icon\" sizes=\"180x180\" href=\"https://cdn.freakhosting.com/website/favicon.ico\">\u003clink data-mint-head rel=\"icon\" type=\"image/x-icon\" sizes=\"32x32\" href=\"https://cdn.freakhosting.com/website/favicon.ico\">\u003clink data-mint-head rel=\"icon\" type=\"image/x-icon\" sizes=\"16x16\" href=\"https://cdn.freakhosting.com/website/favicon.ico\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://cdn.freakhosting.com/website/favicon.ico\">\u003cmeta data-mint-head property=\"og:title\" content=\"How to Run a Node.js App with Worker Processes - FREAKHOSTING\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FREAKHOSTING Help Center\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cdn.freakhosting.com/core/assets/heldesk-main.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"How to Run a Node.js App with Worker Processes - FREAKHOSTING\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cdn.freakhosting.com/core/assets/heldesk-main.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/freakhostingltd/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FREAKHOSTING\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1a6fd1\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_GB\">\u003cmeta data-mint-head name=\"author\" content=\"FREAKHOSTING LTD\">\u003cmeta data-mint-head name=\"copyright\" content=\"Copyright 2018-2026 FREAKHOSTING LTD\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#0a0e17\">\u003cmeta data-mint-head name=\"color-scheme\" content=\"light dark\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/portals/web-panel/how-to-deploy-nodejs-applications.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://freakhosting.com/#organization\",\"name\":\"FREAKHOSTING\",\"legalName\":\"FREAKHOSTING LTD\",\"url\":\"https://freakhosting.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://cdn.freakhosting.com/core/assets/img/logo-footer.png\"},\"sameAs\":[\"https://x.com/freakhosting\",\"https://discord.gg/freakhosting\",\"https://github.com/freakhosting\"]},{\"@type\":\"WebSite\",\"@id\":\"https://help.freakhosting.com#website\",\"name\":\"FREAKHOSTING\",\"url\":\"https://help.freakhosting.com\",\"publisher\":{\"@id\":\"https://freakhosting.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications#webpage\",\"url\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications\",\"name\":\"How to Run a Node.js App with Worker Processes\",\"description\":\"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.\",\"dateModified\":\"2026-10-24T16:57:31.115Z\",\"isPartOf\":{\"@id\":\"https://help.freakhosting.com#website\"},\"breadcrumb\":{\"@id\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Performance \u0026 PHP\",\"item\":\"https://help.freakhosting.com/portals/web-panel/how-to-optimize-website-performance\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Run a Node.js App with Worker Processes\",\"item\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications#article\",\"headline\":\"How to Run a Node.js App with Worker Processes\",\"name\":\"How to Run a Node.js App with Worker Processes\",\"description\":\"Run a Node.js, Laravel or other long-running application on your FREAKHOSTING web hosting with Worker processes, choose the Node.js version, and make it available on your domain.\",\"url\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications\",\"mainEntityOfPage\":{\"@id\":\"https://help.freakhosting.com/portals/web-panel/how-to-deploy-nodejs-applications#webpage\"},\"image\":\"https://cdn.freakhosting.com/core/assets/heldesk-main.png\",\"dateModified\":\"2026-10-24T16:57:31.115Z\",\"keywords\":\"FREAKHOSTING, web hosting, Node.js, worker process, npm start, Express, Laravel queue, reverse proxy, websocket, persistent app\",\"publisher\":{\"@id\":\"https://freakhosting.com/#organization\"},\"isPartOf\":{\"@id\":\"https://help.freakhosting.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FREAKHOSTING\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"FREAKHOSTING\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/portals/web-panel/how-to-deploy-nodejs-applications.md","siteName":"FREAKHOSTING","nav":{"global":null,"tabs":[{"tab":"Get Started","icon":"rocket","pages":[{"title":"Get Started","href":"/get-started/welcome"}]},{"tab":"Billing Area","icon":"credit-card","pages":[{"title":"Billing Area","href":"/portals/billing/how-to-login-and-access-the-billing-panel"}]},{"tab":"Game Panel","icon":"gamepad","pages":[{"title":"Game Panel","href":"/portals/game-panel/how-to-login-and-access-the-game-panel"}]},{"tab":"VPS Panel","icon":"server","pages":[{"title":"VPS Panel","href":"/portals/vps-panel/how-to-login-and-access-the-vps-control-panel"}]},{"tab":"Web Panel","icon":"globe","groups":[{"group":"Getting Started","pages":[{"title":"How to Find Your Way Around the Web Hosting Panel","sidebarTitle":"Panel Overview","href":"/portals/web-panel/web-panel-overview-and-dashboard"},{"title":"How to Add, Restart, Disable and Delete a Website","sidebarTitle":"Manage Websites","href":"/portals/web-panel/how-to-add-and-manage-websites"},{"title":"How to Install WordPress and Other Apps","sidebarTitle":"Install WordPress \u0026 Apps","href":"/portals/web-panel/how-to-install-wordpress-and-web-apps"},{"title":"How to Manage WordPress With the WordPress Toolkit","sidebarTitle":"WordPress Toolkit","href":"/portals/web-panel/how-to-manage-wordpress-with-the-toolkit"},{"title":"How to Give Someone Access to Your Websites","sidebarTitle":"Team \u0026 Collaborators","href":"/portals/web-panel/how-to-invite-team-members-and-collaborators"},{"title":"How to Manage Your Panel Account, Two-Factor Authentication and Plan Usage","sidebarTitle":"Account, 2FA \u0026 Usage","href":"/portals/web-panel/how-to-manage-your-account-and-two-factor-authentication"}]},{"group":"File Management","pages":[{"title":"How to Use the File Manager","sidebarTitle":"File Manager","href":"/portals/web-panel/how-to-use-the-file-manager"},{"title":"How to Create and Manage FTP Accounts","sidebarTitle":"FTP Accounts","href":"/portals/web-panel/how-to-create-and-manage-ftp-accounts"},{"title":"How to Connect to Your Website with SSH and SFTP","sidebarTitle":"SSH \u0026 SFTP Access","href":"/portals/web-panel/how-to-connect-with-ssh-and-sftp"}]},{"group":"Domains \u0026 DNS","pages":[{"title":"How to Point Your Domain and Manage Domains and Subdomains","sidebarTitle":"Domains \u0026 Subdomains","href":"/portals/web-panel/how-to-manage-domains-and-dns-records"},{"title":"How to Manage DNS Records and DNSSEC","sidebarTitle":"DNS Records \u0026 DNSSEC","href":"/portals/web-panel/how-to-manage-dns-records-and-dnssec"},{"title":"How to Set Up DKIM, Mail Routing and Gmail for Your Domain","sidebarTitle":"Email Authentication \u0026 Routing","href":"/portals/web-panel/how-to-configure-email-authentication-and-routing"},{"title":"How to Set Up URL Redirects","sidebarTitle":"URL Redirects","href":"/portals/web-panel/how-to-setup-url-redirects"},{"title":"How to Connect Cloudflare or Slack to Your Web Hosting","sidebarTitle":"Cloudflare \u0026 Slack","href":"/portals/web-panel/how-to-connect-cloudflare-and-slack-integrations"}]},{"group":"Databases","pages":[{"title":"How to Create and Manage MySQL Databases","sidebarTitle":"MySQL Databases","href":"/portals/web-panel/how-to-manage-mysql-databases"}]},{"group":"SSL \u0026 Security","pages":[{"title":"How to Get a Free SSL Certificate and Force HTTPS","sidebarTitle":"SSL \u0026 HTTPS","href":"/portals/web-panel/how-to-manage-ssl-certificates-and-https"},{"title":"How to Install a Custom SSL Certificate and Fix SSL Problems","sidebarTitle":"Custom SSL \u0026 Troubleshooting","href":"/portals/web-panel/how-to-install-custom-ssl-and-troubleshoot"}]},{"group":"Email Services","pages":[{"title":"How to Create and Manage Email Accounts","sidebarTitle":"Email Accounts","href":"/portals/web-panel/how-to-create-and-manage-email-accounts"},{"title":"How to Configure Spam Filtering, Forwarding and Auto-Replies","sidebarTitle":"Spam, Forwarding \u0026 Auto-Replies","href":"/portals/web-panel/how-to-configure-email-spam-and-forwarding"},{"title":"How to Use Webmail and Set Up Email on Your Computer or Phone","sidebarTitle":"Webmail \u0026 Email Apps","href":"/portals/web-panel/how-to-setup-email-clients-and-devices"}]},{"group":"Performance \u0026 PHP","pages":[{"title":"How to Speed Up Your Website","sidebarTitle":"Website Performance","href":"/portals/web-panel/how-to-optimize-website-performance"},{"title":"How to Change Your PHP Version, Extensions and php.ini Settings","sidebarTitle":"PHP Version \u0026 Settings","description":"Change your website's PHP version, turn PHP extensions on or off, edit php.ini settings such as memory_limit, read the PHP error log and restart PHP in the FREAKHOSTING Web Panel.","href":"/portals/web-panel/how-to-change-php-version"},{"title":"How to Run a Node.js App with Worker Processes","sidebarTitle":"Node.js \u0026 Worker Processes","href":"/portals/web-panel/how-to-deploy-nodejs-applications"},{"title":"How to Set Up Cron Jobs (Scheduled Tasks)","sidebarTitle":"Cron Jobs","description":"Run a command or open a web address automatically on a schedule with cron jobs in the FREAKHOSTING Web Panel, for example for WordPress cron, backups scripts or Laravel's scheduler.","href":"/portals/web-panel/how-to-set-up-cron-jobs"}]},{"group":"Backups \u0026 Analytics","pages":[{"title":"How to Restore Your Website From a Backup","sidebarTitle":"Backups \u0026 Restore","href":"/portals/web-panel/how-to-create-and-restore-backups"},{"title":"How to Check Your Website's Visitors and Bandwidth","sidebarTitle":"Analytics \u0026 Bandwidth","href":"/portals/web-panel/understanding-website-analytics-and-bandwidth"}]}]},{"tab":"Firewall Panel","icon":"shield","pages":[{"title":"Firewall Panel","href":"/portals/firewall/firewall-panel-overview"}]},{"tab":"Games","icon":"dice","pages":[{"title":"Games","href":"/games/getting-started"}]},{"tab":"Other","icon":"ellipsis","pages":[{"title":"Other","href":"/portals/other/vps-and-dedicated-server-guides"}]}]},"basePath":"","title":"How to Run a Node.js App with Worker Processes - FREAKHOSTING","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-rZ_6yn08.js","DynamicMarkdown-D3RQ-fEj.js","zoom-image-lightbox-CMHgNu49.js","lightbox-handle-r17bVUz3.js"]}