5

我构建了一个使用 node.js 运行的应用程序,它允许通过 REST API 检索一些数据。

我想把它放到个人计算机 (Windows) 上,但我不知道如何安装服务器以及需要什么才能使我的应用程序在线可用。

有人可以解释我的步骤吗?我知道有一些在线服务,比如 Heroku,但我想自己做。

谢谢

4

2 回答 2

13

这个问题看起来很小,但实际上很大。我开始写这篇文章作为一个基本指南,结果它真的是一个很长的答案,所以我把它分成几部分。总的来说希望这会有所帮助!


使用 VPS

您不想从您的个人计算机上为网站提供服务,因为任何时候您的计算机关闭,该网站都会关闭。您不希望您的计算机承担这种责任,很多时候人们选择基本上从公司租用服务器空间,其唯一目的是在一台始终开启的简单计算机上为您提供空间/带宽。这些通常称为VPS(虚拟专用服务器)。

所以我建议的第一步是为自己获取一个 VPS。Digital Ocean是一项很棒的服务,您可以以每月 5 美元的价格获得稳定的服务器,我建议您从那里开始。您可以从许多其他公司获得 VPS,但如果您愿意,可能最受欢迎的替代品是linode

一旦你拥有了一个 VPS,使用 ssh 登录它。通常它看起来像这样:

ssh root@000.000.0000

...最后的数字是您服务器的 IP 地址。大多数 VPS 都是一些 linux 风格,因此熟悉 linux 命令行界面很重要。一旦你在你的服务器中设置好了,你会想做一些事情。这是我通常做的,按顺序:

安装 vim

对我来说,vim 是通过命令行编辑文件的最简单方法。这肯定不是每个人都这样——有些人更喜欢emacs,有些人更喜欢 nano,这要简单得多。如果你有兴趣了解 vim,可以在 'net. 如果进入 vim 不是你的事,我建议在我从这里提到的任何地方使用 nano 代替。

要安装它,我们可以使用aptaptitude,它是 ubuntu 上的包管理器,我将在这个答案中使用 linux 的风格,因为它是服务器的流行工具,并且是数字海洋的默认设置。只需运行apt-get update以确保软件包是最新的,然后apt-get install vim放入 vim。

添加您的 ssh 密钥

添加您的 ssh 密钥,~/.ssh/authorized_keys这样您就不需要密码登录。如果您不熟悉ssh 密钥,它们基本上是一对加密密钥,您可以使用它们来避免每次都需要使用密码进行授权。通过将您的公钥添加到~/.ssh/authorized_keys文件中,您实际上是在告诉服务器“这是我的计算机,因此您无需向我询问密码即可登录”。Github 有一个很好的关于如何生成密钥的指南。完成此操作后,您可以使用 vim 打开文件,进入插入模式,然后从本地计算机粘贴公钥。保存并退出,你就设置好了。

安装 node.js

如果您尝试运行节点应用程序,您当然需要拥有节点!在 linux 上安装节点有点不同,因为我确定你在本地使用的节点安装程序是图形的,在这里你只有命令行。幸运的是,这组指令并不难,您可以完全按照这些指令进行操作。确保您不只是执行 default apt-get install nodejs,因为这将安装旧版本。在第二段之后采取几个步骤来添加 ppa 并获得更新的版本。

部署您的应用

好的,所以你有一台有节点的机器,理论上可以运行你的应用程序。这是个好消息。现在我们需要将应用程序实际安装到机器上。有几种方法可以做到这一点。如果您在本地安装了 ruby​​,则可以使用流行的部署解决方案capistrano 。我经常喜欢的更轻量级的方法是deploy,尽管我认为这不适用于 Windows。您也可以只使用 github 或 bitbucket - 将您的应用程序推送到远程仓库,然后从您的 VPS 克隆它(确保先apt-get install git设置您的用户名 - 如果它是一个私人仓库,您可能会生成并添加一个密钥可以将其拉下)。无论您设法做到这一点,都可以传输文件。

测试你的应用

在您的 VPS 上,cd进入您的应用程序所在的位置并运行它。确保一切正常,然后点击http://YOUR_IP:PORT您的 ip 地址,然后是冒号后运行您的应用程序的端口号。您应该能够看到您的应用程序。如果不返回终端检查,它可能已经崩溃。有时,当您在不同的系统上设置它时,您会发现侥幸。如果您的应用程序使用数据库,则您可能也需要对其进行配置。你可以谷歌“ubuntu 设置数据库名称”并找到一些教程——数字海洋本身就有一个非常可靠的这类教程库。

安装 nginx

Nginx 是在一台机器上服务多个应用程序以及处理域名等的好方法。我写了一篇关于如何设置 nginx 的文章,您可以查看该文章以了解基础知识并进行安装。完成此操作后,您可以将您的应用与proxy_pass. 而不是try_files,这是本文对服务器静态文件所做的事情,只需将proxy_pass语句放入您的应用程序正在运行的端口,然后 nginx 将直接将流量引导到您的应用程序。这是一个示例,如果您的应用程序在端口上运行1234并且您的域名是example.com

server {
  server_name example.com;

  location / {
    proxy_pass http://localhost:1234;
  }
}

这只会从盒子中获取流量example.com并将其传递给您的应用程序,这太棒了。

整理您的域名

我必须假设您不想要求人们使用 IP 地址来访问您的应用程序,并且您想要一个域名。从任何地方抓取一个,一旦你有了这个,你需要编辑 DNS 记录。我发现为此使用dnsimple是最简单的,因为并非每个域注册商都有可靠的 dns 记录处理,您可以将所有 dns 管理保存在一个地方。现在,只需在您的域的根目录上放置一条 A 记录,将其指向您的 VPS 的 IP 地址。在给记录传播几分钟后,对该域的点击应该直接进入您的服务器 - 太棒了。

现在是检查并确保您的应用程序正常运行并且您的 nginx 配置正确(并且您已重新加载 nginx)的时候了。确保在您的配置中,server_name镜像您设置为指向您的 VPS 的域。确保 中的端口proxy_pass与您的应用程序正在运行的端口相同。确认后,转到域,如果你做对了,你的应用程序就会出现。哇!

在生产服务器上运行它

太好了,所以我们运行了我们的应用程序,它在互联网上在线供公众欣赏。差不多是时候坐下来让每个人都向你扔钱了,这在你收到一个网站时很常见。但是不要躺得太快,因为我们需要做的最后一件事是确保这个应用程序保持启动并继续运行,即使出现问题,或者你注销你的 VPS,所以你不必总是保持终端打开运行应用程序的窗口。为此,我们可以使用一些所谓的生产服务器——专门用于确保您的应用程序在后台运行并始终保持运行的服务器。幸运的是,node 有一些这样的开源,我最喜欢的是pm2. 查看此页面,阅读入门说明,安装pm2在您的机器上,然后运行您的应用程序。该过程可能如下所示:

npm install pm2 -g
cd path_to_my_app
pm2 start app.js

由于您在同一个端口上运行它,因此您的 nginx 配置应该保持不变,并且如果您访问该域,您的应用程序应该仍然启动。


呼,那是一个漫长的过程。可能超出您的预期 - 为什么存在像 heroku 这样的东西是有道理的。那么,自己运行和维护网站真的值得吗?我认为是的,并且我托管了我这样运行的每一个网站和应用程序。原因如下:

  • 学习:我学习了大量关于事情如何以这种方式工作的知识,并且在系统操作方面变得更好。
  • 成本:您可以在一个 5 美元的数字海洋盒子上托管 20 个站点。托管是便士。
  • 控制:Heroku 有时会出现故障,这很糟糕,因为您所能做的就是等待他们将其恢复。如果我的网站出现故障,那是我的错,我可以找出原因并修复它。

我敢肯定,这个答案超出了您的预期,但希望这会有所帮助!从开发人员到系统操作员是一段旅程,有时会非常令人沮丧,但我保证,一旦你对事情有了很好的把握,就会感觉很棒,并且真的对你的技能有很大帮助。

最后,我想指出,这无疑是一个固执己见的指南。还有很多其他工具和其他方法可以做这些事情——我这里的工作流程正是我喜欢做事的方式。一旦您掌握了工作流程,您就可以随意修改和调整工作流程以满足您的需求!还有很多其他细节可以在这里添加,关于设置不同的数据库,改进你的部署/重启流程,以及更彻底地保护你的盒子。如果您或其他人有兴趣,希望听到任何反馈并添加任何这些作品。

于 2013-10-28T01:34:40.953 回答
1

Google Platform 为 Node 开发者提供资源。有一个教程向您展示了如何将一个简单的Node.js应用程序部署到Google App Engine Managed VMs。定价细节在这里

Amazon Web Service (AWS) 也有类似的服务。这是教程。AWS 免费套餐旨在让您在注册后的 12 个月内免费获得 AWS 的实际操作体验。您可以将 AWS 作为您的Node.js应用程序的平台进行调查。在这里检查。

于 2015-04-09T14:58:55.857 回答