Amazon ec2 在EC2中部署Ember JS应用程序

Amazon ec2 在EC2中部署Ember JS应用程序,amazon-ec2,ember.js,ember-cli,Amazon Ec2,Ember.js,Ember Cli,我想在EC2 ubuntu实例中部署ember应用程序 我已经在EC2 ubuntu实例中安装了tomcat 我已经运行了ember build并生成了dist文件 我不知道如何让tomcat运行构建期间生成的dist文件。 有人能一步一步地解释一下,让我能清楚地理解吗?我认为你不应该提供Tomcat的Ember应用程序。至少在过去的评估中,Tomcat在SSL方面比Apache/Nginx慢得多,在静态内容方面没有Apache/Nginx快,如果更改静态内容,需要重新部署WAR文件,并且缺

我想在EC2 ubuntu实例中部署ember应用程序

  • 我已经在EC2 ubuntu实例中安装了tomcat
  • 我已经运行了ember build并生成了dist文件
我不知道如何让tomcat运行构建期间生成的dist文件。
有人能一步一步地解释一下,让我能清楚地理解吗?

我认为你不应该提供Tomcat的Ember应用程序。至少在过去的评估中,Tomcat在SSL方面比Apache/Nginx慢得多,在静态内容方面没有Apache/Nginx快,如果更改静态内容,需要重新部署WAR文件,并且缺少更常用的HTTP服务器的配置选项。 更好的方法是反向代理到应用服务器(我假设您正在运行java应用,因为您使用的是Tomcat)。从反向代理服务余烬应用程序。如果您运行的是SSL,那么您将从反向代理而不是tomcat来处理它。这就是我如何从同一个EC2实例为我的Ember应用程序和Spring Boot应用程序(为我的Ember应用程序供电的api)提供服务的方式

我将向您展示我如何在redhat上实现这一点,但您必须为ubuntu进行翻译(例如,您必须了解我使用的yum等)

  • 在虚拟机上安装apache
    yum安装httpd-y

  • /etc/httpd/conf/httpd.conf

  • 
    代理请求关闭
    ProxyPass/apihttp://localhost:8080/api
    ProxyPassReverse/apihttp://localhost:8080/api
    FallbackResource/index.html
    

    这有两个非常重要的部分。首先,在
    http://localhost:8080/
    (不在80上!),并在
    api
    或其他子路径下有一个servlet。您需要这种区别,以便您的余烬URL不会与api URL冲突。如中所述,如果您希望您的余烬应用程序在
    /
    下运行,并且在
    /users
    下有一个api端点和一个余烬路由
    /users
    ,您如何区分应该提供哪些服务?我认为您的api应该在
    /api/users
    下运行,以避免冲突

    其次,
    FallbackResource/index.html
    允许不匹配的目录返回您的
    index.html
    文件。请参见,当浏览器向服务器发出请求时:
    yourapp.com/someRoute
    ,您需要http服务器只返回
    index.html
    文件。然后,Ember将负责客户端的路由。这意味着,无论您在Ember中的路线是什么,当浏览器请求该url时,您应该始终返回
    index.html
    。我甚至不知道如何在tomcat中配置这样的规则(如果不想使用反向代理,则必须研究重写规则/指令)

  • 最后,在
    http.conf
    中找到文档根:例如
    DocumentRoot”/var/www/html“
    。这是EC2服务器上提供静态文件的路径。这是
    dist
    文件夹的内容所在。对我来说,典型的部署意味着
    ember-build
    、到服务器的scp、
    sudo-rm-rf/var/www/html/
    sudo-cp-r dist//var/www/html
    将旧的ember应用程序替换为新的。这对我很有用,因为我的余烬应用程序的内容是我需要提供的唯一静态文件。如果您有其他需要,您不能像我一样删除并替换旧的文档根目录 确保httpd/apache正在运行<代码>在redhat上启动httpd服务。更改文件时不必重新启动服务器