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

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

我想把它放在一台个人电脑上(Windows),但我不知道如何安装一台服务器,以及我需要在网上提供我的应用程序。

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

谢谢

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


使用VPS

你不想从你的个人电脑提供网站,因为任何时候你的电脑closures,网站将会closures。 你不需要你的计算机这种责任,很多时候人们select从公司租用服务器空间,唯一的目的是在一台总是处于运行状态的简单计算机上获得空间/带宽。 这些通常被称为VPS (虚拟专用服务器)。

所以我build议的第一步就是为自己购买VPS。 数字海洋是一个伟大的服务,你可以得到一个坚实的服务器从5美元/月,我会build议从那里开始。 如果你愿意的话,还有其他一些公司可以买到VPS,可能是最受欢迎的是linode 。

一旦你有自己的VPS,使用SSHlogin到它。 通常它看起来像这样:

ssh root@000.000.0000 

…最后的号码是你的服务器的IP地址。 大多数VPS都是linux的一些味道,所以熟悉linux命令行界面很重要。 一旦你全部在你的服务器上,你会想做一些事情。 这是我通常做的,为了:

安装vim

对我来说,vim是通过命令行编辑文件的最简单的方法。 对于每个人来说,这肯定不是这样 – 有些人更喜欢emacs ,而有些nano则更简单一些。 如果你对学习vim感兴趣,那么networking上有大量的教程。 如果进入vim不是你的事,我会build议使用nano,而不是从这里提到它。

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

添加你的SSH密钥

添加你的ssh密钥到~/.ssh/authorized_keys这样你就不需要密码login。如果你不熟悉ssh密钥 ,他们基本上是一对密钥,你可以使用它来避免需要授权每次都有一个密码。 通过将你的公钥添加到~/.ssh/authorized_keys文件中,你实际上是告诉服务器“这是我的电脑,所以你不需要问我input密码”。 Github有关如何生成密钥的很好的指导 。 一旦完成,您可以使用vim打开文件,进入插入模式,并从本地机器中粘贴公钥。 保存并退出,然后设置好。

安装node.js

如果你正在尝试运行一个节点应用程序,你当然需要有节点! 在linux上安装节点有点不同,因为我确定你在本地使用的节点安装程序是graphics的,在这里你只有命令行。 幸运的是, 这套指令并不难,你可以准确的遵循。 确保你不只是执行默认的apt-get install nodejs ,因为这将安装一个旧版本。 采取第二段后面的几个步骤来添加ppa并获得更新的版本。

部署您的应用程序

好吧,所以你有一个机器,有节点,理论上可以运行你的应用程序。 这是个好消息。 现在我们需要真正把应用程序放到机器上。 有几种方法可以做到这一点。 如果您在本地安装了ruby,则可以使用stream行的部署解决schemecapistrano 。 我经常喜欢的轻量级的方法是部署 ,但我不认为这将在Windows上工作。 你也可以使用github或者bitbucket – 把你的应用程序推到一个远程的repo上,然后从你的VPS克隆下来(确保apt-get install git并设置好你的用户名 – 如果这是一个私有的repo,你可能会产生并添加一个密钥来获得访问拉下来)。 但是,你设法做到这一点,让文件传输。

testing你的应用

在你的VPS上, cd到你的应用程序放在哪里,并运行它。 确保一切都正常工作,并击中http://YOUR_IP:PORT ,只是你的IP地址,后面跟着你的应用程序在冒号后面运行的端口号。 你应该可以看到你的应用程序。 如果不检查回到terminal,它可能已经崩溃。 有时当你在不同的系统上安装它时,你会发现漏洞。 如果您的应用程序使用数据库,则可能还需要进行configuration。 你可以谷歌“Ubuntu的安装数据库的名称”,并find一些教程 – 数字海洋有一个这些types的教程本身非常坚实的库。

安装nginx

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

 server { server_name example.com; location / { proxy_pass http://localhost:1234; } } 

这将只是从example.com进入框中的stream量,并将其传递到您的应用程序,这是真棒。

按顺序获取您的域名

我必须假设你不想要求用户使用IP地址来访问你的应用程序,并且你想要一个域名。 从任何地方抓一个,一旦你有这个,你需要编辑的DNSlogging。 我发现使用dnsimple最简单,因为不是每个域名注册商都有固定的dnslogging处理,并且可以将所有的dnspipe理保存在一个地方。 现在,只需在您的域的根目录中添加一条Alogging,并将其指向您的VPS的IP地址即可。 给了它几分钟的logging来推荐,一个命中该域名应直接到您的服务器 – 太棒了。

现在是时候检查一下,并确保您的应用程序运行正常,并且您的nginxconfiguration是正确的(并且您重新加载了nginx)。 请确保在您的configuration中, server_name镜像您设置为指向您的VPS的域。 确保proxy_pass的端口与您的应用程序正在运行的端口相同。 一旦确认,就进入域名,如果你做得对,你的应用就会出现。 喔!

在生产服务器上运行它

太棒了,所以我们让我们的应用程序运行,并在互联网上的公共享受。 正好有时间坐下来,让所有人都把钱扔给你,这是一个常见的现象,只要你有一个网站发货。 但是不要太慢,因为我们需要的最后一件事就是确保这个应用程序保持运转,即使出现问题,或者您退出了VPS,您也不一定要保持一个terminal窗口打开运行应用程序。 为此,我们可以使用一些称为生产服务器的服务器 – 服务器专门用于确保您的应用程序在后台运行,并始终保持运行状态。 幸运的是,node有一些这样的开源,我最喜欢的是pm2 。 看看这个页面,阅读入门指南,在你的机器上安装pm2 ,然后运行你的应用程序。 这个过程可能看起来像这样:

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

既然你在同一个端口上运行它,你的nginxconfiguration应该保持不变,如果你访问了这个域,你的应用程序仍然应该启动。


唷,那是一个漫长的过程。 可能超出你的预期 – 有道理为什么像heroku存在。 那么这真的是值得的,自己运行和维护网站? 我认为是的,我主持每一个这样的网站和应用程序运行。 原因如下:

  • 学习 :我学会了如何以这种方式工作,并在pipe理方面做得更好。
  • 成本 :您可以在一个5美元的数字海洋箱子上托pipe20个站点。 托pipe是便士。
  • 控制 :Heroku有时会下降,因为你所能做的只是等待他们恢复。 如果我的网站崩溃了,这是我的错,我可以找出原因并修复它。

我敢肯定,这个答案比你期望的要多得多,但希望这有帮助! 从开发到pipe理是一个旅程,有时会变得非常令人沮丧,但是我保证一旦你掌握了一些东西,它会感觉很棒,真的可以帮助你的技能。

最后,我想指出,这无疑是一个自以为是的指南。 还有很多其他的工具和其他方法来做这些事情 – 我在这里的工作stream程就是我喜欢做的事情。 通过一切手段随意修补和适应您的需求的工作stream程,一旦你有你的腰带! 还有很多其他的细节可以在这里添加关于设置不同的数据库,改善你的部署/重启stream程,并保证你的盒子更彻底。 如果您或其他人感兴趣,我们很乐意听取任何反馈意见并添加任何这些内容。

Google平台为节点开发人员提供资源。 有一个教程向您展示如何将一个简单的Node.js应用程序部署到Google App Engine托pipe虚拟机 。 定价的细节在这里

amazon web services(AWS)也有类似的服务。 这里是教程 。 AWS免费套餐旨在让您在注册后的12个月内免费获得AWS的实践经验。 您可以调查AWS作为Node.js应用程序的平台。 在这里检查。