niutech / node.php

Run node.js apps from PHP even on a shared hosting!
819 stars 235 forks source link

Node.php

Ever wanted to deploy a node.js web app but didn't have money for a dedicated node.js hosting or didn't have time to set up a cloud PaaS? Have an existing PHP shared hosting based on the LAMP stack? Now you can run node.js on top of it!

Node.php originates from my ealier answer on Stack Overflow.

The node.php script installs an official node.js package, starts a hidden server on localhost:49999 with provided JS file and proxies all requests to it.

Warning! This is an alpha version, it may be insecure, run it at your own risk!

Requirements

A PHP web hosting based on Linux with safe mode off and the following functions enabled: curl_exec, exec, passthru.

How to run

  1. Put the node.php file in your public_html (or similar) folder, then install node.js by browsing to: http://example.org/node.php?install.
  2. When succeeded, install your node.js app by uploading its folder or using npm: http://example.org/node.php?npm=install jt-js-sample.
  3. When everything goes fine, start your node.js instance by going to: http://example.org/node.php?start=node_modules/jt-js-sample/index.js.
  4. Now you can request your app by browsing to: http://example.org/node.php?path=optional/request/path. This will return a response from the running node.js app at http://127.0.0.1:49999/optional/request/path.
  5. Finally, stop your node.js server by loading: http://example.org/node.php?stop.

Commands

node.php[?path=some/path] - serves an already running node.js app with an optional request path (no leading slash)

The following commands require the ADMIN_MODE set to true (line 13 of node.php):

node.php?install - downloads and extracts node.js into the node folder.

node.php?uninstall - removes the node folder

node.php?start=node_modules/jt-js-sample/index.js - starts a node.js server running the provided index.js file

node.php?stop - stops a running node.js server

node.php?npm=install jt-js-sample - runs npm install jt-js-sample (may be dangerous!)

Demo

Here is a live demo on a dirt cheap PHP shared hosting.

Troubleshooting

In order to troubleshoot any problems with running node.php, connect to your host using SSH and run exact node.php commands manually:

  1. Go to your document root directory (often ~/public_html/) and check if node directory exists there.

  2. If yes, go to step 3, otherwise download node for your architecture:

    wget http://nodejs.org/dist/node-v5.7.0-linux-x86.tar.gz
    tar -xzf node-v5.7.0-linux-x86.tar.gz
    mv node-v5.7.0-linux-x86/ node/
    rm -f node-v5.7.0-linux-x86.tar.gz
  3. Run node on port 49999 (or other): PORT=49999 node/bin/node [path/to/index.js] &

  4. Connect to node instance: curl http://127.0.0.1:49999/[some/path]

  5. If you get the HTML response, the problem most probably lies in PHP and its permissions.

  6. Kill node process: killall node

License

Node.js is developed by Joyent et al. under the MIT License.

Node.php is developed by Jerzy Głowacki under the MIT License.