[英]Does my remote server (Amazon EC2) need 2 different servers running to run EmberJS and Spring Boot?
看来,对于EmberJS,我们需要一个服务器来运行,通常在localhost:4040上运行。
Spring Boot需要其自己的服务器才能在localhost:8080上进行粗略运行。
是否真的需要在远程服务器上运行2台不同的服务器,甚至建议这样做?
为什么我不能只从EmberJS获取javascript并将其放在我的Spring Boot项目中。 如进入静态资源文件夹并将EmberJS文件放在那里?
为什么我们首先真的需要EmberJS服务器? 它是浏览器读取的前端代码吗?
如果不推荐这样做,那么我们如何在一台服务器上同时使用EmberJS和Spring Boot? 我看到的每个地方都在自己的服务器上使用EmberJS,并向localhost:8080进行交叉请求以进行春季启动。
我是Web App开发人员的新手,所以有些术语可能会困扰我。
EmberJS服务器仅用于开发。 如果要发布版本,则需要进行生产构建。 然后,您可以将生成的文件打包在SpringBoot jar中。
ember build --env production
构建完成后,您将在应用程序的dist /目录中找到所有串联和缩小的资产。
来源: https : //guides.emberjs.com/release/getting-started/quick-start/#toc_building-for-production
我将Spring Boot与ember.js结合使用。 您不需要两个服务器,但是我个人更喜欢在Spring Boot(Apache或nginx)中使用SSL终止反向代理。 我这样做的原因有很多(主要是关于SSL和服务静态资产的性能,以及通常更容易配置的SSL,压缩和缓存)。 这是IMO更好的生产设置。
无论如何,对于apache,这是我在/etc/httpd/conf/httpd.conf
内部的centos
使用的配置:
<VirtualHost *:80>
ProxyRequests Off
ProxyPass /api http://localhost:8080/api
ProxyPassReverse /api http://localhost:8080/api
RewriteEngine on
RewriteCond %{SERVER_NAME} =myhostname.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
FallbackResource /index.html
Include /etc/httpd/conf/httpd-le-ssl.conf
在上面,用您的主机名替换myhostname.com
。 上面的配置所做的是通过纯HTTP将对/api
所有https请求代理到本地运行的Spring Boot Tomcat服务器(我使用嵌入式Tomcat部署为可执行jar)。 在application.properties
我指定我的REST servlet应该在/api
运行
server.servlet.context-path=/api/
rewrite config只是将所有http请求重写为https,这是一个好习惯。 最后, FallbackResource /index.html
非常重要。 如果我的服务器找不到资源,这会将我的服务器配置为始终返回ember的index.html
文件。 看,假设您有一条foo
路线。 当某人在其浏览器中访问/foo
时,它将对您的Web服务器进行HTTP GET
请求/foo
资源(该资源不存在),b / c Ember中的路由由Ember本身处理。 相反,您必须做的是返回index.html
文件,该文件将提取必要的资产,这些资产最终将在客户端调用必要的Ember路由代码以显示foo
路由。
因此,这意味着我们需要将index.html
放到apache
可以服务的地方。 您的apache
配置将在诸如DocumentRoot "/var/www/html"
类的行中显示一行,该行是apache将为/
服务的目录。 这是我们必须准备好生产就绪的ember构建的地方,其中包括index.html
文件。
退一步,如果您只在本地运行ember s
,那么您甚至可能不知道index.html
的存在。 但是,与此命令一起使用的捆绑服务器不是生产工具。 对于生产,您必须首先构建自己的应用程序:
ember build --environment=production
在ember-cli-build.js
文件中,您可能只希望进行production
优化,例如:
var app = new EmberApp(defaults, {
minifyJS: EmberApp.env() === 'production',
minifyCSS: EmberApp.env() === 'production',
fingerprint: {
enabled: EmberApp.env() === 'production'
}
});
这将产生一个/dist
文件夹,其中包含index.html
以及所有资产,例如您的javascript,ember的javascript,css文件等。您将需要将此文件夹的内容复制到您定义为DocumentRoot
的目录( /var/www/html
)。 现在, apache
可以为您的Ember应用程序提供服务,并将您的所有api请求代理到您的spring boot应用程序(不能在特权端口(例如80或443)上运行)。
现在,您可以将前端余烬部署与后端部署分开,这是一个巨大的胜利。 您的余烬部署需要零后台停机时间!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.