介绍 AWSBOX,专为 Node.JS 量身打造的 DIY PaaS - Node.js 节日季,第 12 部分

这是 Mozilla 身份团队的 A Node.JS Holiday Season 系列 中的第 12 集,总共 12 集。这是最后一部分,介绍了 awsbox。

在 Node.js 中编写服务器后,如何部署它?
Mozilla 的 身份团队 选择在 Amazon EC2 之上构建定制基础设施,而不是使用现有的“平台即服务”(PaaS)提供商,我们想向您详细介绍一下。

了解 awsbox,一个适用于 Node.js 应用程序的极简 PaaS 层,目前正在处理我们支持的近二十项非关键服务。
Awsbox 的设计目标是提供简单的 PaaS 风格部署,同时不牺牲定制基础设施的灵活性。

使用 awsbox

为了使用 awsbox 部署 Node.JS 项目,您必须对应用程序进行一些细微的更改,在环境中提供您的 Amazon 凭据,然后您就可以通过命令行进行部署。

在应用程序更改方面,您必须

  1. 创建一个 .awsbox.json 文件,指定如何启动服务器。
  2. 在您的 package.json 中添加 awsbox 作为依赖项。
  3. 确保您的服务器绑定到 PORT 环境变量中指定的端口。

要提供您的 Amazon 凭据,您必须在环境中设置 AWS_IDAWS_SECRET,这两个值可以通过 Amazon 管理控制台 获取。

完成初始应用程序配置后,您可以 npm install,这将安装 awsbox,然后您就可以创建第一个服务器了。

$ node_modules/.bin/awsbox create -n MyFirstAWSBOX
reading .awsbox.json
attempting to set up VM "MyFirstAWSBOX"
   ... VM launched, waiting for startup (should take about 20s)
   ... Instance ready, setting human readable name in aws
   ... name set, waiting for ssh access and configuring
   ... public url will be: http://
   ... nope.  not yet.  retrying.
   ... victory!  server is accessible and configured
   ... applying system updates
   ... and your git remote is all set up
   ... configuring SSL behavior (enable)

Yay! You have your very own deployment. Here are the basics:

  1. deploy your code:  git push MyFirstAWSBOX HEAD:master
  2. visit your server on the web: http://
  3. ssh in with sudo: ssh ec2-user@
  4. ssh as the deployment user: ssh app@

部署应用程序的最后一步是 git push

$ git push MyFirstAWSBOX HEAD:master

现在您的 Node.JS 应用程序已托管在 EC2 实例上并正在运行。此时,您在 awsbox 上花费了大约 20 分钟。您对应用程序进行了最小的更改。您已部署了一个新服务器,并让您的应用程序在 EC2 中启动并运行。最后,您获得了一种简单的方法来推送更改,它适合您现有的工作流程(您只需将 git push 推送到远程服务器)。

现在您已经了解了如何使用 awsbox 及其提供的一些基本功能,让我们退一步,看看它到底是什么,以及它是如何工作的。

awsbox 是…一个极简的契约

任何托管环境都对它将要运行的应用程序有一定的期望,即契约。对于 awsbox,此契约包括以下内容

应运行哪些进程由应用程序在 .awsbox.json 中指定。最简单的情况下,该文件可能如下所示

{
  "processes": [ "path/to/myprocess.js" ]
}

必须安装哪些软件由应用程序在 package.json 中指定。

联系服务器的端口通过 PORT 环境变量传递给应用程序。

在构建 awsbox 时,主要目标是最小发明,使其易于“移植”现有应用程序。

awsbox 是…一个机器映像

在创建实例的过程中,awsbox 从“Amazon 机器映像”创建机器实例,从而生成一个运行服务器,该服务器已准备就绪,可以接受您的 node.js 应用程序,安装其依赖项,并运行它。该映像基于 Amazon Linux AMI 构建,该映像是 Amazon 提供的自定义 Linux 发行版,并可以通过 yum 访问流行的基于 RPM 的软件包存储库。awsbox AMI 的 ID 在 awsbox JavaScript 库中引用。

此映像预配置了多个用户帐户ec2-user 是一个拥有机器 sudo 访问权限的帐户。proxy 是一个托管 HTTP 反向代理 的帐户,该代理通过 一些步骤 可以用作 SSL 终止器,让您支持 HTTPS,而无需修改应用程序。最后,app 用户是托管所有应用程序代码、服务器日志、基于服务器的 Git 存储库(您将推送到该存储库)以及 Git 后提交钩子 的帐户,该钩子负责在您推送后安装依赖项并启动服务器。

awsbox 是…命令行工具和库

当您 npm install awsbox 时,将安装一系列 JavaScript 库和命令行工具。命令行工具为您提供了比 Amazon 网络控制台更快的部署服务器方法,并处理了在 EC2 中创建可通过 SSH 和网络访问的实例的大部分复杂性。

awsbox 命令行工具还提供了许多命令行动词来执行 awsbox 的基本管理,可以使用 node_modules/.bin/awsbox -h 列出这些动词。

最有趣的动词是 create,它实际上是创建虚拟机。

awsbox 是…一堆功能和钩子

最后,任何非平凡的服务器都需要比 Node.JS 服务更多的东西。为了支持未知情况,awsbox 允许您在实例创建时 指定应安装的 yum 软件包。对于更自定义的配置,您有两个选择

通过 SSH 登录并执行您需要执行的操作:awsbox 的目标是让您尽可能快地行动,有时,获得服务新实例的最便捷方法是手动执行所需的步骤并编写 README。但是,还有更可重复的解决方案可用…

编写脚本以自动为您配置软件:Awsbox 有 钩子概念,这些钩子发生在实例创建或部署的不同阶段。使用这些钩子,可以 配置 mysql手动安装 redis,或者执行您需要执行的操作来启动服务。

awsbox 适合我吗?

拥有一个一致的部署非关键服务的机制,为我们的团队带来了巨大的效率优势。当您在应用程序和环境之间有一个简单且定义明确的契约时,协作会更容易。当您有一套一致的部署约定时,问题诊断会更快。最后,当应用程序的所有依赖项都明确表达时,从实验环境迁移到生产环境的成本更低

如果您正在寻找自己的实验性 Node.JS 服务的部署解决方案,请仔细查看 awsbox 的理念和设计。

系列中的先前文章

这是 一个共 12 篇关于 Node.js 的系列文章 中的第十二部分。之前的文章是

关于 Robert Nyman [资深编辑]

Mozilla 技术布道师和 Mozilla Hacks 编辑。发表演讲和撰写有关 HTML5、JavaScript 和开放网络的博客文章。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年起一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 撰写博客文章,喜欢旅行和结识新朋友。

更多 Robert Nyman [资深编辑] 的文章…


3 条评论

  1. sam dlg

    这与 AWS Beanstalk 有什么区别?

    2013 年 5 月 21 日 下午 2:18

    1. Lloyd Hilaiel

      我对 Beanstalk 不够熟悉,无法给出完整且严谨的答案。最重要的区别可能是 Beanstalk 是由 Amazon 正式支持的!

      更深入地讲,契约存在显著差异:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_custom_container.html

      我的感觉是,Beanstalk 旨在成为一个 PaaS 环境,您可以在其中部署高规模的生产实例,而 awsbox 旨在提供一种极其快速的方法来启动实验或 alpha 版本。Beanstalk 的目标是成为一个黑盒子(尽管可以访问 SSH),而 awsbox 则非常简洁,鼓励您进入并进行操作(默认情况下启用了 SSH)。

      那些对 Node.js/Beanstalk 有更深理解的人有什么想法?

      2013 年 5 月 21 日 下午 2:33

  2. Munim

    看起来非常有趣.. 如果有人将它应用到自己的私有基础设施上,而不是 Amazon AWS,我会非常兴奋。

    2013 年 5 月 22 日 凌晨 2:00

本文评论已关闭。