如何在共享主机中托管 Node.Js 应用程序

如何在共享主机中托管 Node.Js 应用程序

我想在共享主机中托管一个 node.js 应用程序。有人有参考资料或文档吗?

143112 次浏览

您应该寻找提供这种特性的托管公司,但是标准的简单静态 + PHP + M ySQL 托管不允许您使用 node.js。

您需要找到一个专门为 node.js 设计的主机,或者购买一个 虚拟专用服务器并自己安装它。

You 可以 run node.js server on a typical shared hosting with Linux, Apache and PHP (LAMP). I have successfully installed it, even with NPM, Express and Grunt working fine. Follow the steps:

1)使用以下代码在服务器上创建一个新的 PHP 文件并运行它:

<?php
//Download and extract the latest node
exec('curl http://nodejs.org/dist/latest/node-v0.10.33-linux-x86.tar.gz | tar xz');
//Rename the folder for simplicity
exec('mv node-v0.10.33-linux-x86 node');

2)用同样的方法安装你的节点应用,比如 jt-js-sample,使用 npm:

<?php
exec('node/bin/npm install jt-js-sample');

3) Run the node app from PHP:

<?php
//Choose JS file to run
$file = 'node_modules/jt-js-sample/index.js';
//Spawn node server in the background and return its pid
$pid = exec('PORT=49999 node/bin/node ' . $file . ' >/dev/null 2>&1 & echo $!');
//Wait for node to start up
usleep(500000);
//Connect to node server using cURL
$curl = curl_init('http://127.0.0.1:49999/');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//Get the full response
$resp = curl_exec($curl);
if($resp === false) {
//If couldn't connect, try increasing usleep
echo 'Error: ' . curl_error($curl);
} else {
//Split response headers and body
list($head, $body) = explode("\r\n\r\n", $resp, 2);
$headarr = explode("\n", $head);
//Print headers
foreach($headarr as $headval) {
header($headval);
}
//Print body
echo $body;
}
//Close connection
curl_close($curl);
//Close node server
exec('kill ' . $pid);

瞧! 看看 PHP 共享主机上的节点应用程序演示

编辑: 我开始了一个 GitHub 上的 Node.php 项目

我在 Bluehost.com (一个共享服务器)上安装了 Node.js,使用:

wget <path to download file>
tar -xf <gzip file>
mv <gzip_file_dir> node

This will download the tar file, extract to a directory and then rename that directory to the name 'node' to make it easier to use.

那么

./node/bin/npm install jt-js-sample


Returns:
npm WARN engine jt-js-sample@0.2.4: wanted: {"node":"0.10.x"} (current: {"node":"0.12.4","npm":"2.10.1"})
jt-js-sample@0.2.4 node_modules/jt-js-sample
└── express@4.12.4 (merge-descriptors@1.0.0, utils-merge@1.0.0, cookie-signature@1.0.6, methods@1.1.1, cookie@0.1.2, fresh@0.2.4, escape-html@1.0.1, range-parser@1.0.2, finalhandler@0.3.6, content-type@1.0.1, vary@1.0.0, parseurl@1.3.0, serve-static@1.9.3, content-disposition@0.5.0, path-to-regexp@0.1.3, depd@1.0.1, qs@2.4.2, on-finished@2.2.1, debug@2.2.0, etag@1.6.0, proxy-addr@1.0.8, send@0.12.3, type-is@1.6.2, accepts@1.2.7)

I can now use the commands:

# ~/node/bin/node -v
v0.12.4


# ~/node/bin/npm -v
2.10.1

出于安全原因,我将节点目录重命名为其他名称。

A2托管允许 node.js 在他们的共享托管帐户上。我可以保证我和他们有过愉快的经历。

以下是他们的 KnowledgeBase 中关于使用 Apache/LiteSpeed 作为反向代理安装 node.js 的说明: https://www.a2hosting.com/kb/installable-applications/manual-installations/installing-node-js-on-managed-hosting-accounts。设置配置大约需要30分钟,并且可以使用 npm、 Express、 MySQL 等。

参见 a2hosting.com。

连接 SSH 并遵循这些 在共享主机上安装 Node 的说明

简而言之,您首先安装 NVM,然后使用 NVM 安装您选择的 Node 版本。

wget -qO- https://cdn.rawgit.com/creationix/nvm/master/install.sh | bash

重新启动 shell (关闭并重新打开会话)

nvm install stable

例如,安装最新的稳定版本。您可以安装自己选择的任何版本。检查 node --version以获取当前使用的节点版本,并检查 nvm list以查看已安装的内容。

在奖金你可以切换版本很容易(nvm use <version>)

如果您有 SSH,就不需要 PHP 或任何棘手的解决方案。