为node.js Web服务应用程序安装服务器

tom*_*him 5 api rest host node.js

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

我想把它放在个人计算机(Windows)上,但我不知道如何安装服务器以及我需要在线提供我的应用程序.

有人可以解释一下这样做的步骤吗?我知道有些在线服务存在像Heroku,但我想自己做.

谢谢

Jef*_*nte 13

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


使用VPS

您不希望通过个人计算机提供网站服务,因为只要您的计算机关闭,网站就会关闭.你不希望你的计算机承担这种责任,所以大多数时候人们选择从公司租用服务器空间,其唯一目的是在一台永远打开的简单计算机上为你提供空间/带宽.这些通常被称为VPS(虚拟专用服务器).

所以我建议的第一步是为自己抓一个VPS.数字海洋是一项很棒的服务,你可以从5美元/月获得一个可靠的服务器,我建议从那里开始.如果你愿意的话,还有很多其他公司你可以获得VPS,可能是最受欢迎的替代品是linode.

一旦你获得了VPS,请使用ssh登录.通常它看起来像这样:

ssh root@000.000.0000
Run Code Online (Sandbox Code Playgroud)

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

安装vim

对我来说,vim是通过命令行编辑文件的最简单方法.对于每个人来说当然可能并非如此 - 有些人更喜欢emacs,有些人更喜欢nano,这更简单.如果你有兴趣了解vim,那么'net'周围有大量的教程.如果进入vim不是你的事情,我建议使用nano而不管我从这里提到它.

为了安装它,我们可以使用apt,这是aptitude,ubuntu上的包管理器,我将在这个答案中使用的linux的味道,因为它是服务器的流行的,并且是数字海洋的默认.只是运行apt-get update以确保包是最新的,然后apt-get install vim放入vim.

添加你的ssh密钥

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

安装node.js

如果您尝试运行节点应用程序,您当然需要拥有节点!在Linux上安装节点有点不同,因为我确定你在本地使用的节点安装程序是图形的,在这里你只有命令行.幸运的是,使用这组指令并不困难,您可以完全遵循这些指令.确保您不要只执行默认设置apt-get install nodejs,因为这将安装旧版本.在第二段后面的几个步骤添加ppa并获得更新的版本.

部署您的应用

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

测试您的应用

在您的VPS上,cd无论您的应用程序放在何处,都可以运行它.确保一切正常,并点击http://YOUR_IP:PORT,只需你的IP地址,然后是冒号后你的应用程序运行的端口号.你应该能够看到你的应用程序.如果没有检查回终端,它可能已经崩溃.有时,当您在不同的系统上进行设置时,您可以找到吸虫.如果您的应用使用数据库,则可能还需要对其进行配置.您可以谷歌"ubuntu设置数据库名称"并找到一些教程 - 数字海洋有一个非常可靠的这些类型的教程库.

安装nginx

Nginx是在一台机器上提供多个应用程序以及处理域名等的好方法.我写了一篇关于如何设置nginx的文章,你可以查看它来学习基础知识并安装它.完成后,您可以将应用程序与a链接起来proxy_pass.而不是try_files,这篇文章对服务器静态文件做了什么,只需将proxy_pass语句放入运行应用程序的端口,nginx会将流量直接引导到您的应用程序.这是一个例子,如果您的应用程序在端口上运行1234并且您的域名是example.com

server {
  server_name example.com;

  location / {
    proxy_pass http://localhost:1234;
  }
}
Run Code Online (Sandbox Code Playgroud)

这只会将流量从流入盒子example.com并传递到您的应用程序,这很棒.

按顺序获取您的域名

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

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

在生产服务器上运行它

很棒,所以我们让我们的应用程序运行,它在互联网上在线供公众欣赏.几乎是时候坐下来让所有人向你投钱,每当你运送一个网站时,这是一个常见的事情.但是不要太快退缩,因为我们需要的最后一件事是确保这个应用程序保持运行并且即使出现问题仍然继续运行,或者您退出VPS,因此您不必总是保留终端窗口打开运行应用程序.为此,我们可以使用一些调用生产服务器 - 专门用于确保您的应用程序在后台运行并始终保持运行的服务器.幸运的是,节点有一些这样的开源,我最喜欢的是pm2.查看此页面,阅读入门说明,安装pm2在您的计算机上,运行您的应用程序.该过程可能如下所示:

npm install pm2 -g
cd path_to_my_app
pm2 start app.js
Run Code Online (Sandbox Code Playgroud)

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


Phew,这是一个漫长的过程.可能比你想象的还要多 - 有理由为什么像heroku这样的东西存在.这真的值得,自己运行和维护网站吗?我认为是的,我主持我运行的每个网站和应用程序.原因如下:

  • 学习:我学习了很多关于事情是如何工作的,并且在sysops上变得更好.
  • 成本:您可以在一个5美元的数字海洋盒上托管20个站点.托管是便士.
  • 控制:Heroku有时会下降而且很糟糕因为所有你能做的就是等待它们重新启动它.如果我的网站出现故障,这是我的错,我可以找出原因并修复它.

我相信这个答案比你想象的要多,但希望这会有所帮助!从dev到sysops是一个旅程,有时可能会让人感到非常沮丧,但我保证,一旦你掌握了很好的东西,它会感觉很棒,并且真正有助于你的技能.

最后,我想指出,毫无疑问,这是一个固执己见的指南.还有很多其他工具和其他方法来做这些事情 - 我在这里的工作流程就是我喜欢做事的方式.一旦您掌握了它,请务必随时修改并适应您的工作流程!此处还可以添加许多其他详细信息,包括设置不同的数据库,改进部署/重启流程以及更加安全地保护您的盒子.如果您或其他人感兴趣,我们很乐意听到任何反馈并添加任何这些内容.