在cpanel托管服务器上运行node.js.

时间:2017-05-19 21:10:42

标签: node.js cpanel

这是一个简单的node.js代码。

UPDATE TASK SET all_done=1 WHERE t_id NOT in (SELECT distinct t_id from subtask where done=0)

我将它上传到cpanel托管服务器并安装了node.js并运行它。 如果服务器是普通服务器,我可以通过访问' http:// {serverip}:8080'来检查脚本结果。但是在cpanel上托管域和子域,每个域都匹配每个域。甚至http:// {serverip}也不是有效的网址。 如何访问我的node.js结果? 请教我。 谢谢。 冰冰。

6 个答案:

答案 0 :(得分:16)

cPanel通常运行Apache或在所有cPanel / unix帐户之间共享的其他Web服务器。 Web服务器侦听端口80.根据请求的URL中的域名,Web服务器使用"虚拟主机"找出哪个cPanel / unix帐户应该处理请求,即在哪个主目录中找到要服务的文件和要运行的脚本。如果URL仅包含IP地址,则cPanel必须默认为cPanel帐户之一。

通常,如果没有root访问权限,cPanel帐户运行的作业就无法侦听端口80.实际上,可用端口可能非常严格。如果8080不起作用,您可以尝试60000.要访问正在运行的node.js服务器,您需要拥有它正在侦听的端口号。由于这是监听该服务器上该端口的唯一作业,因此您应该能够将浏览器指向任何cPanel帐户的域名,甚至是服务器的IP地址,并将端口号添加到URL。但是,对于运行node.js作业的cPanel帐户,使用域名是典型的,例如, http://cPanelDomainName.com:60000/

当然,端口80是Web服务的默认设置,相对较少的用户熟悉URL中的可选端口号。为了方便用户,您可以使用Apache来反向代理"请求端口80到node.js进程正在侦听的端口。这可以使用配置或.htaccess文件中的Apache的RewriteRule指令来完成。对请求的这种反向代理也可以具有其他好处,例如, Apache可能是面向公共互联网的更安全,可靠和可管理的前端。

不幸的是,node.js的这种设置并未得到所有网络托管公司的认可。 A2Hosting.com是一家支持它的托管公司,即使是廉价的共享托管产品。他们还在其知识库中清楚地描述了设置过程。

最后,值得注意的是cPanel的开发人员正在开发内置的node.js支持。 "如果所有星星都对齐,我们可能会在第68版中看到这片土地,"也许是2018年初。

参考

Apache虚拟主机 - http://httpd.apache.org/docs/2.4/vhosts/

Apache RewriteRule指令 - http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

A2Hosting.com有关配置Node.js的知识库文章 - https://www.a2hosting.com/kb/installable-applications/manual-installations/installing-node-js-on-managed-hosting-accounts

node.js的cPanel功能请求线程支持 - https://features.cpanel.net/topic/nodejs-hosting

相关的StackOverflow问题

How to host a Node.Js application in shared hosting

Why node.js can't run on shared hosting?

答案 1 :(得分:14)

使用CPanel安装/设置NodeJS

1。使用SSH登录到您的帐户(您的帐户未启用该功能)     请与支持小组联系。)

2。下载NodeJS

  

wget https://nodejs.org/dist/latest/node-v10.0.0-linux-arm64.tar.xz

3。提取NodeJS文件

  

tar xvf节点-v10.0.0-linux-arm64.tar.xz

4。现在将文件夹重命名为nodejs名称,执行以下操作     命令

  

mv node-v10.0.0-linux nodejs

5。现在安装node和npm二进制文件,键入以下命令:

  

mkdir〜/ bin
cp nodejs / bin / node〜/ bin
cd〜/ bin
ln -s   ../nodejs/lib/node_modules/npm/bin/npm-cli.js npm

6。 Node.js和npm已安装在您的帐户上。要验证,请输入     遵循命令

  

node --version
npm --version

The ~/bin directory is in your path by default, which means you can run node and npm from any directory in your account.

7。启动Node.js应用程序

  

nohup节点my_app.js&

8。停止应用程序

  

杀死节点

9。将Node.js应用程序与Web服务器集成(可选)

根据您正在运行的Node.js应用程序的类型,您可能希望能够使用Web浏览器对其进行访问。为此,您需要为Node.js应用程序选择一个未使用的端口以进行侦听,然后定义将访问者重定向到该应用程序的服务器重写规则。

在文本编辑器中,将以下行添加到/ home / username / public_html目录中的.htaccess文件中,其中username代表您的帐户用户名:

RewriteEngine On
RewriteRule ^$ http://127.0.0.1:XXXXX/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:XXXXX/$1 [P,L]

在两个RewriteRule行中,将XXXXX替换为Node.js应用程序侦听的端口。 要在受管服务器上运行Node.js应用程序,必须选择一个未使用的端口,并且端口号必须在49152和65535(含)之间。 将更改保存到.htaccess文件,然后退出文本编辑器。您网站的访问者将重定向到在指定端口上侦听的Node.js应用程序。

如果您的应用程序无法启动,则您选择的端口可能已在使用中。检查应用程序日志中是否有指示该端口正在使用的错误代码,例如EADDRINUSE。如果是,请选择其他端口号,更新应用程序的配置和.htaccess文件,然后重试。

答案 2 :(得分:3)

您可以使用指向该cPanel服务器的任何域,而不是访问http://server-ip:8080尝试访问http://domain.tld:8080。默认情况下,cPanel不会在端口8080上绑定。请务必检查服务器上是否有防火墙。如果是,则允许tcp端口8080上的传入连接。根据您的WHM服务器配置,它也应该与http://server-ip:8080

一起使用

答案 3 :(得分:2)

cPanel版本80具有nodejs 10.x支持:https://documentation.cpanel.net/display/80Docs/80+Release+Notes#id-80ReleaseNotes-InstallanduseNode.jsapplications

  

安装和使用Node.js应用程序

     

您现在可以在服务器上安装和使用Node.js应用程序。至   使用Node.js,在附加程序包中安装ea-nodejs10模块   WHM的EasyApache 4接口部分(WHM >>主页>>软件>>   EasyApache 4)。

     

您可以在cPanel的应用程序管理器中注册Node.js应用程序   界面(cPanel >>主页>>软件>> Application Manager)。对于   有关更多信息,请阅读我们的Node.js安装指南。   文档。

要启用Application Manager:https://documentation.cpanel.net/display/80Docs/Application+Manager

  

您的托管服务提供商必须在中启用“应用程序管理器”功能   WHM的功能管理器界面(WHM >>主页>>程序包>>功能   经理)。

     

您的托管服务提供商必须安装以下Apache模块:

     

ea-ruby24-mod_passengermodule。注意:此模块禁用Apache的   mod_userdir模块。

     

ea-apache24-mod_env模块。注意:此模块允许您添加   注册应用程序时使用环境变量。欲了解更多   有关环境变量的信息,请阅读环境   下面的变量部分。

     

如果要注册Node.js™应用程序,则使用ea-nodejs10模块。

您可以在以下YouTube视频中看到应用程序管理器的外观: https://www.youtube.com/watch?v=ATxMYzLbRco

答案 4 :(得分:1)


是可以的 ,但是它具有很少的依赖性,您的cpanel托管提供商或您选择的计划可能会或可能不支持这种依赖性。

以下我提到的步骤仅出于演示目的。如果您是学生或只是想玩它,可以尝试一下。我不是安全专家,所以从安全角度来看,我真的不知道它有多好。


话虽如此,让我们看看我如何配置它。我有托管服务商cpanel托管订阅,请执行以下步骤:

启用SSH访问

ssh access in hostinger cpanel

enter image description here

通过ssh连接到共享计算机

enter image description here

enter image description here

检查您的Linux发行版并下载并设置节点js

就我而言,以下是该命令:

Downloading node & extracting it using curl
curl https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.gz |tar xz

enter image description here enter image description here

这将下载并提取节点并创建目录。您可以使用ls命令来确认,如下图所示。

enter image description here

此时,您可以检查如下所示的版本

enter image description here

如您所见,对于node命令来说还可以,但是对于npm命令,我们进行了如下修改

./node-v12.18.3-linux-x64/bin/node ./node-v12.18.3-linux-x64/lib/node_modules/npm/bin/npm-cli.js --version

enter image description here

我们还可以创建别名以简化生活

检查以下图像:

enter image description here

enter image description here

I tried using bashrc/bash_profile but somehow it didn't work .

这就是在共享cpanel计算机上运行的所有节点服务器。


现在,在这种情况下,我想获得基于js的快速REST API支持。问题在于它将在我提供的端口上本地托管。检查以下示例:

var express=require('express')

var app=express()

app.get('/', function (req, res) {
    res.send('hosting node js base express api using php & shared hosting a great way to start yjtools')
  })

console.log("listening yjtools node server on port 49876...")
app.listen(49876)

这里的问题是,尽管它将执行,但我将无法通过网络对其进行访问。这是因为我们只获得固定的预定义端口(例如80、21、3306等),这些端口在共享cpanel机器上允许/打开。因此,我托管的Express应用将仅在49876 port上本地可用。

让我们看看我们有什么:

  • 在cpanel计算机上本地托管的基于Express js的应用程序。
  • 基于Php的托管Apache服务器可通过http / https获得。

因此,我们可以使用具有重定向规则集的PHP和curl来缩小差距。 以下是我为使其正常运行所做的更改:

In .htaccess file添加重定向规则,例如domain / api是我想要的其余api路径。

RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L]

In the api/api.php file(这是我选择的路径,您可以选择任何路径)

  <?php
echo "Hello ".$_REQUEST['username'];


echo '<hr>';

$curl = curl_init('http://127.0.0.1:49976/');
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);
?>

And on the ssh prompt just run the app.js file

node api/app.js

以下是实际操作的图像:

enter image description here

enter image description here

Here与我在程序中提到的类似,因此我们也可以通过php本身进行此节点调用。


现在,我已经获得了基于Express的Rest api支持,托管的角度应用程序和mysql,可用于cpanel上的所有数据库。

答案 5 :(得分:0)

任何想知道如何将 node js 应用程序部署到 Cpanel 的人这对他来说都是一个很好的来源,这彻底解释了如何将 node js 应用程序部署到 Cpanel 请检查 this