将 Angular 2 应用程序部署到 EC2

Posted

技术标签:

【中文标题】将 Angular 2 应用程序部署到 EC2【英文标题】:Deploy Angular 2 App to EC2 【发布时间】:2017-02-01 11:24:43 【问题描述】:

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

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

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

【问题讨论】:

您可以在 AWS S3 中托管您的网站。后端将位于 EC2 中。那么您需要在 angular2 项目中指定后端基本 url(我的意思是所有调用都将发送到后端服务器),并且该 url 应该是您的 EC2 的 url。此外,您的后端应该接受来自 S3 服务器的请求(以避免 CORS 问题) 【参考方案1】:

See this answer

如果您指的是弹性beantalk nodejs ec2,那么这个答案最适合您,因为我花了一段时间才弄清楚,但结果比我想象的要容易:

    在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
    删除 node_modulesdist 文件夹(如果有的话,这两个都不需要)。 运行npm install && npm start(这一步一定要成功),注意我用的是angular2默认的package.jsonSee Angular.IO Deployment 如果#3成功,则可以再次重新删除node_modules 选择项目中的所有文件和文件夹(确保.ebextensions也被选中),然后压缩它们,不要压缩顶部文件夹(部署时会有子目录会破坏部署) 现在您可以部署该压缩文件并开始使用了!

如果您使用的是 MacOS,在压缩时,macos 将添加 macos 文件夹,这会破坏部署,请确保使用不会添加此额外目录的工具,在我的情况下,我使用了 YemuZip

附加说明:EC2 elastic beanstalk 将运行 npm installnpm start,这就是为什么我建议运行它们并确保它们在您的本地环境中正常

【讨论】:

【参考方案2】:

前端/客户端

正如@glavan 所说,可以在 AWS S3 中部署类似 Angular 2 的 SPA 应用程序。这是 SPA 最具成本效益的方法。这是部署SPA on S3 的视频。 该视频将指导您逐步完成部署 Angular 应用程序的说明。

后端

AWS EC2 是一个不错的选择。但是还有更多可用的替代方案。正如您所说,您是后端新手,设置 EC2、VPC 和 Elastic-ip 是一个有点困难的过程。

现在,SPA 涵盖了很多业务逻辑、路由等,我们只需要我们的 后端 作为 API 来执行数据库的 CRUD 操作。我想推荐一种名为serverless 的尖端技术。这是tutorial,用于在 5 分钟内启动您的后端。 AWS lambda 是一种称为function as service 的服务。您可以使用 AWS lambda + API 网关 + DynamoDB 构建您的后端。

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

与 EC2 相比,使用无服务器的优势。

    您无需管理服务器 (EC2),从更新新的安全补丁到自动扩展,一切都由 lambda 负责。无服务器是一项完全托管的服务。 您只需在调用 lambda 函数时付费。相比之下,即使您的网络应用在某一天没有收到流量,您也必须为该天支付当日资费。

话虽如此,与传统后端方法相比,请尝试无服务器。欢迎对此提出任何问题。

【讨论】:

感谢大家的帮助!最后,我最终使用了此启动器的修改版本github.com/ansrivas/angular2-flask,但我会将其标记为已接受,因为它解决了我遇到的所有问题。 可以看看这个:***.com/questions/39783099/…

以上是关于将 Angular 2 应用程序部署到 EC2的主要内容,如果未能解决你的问题,请参考以下文章

将 Angular 2 应用程序部署到 Heroku

使用 AWS Elastic Beanstalk 将多个应用程序部署到单个 EC2 实例

如何将 Rails 应用程序部署到 EC2(亚马逊)

如何将现有应用程序部署到新的 EC2 服务器?

将 Angular 2 应用程序部署到 AWS Elastic Beanstalk

将 Hapi.js 应用程序部署到 AWS EC2