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

Posted

技术标签:

【中文标题】如何在共享主机中托管 Node.Js 应用程序 [关闭]【英文标题】:How to host a Node.Js application in shared hosting [closed] 【发布时间】:2014-09-06 19:15:33 【问题描述】:

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

我想在共享主机中托管一个 node.js 应用程序。有没有人有任何参考或文档可以参考?

【问题讨论】:

我认为通过运行 npm build 的方式将生成 js 文件,您可以将其缩小然后包含在您的脚本标签中。使用 vuejs 甚至 angular2 cli 构建时的示例 这行得通 - 可惜我无法发布答案...a2hosting.com/kb/installable-applications/manual-installations/… @Dan-Cornilescu 可以重新打开。这是有价值的。在超级用户中会更好。还找到了我想补充的答案。 在大多数共享主机上安装 Node 和 NPM 会失败(不支持 CentOS);这是一个解决方案(使用 Node v6.2.2) - medium.com/@yatko/… 【参考方案1】:

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

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

这将下载 tar 文件,解压到一个目录,然后将该目录重命名为名称“node”以使其更易于使用。

然后

./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)

我现在可以使用命令了:

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

# ~/node/bin/npm -v
2.10.1

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

【讨论】:

我在jt-js-sample 中尝试了npm start,然后我去了mysite.com:5000,但它说页面不可用。我是否需要改为访问 IP 地址? 那个端口可能被阻塞了,你应该使用标准的80端口 ~/node/bin/npm -v 给我一个错误说: let notifier = require('update-notifier')(pkg) SyntaxError: Unexpected identifier at exports.runInThisContext (vm. js:69:16) 在 Module._compile (module.js:432:25) 在 Object.Module._extensions..js (module.js:467:10) 在 Module.load (module.js:349:32)在 Function.Module._load (module.js:305:12) 在 Function.Module.runMain (module.js:490:10) 在启动时 (node.js:123:16) 在 node.js:1027:3 【参考方案2】:

使用 SSH 连接并关注这些instructions to install Node on a shared hosting

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

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

您重新启动您的外壳(关闭并重新打开您的会话)。那你

nvm install stable

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

在奖励中,您可以非常轻松地切换版本 (nvm use &lt;version&gt;)

如果你有 SSH,就不需要 php 或任何棘手的解决方法。

【讨论】:

您好,感谢您的回答。虽然,我遇到了麻烦,但一旦我使用 nvm 进行安装,它就会说找不到节点。有什么帮助吗? 如果你有那个 node not found 错误与 nvm,也许你应该尝试***.com/a/33874050/328117 大多数共享主机提供商不提供 SSH 访问权限。至少不是我的。 完美运行!!谢谢 @SyamsoulAzrien 如果你有nvm:command not found,你可以运行这个:命令source ~/.nvm/nvm.sh【参考方案3】:

A2 Hosting 允许在其共享主机帐户上使用 node.js。我可以保证我与他们有过积极的经历。

以下是其知识库中关于使用 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。

【讨论】:

谢谢!正是我想要的。 差不多两年后,A2 Hosting 仍然是为数不多的在其共享服务器上正式支持 Node.js 的托管服务提供商之一。可以找到最近的入门指南here 在共享节点 js 托管计划上是否反应和前端运行良好?任何想法 为此写了一篇博客。 medium.com/@pampas93/…【参考方案4】:

可以在具有 Linux、Apache 和 PHP (LAMP) 的典型共享主机上运行 node.js 服务器。我已经成功安装了它,即使 NPM、Express 和 Grunt 工作正常。请按照以下步骤操作:

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) 从 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);

瞧!看看demo of a node app on PHP shared hosting。

编辑:我创建了一个Node.php project on GitHub。

【讨论】:

还要安装 mongoDB 吗? @jsky 应该可以,因为 mongodb 不需要 root。只需关注manual install guide。 没试过,但看起来很漂亮!!!...干得好 建议您相应地更新download URL node.php 很好!【参考方案5】:

您应该寻找提供此类功能的托管公司,但标准的简单静态+PHP+MySQL 托管不会让您使用 node.js。

您需要找到专为 node.js 设计的主机或购买 Virtual Private Server 并自行安装。

【讨论】:

你的意思是不能使用共享主机来托管 Node.js 应用程序 @somesh 有可能——看我的回答。 这是一个很酷的技巧,但请记住,许多共享主机提供商会终止此进程并认为它滥用共享主机帐户... 技术上可能如@niutech所说,但我绝对不会认为它是生产安全的,其他同事(不能提及多个用户)是对的,我相信大多数托管服务提供商会杀死节点进程或你很快就会用完处理器周期时间

以上是关于如何在共享主机中托管 Node.Js 应用程序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 SSH 的情况下在 GoDaddy 共享主机中托管 Laravel 5.2?

在共享主机上托管时如何解决 laravel 的图像上传问题?

如何在共享主机环境中运行 RavenDB?

node.js 可以在任何托管服务提供商中运行吗?

如何在谷歌云上正确托管 node.js 应用程序?

如何通过 firebase 托管在 firebase 上托管 node.js Web 应用程序(包含多个文件夹)?