我想在EC2 ubuntu实例中部署ember应用程序。
我不知道如何使tomcat运行在构建过程中生成的dist文件。 有人可以一步一步解释它,以便我清楚地理解吗?
答案 0 :(得分:1)
我认为您不应该从Tomcat提供Ember应用程序。至少在我过去评估时,Tomcat的SSL速度比Apache / Nginx慢得多,静态内容的速度不如静态内容,如果更改静态内容,则需要重新部署WAR文件,并且缺少更常见的配置选项使用过的HTTP服务器。 更好的方法,反向代理到您的应用程序服务器(我假设您正在使用Java应用程序,因为您正在使用Tomcat)。通过反向代理服务Ember应用。如果您正在运行SSL,则可以通过反向代理而不是tomcat来处理所有SSL。这就是我从同一EC2实例为Ember应用程序和Spring Boot应用程序(为ember应用程序供电的api)提供服务的方式。
我将向您展示如何在Redhat上进行操作,但是您必须翻译ubuntu(例如,在我使用yum的地方有apt-get等)。
在VM上安装apache
yum install httpd -y
在/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ProxyRequests Off
ProxyPass /api http://localhost:8080/api
ProxyPassReverse /api http://localhost:8080/api
</VirtualHost>
FallbackResource /index.html
这有两个非常重要的部分。首先,您在http://localhost:8080/
(而不是80!)上运行tomcat服务,并在api
或其他子路径下有一个servlet。您需要这种区分,以便您的余烬网址不会与您的API网址冲突。与之类似,如果您希望Ember应用程序在/
下运行,并且在/users
下有一个api端点,而Ember路由为/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应用程序。这对我有用,因为ember应用程序的内容是我需要提供的唯一静态文件。如果您还有其他需求,则不能像我一样删除并替换旧文档的根目录。 确保httpd / apache正在运行! service httpd start
在redhat上。更改文件时,不必重新启动服务器。