如何在 Tomcat 8.5 上部署 Broadleaf 5.2
How do I deploy Broadleaf 5.2 on Tomcat 8.5
我正在使用 Eclipse (photon) 和 Broadleaf 社区演示项目(站点、管理、api 和核心)。
我已经能够 运行 site、admin 和 api 在我的本地开发机器上使用嵌入式 Eclipse Web 服务器,现在我正在尝试将站点、管理和 api 项目部署为 AWS EC2 实例上的 WAR 运行宁 Tomcat 8.5 (JVM 1.7).
我已遵循 Broadleaf 文档:
- https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/tomcat
- https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/deploying-a-.war-file
- https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file
plus many other Google search sites on the subject,但都没有成功。那它们都是从 2012 年到 2015 年的,并且参考了 BL 的旧版本(Servlet 3.0 之前)。
我什至尝试过 "web.xml" 方法:
Maven clean/install 生成的 WAR 文件(我也试过 "package"),看起来不像典型的 WAR 文件我'已经习惯了:
站点:(ROOT.war)
META-INF
org
WEB-INF
有人可以提供示例或网站,说明如何在 Tomcat 服务器上将 BLC 项目部署为 WAR 吗?
我得到的结果要么是端口 8443 上的 404,要么是空白页(使用 web.xml 方法时)。
很抱歉提出这个 open/vague 问题,但是关于 BLC 5.2 的文档很少甚至没有,我已经转向 Stack Overflow 寻求帮助。
谢谢
站点应用程序
@SpringBootApplication
@EnableAutoConfiguration
public class SiteApplication extends SpringBootServletInitializer {
@Configuration
@EnableBroadleafSiteAutoConfiguration
public static class BroadleafFrameworkConfiguration {}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SiteApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SiteApplication.class, args);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.mycompany-community</groupId>
<artifactId>boot-community-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>boot-community-demo-site</artifactId>
<packaging>war</packaging>
<name>Community Demo Site</name>
<description>Web Module For Customized Broadleaf Commerce Site</description>
<properties>
<debug.port>8000</debug.port>
</properties>
<build>
<finalName>ROOT</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.mycompany-community</groupId>
<artifactId>boot-community-demo-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>broadleaf-framework-web</artifactId>
</dependency>
<dependency>
<groupId>com.broadleafcommerce</groupId>
<artifactId>broadleaf-boot-starter-solr</artifactId>
</dependency>
<!--
<dependency>
<groupId>com.broadleafcommerce</groupId>
<artifactId>broadleaf-boot-starter-hsql-database</artifactId>
</dependency>
-->
<dependency>
<groupId>com.broadleafcommerce</groupId>
<artifactId>broadleaf-boot-starter-database</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>broadleaf-thymeleaf3-presentation</artifactId>
</dependency>
<dependency>
<groupId>com.github.zhanhb</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
好的,我们想通了。我想分享我们采取的步骤,因为它是来自不同来源(BLC 和 Spring 引导站点)的 steps/information 的组合。
步骤 1:BLC 代码库
从以下位置下载源代码:https://github.com/BroadleafCommerce/DemoSite
我使用的文件是"DemoSite-develop-5.2.x".
将其解压缩到您的 IDE 可以 view/access 的位置。
步骤 2:IDE(本例中为 Eclipse)
按照本网站的步骤(几乎一字不差):
https://www.broadleafcommerce.com/docs/core/current/getting-started/ide-setup/eclipse-setup
您现在应该拥有站点、管理员和api 运行在本地连接,与内部 HSQL 数据库对话。
- 管理员:https://localhost:8444/admin
- 站点:https://localhost:8443/
- API: https://localhost:8445/api/v1/swagger-ui.html
步骤 3:更改为 MySQL 数据库。
我几乎遵循了这些说明,step-by-step(尽管我的机器上已经有 MySQL):
步骤 4:BLC 项目 code/xml 更改
一切都从这个开始 link:
你在哪里找到:
- 正在部署 .war 文件
- 我的web.xml在哪里?
按照以下 87.1 中的步骤操作:
基本上:
- SpringSiteApplication.java
中的 BootServletInitializer
<packaging>war</packaging>
- pom.xml 文件中的 "spring-boot-starter-tomcat" 行。
然后我创建了一个 "web.xml" 文件,(虽然我不是 100% 确定我需要这个,因为我的 servlet 容器是 Servlet 3.1,BLC 文档说所有这些 web.xml 配置现在由注释处理)。
基本上:
- SiteApplication.java 中的 BroadleafBootServletContextInitializer
- 您会注意到我们之前添加了 "SpringBootServletInitializer"。
- 现在我们将 "SpringBootServletInitializer" 替换为 "BroadleafBootServletContextInitializer"。
- 添加页面底部的 "web.xml"。
- 不要忘记将 "context-param" 标签的 "param-value" 更改为正确的包裹位置。
第 5 步:Tomcat 更改
另一个 link 拥有您需要的大部分(如果不是全部):
/bin
新 "setenv.sh" 文件包含:
export CATALINA_OPTS="-Xmx1536M -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
/conf
context.xml - 取消注释以下行
`<Manager pathname="" />`
somenamehere-keystore(需要生成,或者抓取BLC代码库中的那个)
server.xml - 添加了 HTTPS 连接器:
<Connector SSLEnabled="true"
clientAuth="false"
keystoreFile="/path/to/server/apache-tomcat-8.5.29/conf/*somenamehere*.keystore"
keystorePass="BLCPassword"
keyPass="BLCPassword"
keystoreType="PKCS12"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"
maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLSv1.2"/>
Note that I had to add the "keystoreType" attribute due to
my keystore being in the PKCS12 format, as opposed to JKS.
The "ciphers" attribute was added as I got an exception
complaining about the TLS I was using.
tomcat-users.xml
Added the following two lines:
<role rolename="manager-gui"/>
<user username="admin" password="ReallyHardToGuessPW" roles="manager-gui,admin-gui"/>
I'm not sure if this step was 100% needed, but it allows me
to see the BLC projects within the "manager" app of Tomcat.
/webapps
host-manager 和 manager apps
In the "META-INF" of these apps I commented out both the "Valve" and "Manager"
tags in the "Context".
This was extracted from this link:
https://www.howtoforge.com/tutorial/how-to-install-apache-tomcat-8-5-on-ubuntu-16-04/
(Look at "Step 6")
This appears to be the only difference in my earlier attempts in
getting this running (pre-cry-for-SO-help), as yesterday and this
morning I had already performed all the steps in this post.
步骤 6:Maven 清理和安装
在 Eclipse 中,在每个站点和管理项目上("boot-community-site" 和 "boot-community-admin"),right-click 和 select 运行 作为 >> Maven clean。一旦完成 运行 运行 As >> Maven install.
现在在每个项目的 "target" 目录中,您应该会看到一个 WAR 文件,(站点项目为 "ROOT",管理项目为 "admin")。
步骤 7:启动 Tomcat 服务器
我启动了 Tomcat 服务器,其中的常驻应用程序(文档、示例、host-manager、管理器和 ROOT)保持不变。然后我 hot-deployed BLC "admin.war" 和 "ROOT.war" (站点)到 Tomcat /webapps 目录。
如果这对您不起作用,您可以随时停止 Tomcat 服务器并将 ROOT.war 和 admin.war 文件放在 /webapps 目录中。然后启动服务器。
如果一切顺利,在启动时查看 "catalina.out" 日志文件,您将看到一条 ASCII "Broadleaf Commerce" 消息滚动,每个 BLC 应用程序一次,然后是一堆 MySQL 休眠消息。 "m5.large" AWS EC2 实例上站点和管理员的整个启动时间似乎约为 4 分钟。
我会在想到我错过的内容时添加到这里,但我现在在 Tomcat 8.5 容器上安装了 BLC 5.2 运行ning。
希望它对其他遇到同样问题的人有用。
非常有帮助的指南。我想添加一些关于 步骤 5 的内容,尤其是关于负载平衡器环境中的 spring 安全性的内容。
由于 SSL 将发生在前端代理上,spring 的安全性 requiresSecure() 可能会导致无休止的重定向循环。
一个解决方案是:
在前端代理上安装 ssl 证书后,将这两个请求 headers 包含在您的 .properties 文件中:
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
不需要从 tomcat 进行重定向,因此您不必按照第 5 步所述在 server.xml 中包含 https 连接器。
只需添加这两行
secure="true"
和
scheme="https"
在您 tomcat 的 server.xml
的默认连接器上
<Connector port="hereisyourdefaultportofyourtomcat" protocol="HTTP/1.1"
connectionTimeout="20000"
secure="true"
scheme="https"
/>
请注意:front-end 代理应发送上述请求 headers。大多数 cases.Check here
默认情况下会发生这种情况
我正在使用 Eclipse (photon) 和 Broadleaf 社区演示项目(站点、管理、api 和核心)。
我已经能够 运行 site、admin 和 api 在我的本地开发机器上使用嵌入式 Eclipse Web 服务器,现在我正在尝试将站点、管理和 api 项目部署为 AWS EC2 实例上的 WAR 运行宁 Tomcat 8.5 (JVM 1.7).
我已遵循 Broadleaf 文档:
- https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/tomcat
- https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/deploying-a-.war-file
- https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file
plus many other Google search sites on the subject,但都没有成功。那它们都是从 2012 年到 2015 年的,并且参考了 BL 的旧版本(Servlet 3.0 之前)。
我什至尝试过 "web.xml" 方法:
Maven clean/install 生成的 WAR 文件(我也试过 "package"),看起来不像典型的 WAR 文件我'已经习惯了:
站点:(ROOT.war)
META-INF
org
WEB-INF
有人可以提供示例或网站,说明如何在 Tomcat 服务器上将 BLC 项目部署为 WAR 吗?
我得到的结果要么是端口 8443 上的 404,要么是空白页(使用 web.xml 方法时)。
很抱歉提出这个 open/vague 问题,但是关于 BLC 5.2 的文档很少甚至没有,我已经转向 Stack Overflow 寻求帮助。
谢谢
站点应用程序
@SpringBootApplication
@EnableAutoConfiguration
public class SiteApplication extends SpringBootServletInitializer {
@Configuration
@EnableBroadleafSiteAutoConfiguration
public static class BroadleafFrameworkConfiguration {}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SiteApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SiteApplication.class, args);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.mycompany-community</groupId>
<artifactId>boot-community-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>boot-community-demo-site</artifactId>
<packaging>war</packaging>
<name>Community Demo Site</name>
<description>Web Module For Customized Broadleaf Commerce Site</description>
<properties>
<debug.port>8000</debug.port>
</properties>
<build>
<finalName>ROOT</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.mycompany-community</groupId>
<artifactId>boot-community-demo-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>broadleaf-framework-web</artifactId>
</dependency>
<dependency>
<groupId>com.broadleafcommerce</groupId>
<artifactId>broadleaf-boot-starter-solr</artifactId>
</dependency>
<!--
<dependency>
<groupId>com.broadleafcommerce</groupId>
<artifactId>broadleaf-boot-starter-hsql-database</artifactId>
</dependency>
-->
<dependency>
<groupId>com.broadleafcommerce</groupId>
<artifactId>broadleaf-boot-starter-database</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>broadleaf-thymeleaf3-presentation</artifactId>
</dependency>
<dependency>
<groupId>com.github.zhanhb</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
好的,我们想通了。我想分享我们采取的步骤,因为它是来自不同来源(BLC 和 Spring 引导站点)的 steps/information 的组合。
步骤 1:BLC 代码库
从以下位置下载源代码:https://github.com/BroadleafCommerce/DemoSite
我使用的文件是"DemoSite-develop-5.2.x".
将其解压缩到您的 IDE 可以 view/access 的位置。
步骤 2:IDE(本例中为 Eclipse)
按照本网站的步骤(几乎一字不差):
https://www.broadleafcommerce.com/docs/core/current/getting-started/ide-setup/eclipse-setup
您现在应该拥有站点、管理员和api 运行在本地连接,与内部 HSQL 数据库对话。
- 管理员:https://localhost:8444/admin
- 站点:https://localhost:8443/
- API: https://localhost:8445/api/v1/swagger-ui.html
步骤 3:更改为 MySQL 数据库。
我几乎遵循了这些说明,step-by-step(尽管我的机器上已经有 MySQL):
步骤 4:BLC 项目 code/xml 更改
一切都从这个开始 link:
你在哪里找到:
- 正在部署 .war 文件
- 我的web.xml在哪里?
按照以下 87.1 中的步骤操作:
基本上:
- SpringSiteApplication.java 中的 BootServletInitializer
<packaging>war</packaging>
- pom.xml 文件中的 "spring-boot-starter-tomcat" 行。
然后我创建了一个 "web.xml" 文件,(虽然我不是 100% 确定我需要这个,因为我的 servlet 容器是 Servlet 3.1,BLC 文档说所有这些 web.xml 配置现在由注释处理)。
基本上:
- SiteApplication.java 中的 BroadleafBootServletContextInitializer
- 您会注意到我们之前添加了 "SpringBootServletInitializer"。
- 现在我们将 "SpringBootServletInitializer" 替换为 "BroadleafBootServletContextInitializer"。
- 添加页面底部的 "web.xml"。
- 不要忘记将 "context-param" 标签的 "param-value" 更改为正确的包裹位置。
第 5 步:Tomcat 更改
另一个 link 拥有您需要的大部分(如果不是全部):
/bin
新 "setenv.sh" 文件包含:
export CATALINA_OPTS="-Xmx1536M -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
/conf
context.xml - 取消注释以下行
`<Manager pathname="" />`
somenamehere-keystore(需要生成,或者抓取BLC代码库中的那个)
server.xml - 添加了 HTTPS 连接器:
<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/path/to/server/apache-tomcat-8.5.29/conf/*somenamehere*.keystore" keystorePass="BLCPassword" keyPass="BLCPassword" keystoreType="PKCS12" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLSv1.2"/> Note that I had to add the "keystoreType" attribute due to my keystore being in the PKCS12 format, as opposed to JKS. The "ciphers" attribute was added as I got an exception complaining about the TLS I was using.
tomcat-users.xml
Added the following two lines: <role rolename="manager-gui"/> <user username="admin" password="ReallyHardToGuessPW" roles="manager-gui,admin-gui"/> I'm not sure if this step was 100% needed, but it allows me to see the BLC projects within the "manager" app of Tomcat.
/webapps
host-manager 和 manager apps
In the "META-INF" of these apps I commented out both the "Valve" and "Manager" tags in the "Context". This was extracted from this link: https://www.howtoforge.com/tutorial/how-to-install-apache-tomcat-8-5-on-ubuntu-16-04/ (Look at "Step 6") This appears to be the only difference in my earlier attempts in getting this running (pre-cry-for-SO-help), as yesterday and this morning I had already performed all the steps in this post.
步骤 6:Maven 清理和安装
在 Eclipse 中,在每个站点和管理项目上("boot-community-site" 和 "boot-community-admin"),right-click 和 select 运行 作为 >> Maven clean。一旦完成 运行 运行 As >> Maven install.
现在在每个项目的 "target" 目录中,您应该会看到一个 WAR 文件,(站点项目为 "ROOT",管理项目为 "admin")。
步骤 7:启动 Tomcat 服务器
我启动了 Tomcat 服务器,其中的常驻应用程序(文档、示例、host-manager、管理器和 ROOT)保持不变。然后我 hot-deployed BLC "admin.war" 和 "ROOT.war" (站点)到 Tomcat /webapps 目录。
如果这对您不起作用,您可以随时停止 Tomcat 服务器并将 ROOT.war 和 admin.war 文件放在 /webapps 目录中。然后启动服务器。
如果一切顺利,在启动时查看 "catalina.out" 日志文件,您将看到一条 ASCII "Broadleaf Commerce" 消息滚动,每个 BLC 应用程序一次,然后是一堆 MySQL 休眠消息。 "m5.large" AWS EC2 实例上站点和管理员的整个启动时间似乎约为 4 分钟。
我会在想到我错过的内容时添加到这里,但我现在在 Tomcat 8.5 容器上安装了 BLC 5.2 运行ning。
希望它对其他遇到同样问题的人有用。
非常有帮助的指南。我想添加一些关于 步骤 5 的内容,尤其是关于负载平衡器环境中的 spring 安全性的内容。
由于 SSL 将发生在前端代理上,spring 的安全性 requiresSecure() 可能会导致无休止的重定向循环。
一个解决方案是:
在前端代理上安装 ssl 证书后,将这两个请求 headers 包含在您的 .properties 文件中:
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
不需要从 tomcat 进行重定向,因此您不必按照第 5 步所述在 server.xml 中包含 https 连接器。
只需添加这两行
secure="true"
和
scheme="https"
在您 tomcat 的 server.xml
的默认连接器上<Connector port="hereisyourdefaultportofyourtomcat" protocol="HTTP/1.1"
connectionTimeout="20000"
secure="true"
scheme="https"
/>
请注意:front-end 代理应发送上述请求 headers。大多数 cases.Check here
默认情况下会发生这种情况