2016-09-23 135 views
4

我希望这是问这个问题的正确位置,如果不是,请移动或删除此帖。将Angular 2应用程序部署到EC2

我想创建一个简单的网站,可以使用Angular 2和Amazon EC2处理基本的POST和GET请求。我在Angular 2的Web应用程序的前端工作方面拥有相当丰富的经验,但在将其连接到后端以及在Amazon EC2实例上完成这些工作时经验不足。

我希望找到一个例子或一些资源,可以解释如何将HTTP服务与某种后端框架结合使用。我知道Angular提供了有关如何使用HTTP服务的示例,但很难想象后端设置需要看起来像处理这些请求,以及如何在EC2上正确配置此设置。任何帮助或资源将不胜感激!

+0

你可以将你的网站在AWS S3罚款。后端将坐在EC2中。然后你在你指定你的angular2项目的后端基础URL需要(我的意思是所有的电话都将到后端服务器),这网址应该是您的EC2的URL。此外你的后台应该接受来自S3服务器请求(为了避免CORS问题) – galvan

回答

4

前端/客户

正如@glavan说,SPA等的角2级的应用程序可以在AWS S3部署。这是SPA最具成本效益的方法。这里是部署SPA on S3的视频。 此视频将指导您逐步部署角度应用程序。

后端

AWS EC2是一个不错的选择。但有更多的替代品可供选择。正如你所说,你是后端新手,设立EC2,VPC和Elastic-ip是一个有点困难的过程。

时下,SPA的覆盖了很多业务逻辑,路由等,我们只需要我们的后台作为用于执行数据库的CRUD操作的API。我想建议一种叫做serverless的尖端技术。下面是在5分钟内启动后端的tutorial。 AWS lambda是一种称为的服务,其功能如服务。您可以使用AWS lambda + API网关+ DynamoDB构建后端。

对于如:说你要登记在后端的一些细节,你会POST一切从客户端与URL和正确的路径后端数据。在AWS lambda中,您将POST作为函数编写逻辑,其中包含解析来自请求的数据并发送到dynamoDB的逻辑。现在,通过将此函数与API网关(AWS中的另一项服务)相连,可以将此功能暴露给世界。最后我们得到一个API,可以在你的angular 2 APP中使用。 SO,在调用POST时,角2 - > API网关 - > Lambda(提取请求并发送到数据库) - > dynamoDB

使用无服务器与EC2相比的好处。

  1. 您不需要管理您的服务器(EC2)将新安全补丁更新为自动缩放,所有内容都由lambda保管。无服务器是一项完全托管服务。
  2. 只有在调用lambda函数时才支付。相比之下,即使您的网络应用程序在某一天没有收到流量,您也必须支付特定日期的日期关税。

话虽如此,与传统的后端方法相比,尝试无服务器。任何有关此问题都会受到欢迎。

+1

感谢您所有的帮助!最后,我结束了使用该起动机https://github.com/ansrivas/angular2-flask的修改版本,但因为它解决的是我有问题,我将标志着这是公认的。 – DHW

+0

我没有找到s3与路由不幸工作 – Sam

+1

可能会检查出这一个:http://stackoverflow.com/questions/39783099/deploying-react-redux-app-in-aws-s3/39783111#39783111 –

2

See this answer

如果你指的是弹性青苗的NodeJS EC2,那么这个答案是最适合你,因为我花了一段时间来弄清楚这一点,但事实证明是比我想象的要简单:

  1. this link了一些修改我做避免/usr/bin/env: node: No such file or directory问题,我添加了下面的脚本

.ebextensions/angular2deployment.config

files: 
    "/opt/elasticbeanstalk/env.vars" : 
    mode: "000775" 
    owner: root 
    group: users 
    content: | 
     export NPM_CONFIG_LOGLEVEL=error 
     export NODE_PATH=`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin 
    "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" : 
    mode: "000775" 
    owner: root 
    group: users 
    content: | 
     #!/bin/bash 
     . /opt/elasticbeanstalk/env.vars 
     function error_exit 
     { 
     eventHelper.py --msg "$1" --severity ERROR 
     exit $2 
     } 

     #install not-installed yet app node_modules 
     if [ ! -d "/var/node_modules" ]; then 
     mkdir /var/node_modules ; 
     fi 
     if [ -d /tmp/deployment/application ]; then 
     ln -s /var/node_modules /tmp/deployment/application/ 
     fi 

     OUT=$([ -d "/tmp/deployment/application" ] && cd /tmp/deployment/application && $NODE_PATH/node $NODE_PATH/npm install 2>&1) || error_exit "Failed to run npm install. $OUT" $? 
     echo $OUT 
    "/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh" : 
    mode: "000666" 
    owner: root 
    group: users 
    content: | 
     #no need to run npm install during configdeploy 
  1. 删除node_modules & dist文件夹,如果你有,两者是不需要的。
  2. 运行npm install && npm start(这一步必须是成功的),请注意,我使用的是angular2的默认package.jsonSee Angular.IO Deployment
  3. 如果#3是成功,那么你就可以再次
  4. 再删除node_modules中选择所有文件&文件夹项目(确保.ebextensions选择为好),然后对其进行压缩,不压缩的顶层文件夹
  5. 现在可以部署的压缩文件,并享受(部署,这将打破部署时,你将有子目录)!

如果您使用MacOS的,在压缩的同时,MacOS将会将增加MacOS的文件夹,这将打破部署,确保使用的工具,不会增加这些额外的目录,在我的情况下,我用YemuZip

附加说明:EC2弹性魔豆将运行npm install & npm start,这就是为什么我会推荐运行它们,并确保他们在当地的环境

相关问题