在我的机器上托管节点应用程序

时间:2016-01-28 08:05:12

标签: javascript node.js deployment

所以我有一个节点应用程序,我可以通过localhost访问:someportnumber。如何仅使用我的机器而不是某种托管服务公开地公开这个应用程序(即,到interwebz的其余部分,而不仅仅是我的本地网络)。机器是一个macbook pro,不确定它是否重要。

注意 - 这纯粹是为了理解,我不打算在我的笔记本电脑上永久托管玩具网页。

这是我的困惑 - 我的node.js应用程序是一个WEBSERVER,为什么我需要另一台服务器(即由heroku,aws等提供的服务器)来托管我的应用程序?我觉得我错过了一些东西......

4 个答案:

答案 0 :(得分:9)

假设这是一个家庭网络,那么您可能有某种路由器/防火墙将您的家庭网络连接到互联网。默认情况下,路由器会阻止所有到网络的传入连接(出于安全原因)。

如果需要,您可以设置所谓的端口转发规则,告知路由器您希望端口80上的任何传入连接(来自浏览器的默认HTTP端口)直接路由到您的macbook亲你的家庭网络。通常,您可以通过在家庭网络上发现Macbook pro的IP地址来实现这一点,并将端口转发规则设置为该IP地址。端口转发规则通常通过某种基于Web的管理员用户界面进行配置,您可以在Web浏览器中使用该界面。您必须查看特定路由器的手册,以了解如何以最佳方式连接并配置它。

除非您将macbook pro设置为具有静态IP地址,否则其IP地址将由路由器动态分配。它可能会在一段时间内保持不变,但可能会随着时间而改变。

完成此操作后,您需要发现家庭网络连接的IP地址。这可能也会动态分配,但也应保持一段时间。您知道这个IP地址,然后浏览器上的浏览器可以通过URL http://xxx.yyy.zzz连接到您的Web服务器,其中xxx.yyy.zzz是您的家庭网络的IP地址,如从互联网上看到的那样。 / p>

如果您希望能够使用普通域名(例如http://mysampledomain.com)连接到该域名,那么您可以支付一些动态DNS服务,以便为您的动态IP地址设置域名,虽然不建议长期使用。除了可能违反ISP的规则外,它还不是一个特别可扩展或强大的解决方案。从长远来看,转移到托管服务提供商会更有意义。

  

这是我的困惑 - 我的node.js应用程序是一个WEBSERVER,为什么我   需要另一台服务器(即由heroku,aws等提供的服务器)来托管我的服务器   应用程序吗?我觉得我错过了一些东西......

您不需要其他网络服务器。如果您要找到托管服务提供商,您将使用擅长托管node.js服务器的托管服务提供商。对于那些类型的提供者,可能不会有另一个Web服务器 - 您的node.js服务器将是唯一涉及的服务器。他们可能拥有用于使多租户环境工作的代理或负载均衡器,但除了确保遵循正确的安装说明以使您的node.js服务器在其中正常运行之外,您应该在很大程度上不会意识到这些。环境。

答案 1 :(得分:3)

您不需要服务器来托管应用程序 - 您需要通过互联网访问服务器。有很多方法可以做到这一点。

要让我访问 webserver 应用,我需要知道您计算机的IP地址。我们假设你可以给我你的公共 IP地址(在What Is My Ip找到这个,给我发地址,让我到哪个端口连接。

EG。 stackoverflow的IP地址为104.16.34.249,但您可以使用仅IPv6地址。现在,请记住,大多数家庭ISP每天都有重置公共IP地址的习惯。

接下来,你给我你的app端口,例如8080。

所以我会尝试获取https://104.16.34.249:8080/(或http://104.16.34.249:8080/,具体取决于您的应用。)

但在大多数情况下,我会打不出任何东西或你的路由器。这就是第2步:告诉您的路由器将此端口上的流量传递到您的计算机。您可以使用简单的端口转发配置,例如。将计算机放入DMZ。 (如何做到这一切是另一个问题,可能在ServerFault或SuperUser上)。

所以,现在我可以从interwebz访问你的应用程序了。

但是你可能希望我使用一些常量名称,而不是改变IP地址。因此,您注册了DynDNS或No-IP等服务,并将其小片段安装在您的计算机或路由器上,它们会为您提供类似家庭主机名的内容,例如。 http://best-home-webserver-that-will-never-run-out-of-electricity.dyndns.com/http://my-cool-app.no-ip.com/

谈论加强你的游戏,是吗?

但是,如果你想要一个真实的"域名,您自己的,像" http://i-have-webz.com:8080/"?好吧,你的下一步是从像Namecheap这样的人那里购买这个域名,然后将你的DNS设置为指向你的IP地址(如果它是静态的 - 也就是说,如果它不是一直都在改变的话) )或作为no-ip / dyndns(动态)主机名的别名

下一个好的步骤可能就是获得一台合适的UPS,也可以是柴油发电机,当你用完电源时,在不同的环路上从不同的供应商租用另一条DSL线路(所以你有一条电缆和一条电缆)光纤线路)用于备份或借用邻居为此目的的无线接入,实施循环dns的东西,从中扩展一个巨大的业务然后将其全部移动到亚马逊。

上面介绍的内容只是处理场景的一种方法的高级步骤。它不是一个非常完整的方式,在可能的pitfals中并非详尽无遗。还有更多,可能更好的方法来完成许多或所有步骤。

答案 2 :(得分:1)

您可以使用nginx并在您的nginx代理上添加配置到您的节点js 这是用nginx配置的示例

server {
 listen 80;

server_name example.com;

location / {
    proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
 }
}

答案 3 :(得分:0)

这种方式不建议永久使用,但对于演示,测试您可以在路由器中打开端口,而另一个(从公共互联网)可以访问它。如果您需要域,请使用一些动态DNS免费,如no-ip映射到域。 希望能帮到你。