如何正确地将应用程序(nodeJS)部署到AWS

时间:2015-10-10 17:11:55

标签: angularjs node.js git mongodb amazon-web-services

我曾写过上一篇文章,但是,也许我有点过于模糊和/或不清楚,所以,我会尽力解释我到底想要什么,到目前为止我做了些什么。试图实现它:

我有一个非常简单的应用程序,我使用IDE WebStorm和MEAN堆栈开发。

我采取了一些步骤将其从我的localhost传递到Web(特别是AWS):

1)我在MongoLab中设置了一个MongoDB数据库,所以,我的#34;连接字符串"在代码中类似于:

var mongoose = require("mongoose");

mongoose.connect(" mongodb的:// USER:PASS@ds041643.mongolab.com:41643 / MYDB&#34);

所以,正如大家都看到的那样,我没有使用AWS提供的任何数据库服务,因为我认为它不应该是强制性的(我可能完全错了)。

2)显然,与服务器代码相关的所有路由和连接都来自:

" http://localhost:3000/ASAMPLEROUTE"简单地说:

" / ASAMPLEROUTE"

3)应用程序从侦听端口3000开始,侦听:process.env.PORT或静态更高端口,如:8080。

4)存储库中的文件夹结构对我来说是最复杂的:

服务器文件的名称必须是server.js,它必须存在于我的应用程序的根目录中。所有其他文件和/或文件夹,如负责使用RaphaelJS等库,连接到数据库或包含"前端"代码,可以按照我的意愿放在各自的位置?

例如,此存储库结构是否适合成功部署:

enter image description here

  • db文件夹:包含连接到我的MongoLab数据库所需的文件以及我在我的应用程序中使用的模型。我在文件server.js中引用这些文件来保存/从数据库获取内容;
  • 公共文件夹:包含所有HTML页面,一个名为bower_components的子文件夹,其中包含angularJS和一个名为app.js的JS文件,该文件将允许交互,并且可以让事情发生变化。在视觉上,即使用RaphaelJS库和AngularJS绘制内容并响应按钮点击等。它将以POST / GET的形式向"服务器端"发送请求。即DB;
  • styles文件夹:在大多数HTML页面上引用,包含一些使布局和应用程序外观所需的CSS / Bootstrap文件"漂亮"。请注意,我正在使用从CDN中获取的一些CSS文件,如bootstrapCDN;
  • node_modules文件夹:包含项目运行所需的所有依赖项,如moongose,nodemailer,express等。
  • 静态文件server.js& Raphael.js:简单的RaphaelJS库和我需要继续在后台运行的服务器文件"永远" (我永远都知道nodejitsu模块),以便应用程序实际上可以备份"通过工作服务器。这应该不断运行,以便应用程序可以工作;

我需要的EXTRA STUFF:

1)github repo是私有的,因此,为了远程连接它,我需要一个SSH密钥对,可以在AWS控制台中生成并保存在您上面看到的同一文件夹中。这是必需的,因为repo是私有的,我们需要在没有密码问题的情况下访问它;

2)文件package.json - "确认"应用程序作为nodeJS之一,其中列出了所有依赖项,并指定了某些组件的启动脚本/特定版本。就我而言,它看起来像这样:

{
  "name": "SSED",
  "version": "0.0.0",
  "dependencies": {
    "body-parser": "~1.14.0",
    "cors": "~2.7.1",
    "express": "~4.13.3",
    "grunt": "~0.4.5",
    "nodemailer": "~0.6.5",
    "mongoose": "~4.1.7",
    "xmlbuilder": "~3.1.0"
  },
"scripts" : {
   "start" : "server.js"
},
"engines" : {
    "node": "0.10.25"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/bruno-oliveira/SSDS_Deploy.git"
  }
}

现在提出真正的问题:

亚马逊提供的服务:

问题1:我应该使用什么来完成此应用的部署;外部数据库和nodeJS服务器文件是否连续运行?

可能的答案: 我只看了2项服务:

1)EC2 - Amazon Elastic Compute Cloud;

2)OpsWorks(在管理工具下)服务,这对我来说似乎很好,因为它允许我让我的服务器运行或者我认为,但我从来没有让它工作;

问题2:是否可以从A CDN提供内容以在AWS平台中呈现CSS?

问题3:我曾与之合作过的同事设法使用此功能使CSS和AngularJS 100%正常运行:https://aws.amazon.com/marketplace/pp/B00GXYE87S 但是服务器文件无法在那里运行,即使我们将整个github repo下载到那里,安装nodeJS并运行典型的命令:

node server.js

括号中有一个带有(HVM)字样的版本,但我们不知道那是什么。

如果你能给我们一些提示,那将是非常有帮助的,特别是因为我们为此付出了代价,这是我们第一次使用这个,而且它是一个硕士论文由于十一月,所以我们看到我们的生活倒退了。

1 个答案:

答案 0 :(得分:2)

问题到处都是,但我会尽力做到最好。

  

如果你能给我们一些提示......

我可以给你一些提示......

  

我们正在为此付出代价

您可以免费获得1年的AWS:https://aws.amazon.com/free/

我的感觉:只需在EC2上创建一个实例并部署所有服务,就像使用自己的本地主机一样。

您可以使用SSH命令行访问或某些远程桌面协议。

您还可以咨询Digital Ocean教程库:https://www.digitalocean.com/community/tags/node-js?type=tutorials

他们提供一键式部署节点应用程序,原则上我发现它们比AWS更容易使用。

  

从CDN传送内容以在AWS平台中呈现CSS?

天啊,为什么不呢。您只需引用静态CSS文件。我没有看到任何问题。

你真的需要CDN吗?似乎还有更多需要处理的问题。