将Angular 2 App部署到EC2

时间:2016-09-23 14:39:20

标签: node.js amazon-web-services angular amazon-ec2 backend

我希望这是提出这个问题的正确位置,如果不是,请移动或删除此帖子。

我正在尝试使用Angular 2和Amazon EC2创建一个可以处理基本POST和GET请求的简单网站。我在Angular 2中处理Web应用程序的前端方面有相当多的经验,但在将其连接到后端并且在Amazon EC2实例上这样做的经验很少。

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

2 个答案:

答案 0 :(得分:6)

<强>前/客户端

正如@glavan所说,像angular 2应用程序这样的SPA可以部署在AWS S3中。这是SPA最具成本效益的方法。以下是部署SPA on S3的视频。 该视频将指导您逐步部署角度应用程序。

<强>后端

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

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

例如:假设您要在后端注册一些详细信息,您将 POST 使用网址和正确路径从客户端到后端的所有数据。在AWS lambda中,您将 POST 的逻辑编写为函数,其中包含从请求解析数据并发送到dynamoDB的逻辑。现在,通过将此功能与API网关(AWS中的另一项服务)连接,可以将此功能公开给世界。最后我们得到一个API,可用于你的角度2 APP。因此,在调用POST时, angular 2 - &gt; API网关 - &gt; Lambda(提取请求并发送到DB) - &gt; dynamoDB

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

  1. 您不需要管理服务器(EC2)从更新新安全补丁到自动扩展,所有内容都由lambda处理。无服务器是一种完全托管的服务。
  2. 您只需在调用lambda函数时付费。相比之下,即使您的网络应用程序在某一天没有收到流量,您也必须支付给定日期的日费。
  3. 说过,与传统的后端方法相比,尝试无服务器。对此有任何疑问都会受到欢迎。

答案 1 :(得分:3)

See this answer

如果你指的是弹性beanstalk nodejs ec2,那么这个答案对你来说是最好的,因为我花了一些时间来解决这个问题,但事实证明它比我想象的要简单:

  1. 关注this link我做了一些修改以避免/usr/bin/env: node: No such file or directory问题,我添加了以下脚本
  2. <强> .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&amp;如果你有dist文件夹,则两者都不需要。
    2. 运行npm install && npm start(此步骤必须成功),请注意我使用的是angular2的默认package.json See Angular.IO Deployment
    3. 如果#3成功,则可以再次重新删除node_modules
    4. 选择所有文件&amp;项目中的文件夹(确保选中.ebextensions),然后压缩它们,不要压缩顶层文件夹(部署时你将有子目录,这将破坏部署)
    5. 现在您可以部署该压缩文件并享受!
    6. 如果您正在使用MacOS,在压缩时,macos会添加macos文件夹,这将破坏部署,请确保使用不会添加此额外目录的工具,在我的情况下,我使用了YemuZip

      附加说明:EC2弹性豆茎将运行npm install&amp; npm start,这就是我建议运行它们并确保它们在您的本地环境中正常的原因