在EC2上托管Node.js应用程序

28
我对在云端托管nodejs应用程序很感兴趣,我正在寻找一个免费的云托管服务。我发现Amazon有一个,但我想知道是否有任何教程可以教我如何在Amazon EC2上设置和运行nodejs应用程序?
编辑:除了heroku,你能提供其他好的nodejs托管服务吗?

您可以免费使用Micro Instance一年。Micro Instance类型非常慢。如果它是真实的服务器,您可以在EC2上完全相同的方式安装Node.js。 - Roman Newaza
8个回答

43
我已经使用 Node.js 和 Amazon EC2 一段时间了,它们让我很满意。目前来说,AWS 似乎是最便宜和最强大的云提供商,所以选择 Amazon 不会是一个错误。在云中运行 Node.js 没有什么特别之处 - 就像你处理自己的电脑一样处理它。以下是一些简单的步骤,可用于在 EC2 Ubuntu 服务器上运行最简单的 Node.js 应用程序:
  1. 创建 Amazon EC2 帐户

  2. 从 AWS 控制台启动任何 Ubuntu AMI(示例)的t1.micro实例。

  3. 通过 SSH 登录到您的实例。

  4. 安装 node.js: sudo apt-get install nodejs

  5. 创建名为test_server.js的新文件,并添加以下内容:

    require("http").createServer(function(request, response){
      response.writeHeader(200, {"Content-Type": "text/plain"});  
      response.write("Hello World!");  
      response.end();
    }).listen(8080);
    
  6. 启动服务器:node test_server.js

  7. 从另一个控制台检查它是否正常工作:curl http://localhost:8080


5
请确保在安全组中允许端口8080的入站流量。您可能还需要像forever这样的工具来使您的服务器持久化。 - Blaise
1
这很有帮助,但我也发现像安装一个相对较新的Node.js(以及npm)这样的简单事情有点烦人。(昨晚nodejs.org宕机了,这并没有帮助。) - podperson

9

我使用了您提供的第二个链接,并将作者的0.6.8版本替换为node.js版本0.10.24。这非常容易。 - Cᴏʀʏ
2
第一个链接似乎失效了。 第二个链接在进行“npm install”操作时出现致命错误。 第三个链接指向的文章似乎已经不存在了。 - canadiancreed
Links 2现在无法使用。请删除您的答案或修复链接。 - Adam Gawne-Cain

6
根据此教程,这里提供一个更新的逐步操作说明:
1) 在Amazon Web Services上创建一个帐户。
2) 创建一个EC2实例;我选择了Ubuntu微型。
3) 配置安全组(将其命名为“Node”),并添加端口:
HTTP(80)、HTTPS(443)和用于您的Node应用程序的自定义TCP端口(例如3000)。
4) 启动实例并保存pem文件(私钥),例如“node.pem”。
5) 在Windows上 - 安装Cygwin+ OpenSSH软件包。建议还安装WinScp,以便类似于“资源管理器”的访问方式连接到Linux。
6) 以管理员身份打开Cygwin终端,并对“node.pem”文件设置正确的权限:
chown :Users node.pem
chmod 400 node.pem

7) 在EC2仪表板中找到您的EC2实例公共DNS名称,并使用SSH连接:(详细请见)

ssh -i node.pem ubuntu@{your EC2 public DNS name}

8) 更新Ubuntu并安装NodeJS

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential

9) 将您的NodeJS应用程序复制到EC2实例中(通过Cygwin或Winscp)。

10) 安装所有所需的Node应用程序模块:

cd /home/ubuntu/My_Node_App
npm install --save

11) 使用 IPtables 重新路由端口,以便您的应用程序可以在默认的 http 端口 80 上访问:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

要查看iptables路由条目,请运行:

sudo iptables -t nat -L

如果你需要删除路由条目(第一行),运行以下命令:

sudo iptables -t nat -D PREROUTING 1

12) 将您的应用作为后台进程运行:

sudo nohup node app.js &

结束您的应用程序进程:

ps -ef | grep app.js
sudo kill {proccess id number}

5

1

有很多Node.js的托管解决方案可供选择,以下是其中几个:

Joyent

Joyent 是 Node.js 的企业赞助商和商标所有者,对于许多事情来说,它提供了一个吸引人的替代选择,当然也包括 Node.js 托管,可以查看 Joyent's Node.js Development Environment(请检查 Node.js™ Development SmartMachine Terms of Service)。

显然,他们正在重新组织这个开发提供:

在过去的一年中,Joyent Cloud 为 Node.js 用户提供了一个免费的开发沙盒。随着时间的推移,社区明确表示他们需要更多的工具和更大的容量。为此,我们很高兴宣布与 Nodejitsu 合作,在 Joyent Cloud 的基础设施即服务平台上运行 Nodejitsu 的开发和管理工具,为用户提供世界一流的 Node.js 开发环境。新服务将很快推出。
因此,目前还不清楚 Node.js 解决方案的生产托管定价选项会如何结束,但考虑到 Joyent 具有竞争力的定价,我至少期望有类似的选择。
Cloud Foundry

Cloud Foundry是一个开放的平台即服务项目,支持Node.js以及许多其他框架(这使得该平台非常令人兴奋)。最近,该平台受到了相当多的关注,并被多个解决方案平台即服务(PaaS)提供商作为其后端使用 - 其中包括以下几个(没有特定顺序,也不一定完整):

  • AppFog - Java、Node、.Net、Ruby、PHP、MySQL、Mongo、PostgreSQL等的简单PaaS... 在云端享受最简单的定价,自由切换IaaS。
  • Cloud Foundry (VMware)(Cloud Foundry的公司赞助商)- 在几秒钟内部署和扩展应用程序,而不会将自己锁定在单个云中。
  • Iron Foundry - Iron Foundry是一个开源项目,通过提供服务、安装程序和开发人员工具,将Cloud Foundry™扩展到.NET生态系统。

这些大多数仍处于测试阶段,定价尚未确定,但考虑到竞争,我期望随着时间的推移会有一些有趣的选择。


0

请查看这个完整的教程在这里。本教程展示了如何在EC2上安装Node.js并配置HTTP端口和nginx进行端口转发,以及使用supervisor来永久运行Node.js,因为它通常会在关闭SSH控制台会话时停止。


请在此处编写/引用答案。虽然提供解决方案的链接很好,但将相关部分放在这里也很有价值。请参阅http://stackoverflow.com/questions/how-to-answer - Florian
遇到了其他教程相同的问题,在npm install时崩溃。 - canadiancreed

0

我刚刚完成了Heroku的注册和应用程序教程。这真是太容易了。多么愉快的体验啊...

...直到你发现免费套餐无法使用MongoDB实例为止。除了一个免费试用月之外,最低费用是每GB存储18美元/月。

老实说,更好的选择是Openshift。它有三个免费套餐,足以满足像我这样的初学者所需的大部分功能。Heroku和Openshift都在亚马逊的空间内,但它们的客户界面不同。我认为Heroku对于初学者来说更容易入门,但正如我所提到的,数据库方面没有免费午餐。


更新:我刚刚添加了MongoLab:sandbox,但在提供服务之前,他们要求我在Heroku账户中输入信用卡信息。这让我有些担心,因为我需要更加密切地关注数据库的大小,以免意外超出免费区域,导致信用卡被收费。 - Michael Blankenship

0

在 EC2 上免费运行 node.js 最简单的方法,我认为是在 Heroku 上。


你能提供一些教程吗? - Erik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接