繁体   English   中英

我的远程服务器(Amazon EC2)是否需要运行2台不同的服务器才能运行EmberJS和Spring Boot?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM