如何在Tomcat 8.5上部署Broadleaf 5.2

时间:2018-03-28 19:37:58

标签: broadleaf-commerce

我正在使用Eclipse(光子)和Broadleaf社区演示项目(site,admin,api和core)。

我已经能够使用嵌入式Eclipse Web服务器在我的本地开发计算机上运行 site admin api ,并且现在我正在尝试在运行Tomcat 8.5(JVM 1.7)的AWS EC2实例上将site,admin和api项目部署为WAR。

我遵循了Broadleaf文档:

加上许多其他Google搜索网站的主题,但都没有成功。这和他们都是从2012年到2015年,并参考BL的旧版本(pre-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方法时)。

对于这个相当开放/模糊的问题感到抱歉,但是对于BLC 5.2几乎没有这方面的文档,我转向Stack Overflow寻求帮助。

由于

SiteApplication

@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>

2 个答案:

答案 0 :(得分:4)

好的,我们想通了。我想分享我们采取的步骤,因为它是来自不同来源(BLC和Spring Boot站点)的步骤/信息的组合。

第1步:BLC代码库

从以下网址下载资源:https://github.com/BroadleafCommerce/DemoSite

我使用的文件是&#34; DemoSite-develop-5.2.x&#34;。

在IDE可以查看/访问的位置解压缩。

第2步:IDE(本例中为Eclipse)

按照本网站的步骤(几乎是逐字逐句):

https://www.broadleafcommerce.com/docs/core/current/getting-started/ide-setup/eclipse-setup

您现在应该在本地运行站点 admin api ,与内部HSQL数据库通信。

  • 管理员:https:// localhost:8444 / admin
  • 网站:https:// localhost:8443 /
  • API:https://localhost:8445 / api / v1 / swagger-ui.html

第3步:转到MySQL数据库。

我几乎一步一步地遵循这些说明(虽然我已经在我的机器上安装了MySQL):

https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/database-configuration/mysql#

第4步:BLC项目代码/ xml更改

一切都从这个链接开始:

https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/deploying-a-.war-file

你发现的地方:

  • 部署.war文件
  • 我的web.xml在哪里?

按照以下87.1中的步骤进行操作:

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

基本上:

  • SiteApplication.java中的SpringBootServletInitializer
  • <packaging>war</packaging>
  • &#34; spring-boot-starter-tomcat&#34; pom.xml文件中的行。

然后我创建了一个&#34; web.xml&#34;文件,(虽然我并不是100%确定我需要这个,因为我的servlet容器是Servlet 3.1,而BLC文档说所有这个web.xml配置现在都由注释处理)。

https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/using-a-web.xml

基本上:

  • SiteApplication.java中的BroadleafBootServletContextInitializer
    • 您将注意到我们添加了&#34; SpringBootServletInitializer&#34;先前。
    • 现在我们替换#34; SpringBootServletInitializer&#34;使用&#34; BroadleafBootServletContextInitializer&#34;。
  • 添加&#34; web.xml&#34;你会在页面底部找到。
  • 别忘了改变&#34; param-value&#34; &#34; context-param&#34;标记到正确的包裹位置。

第5步:Tomcat更改

另一个链接,其中包含大部分(如果不是全部)所需内容:

https://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/key-aspects-and-configuration/app-server-configuration/tomcat

<强> / bin中

  • New&#34; setenv.sh&#34;包含以下内容的文件:

    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

  • 主管经理经理应用

    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中,在每个Site和Admin项目(&#34; boot-community-site&#34;&#34; boot-community-admin&#34;)上,右键单击并选择运行方式&gt;&gt; Maven clean 。完成运行 Run As&gt;&gt; Maven安装

现在在每个项目&#34;目标&#34;在目录中,您应该看到一个WAR文件,(&#34; ROOT&#34;用于Site项目,&#34; admin&#34;用于Admin项目)。

第7步:启动Tomcat服务器

我启动了Tomcat服务器,其中包含常驻应用程序(文档,示例,主机管理器,管理器和ROOT)。然后我热点部署了BLC&#34; admin.war&#34;和&#34; ROOT.war&#34; (站点)到Tomcat / webapps目录。

如果这对您不起作用,您可以随时停止Tomcat服务器并将ROOT.war和admin.war文件放在/ webapps目录中。然后启动服务器。

如果一切顺利,请查看&#34; catalina.out&#34;启动时记录日志文件,您将看到ASCII&#34; Broadleaf Commerce&#34;消息滚动,每个BLC应用程序一次,然后是一堆MySQL Hibernate消息。对于#34; m5.large&#34;网站和管理员,整个启动时间似乎约为4分钟。 AWS EC2实例。

我想到了我错过的内容,但我现在已经在Tomcat 8.5容器上运行了BLC 5.2。

希望它与其他人一起使用,但我遇到同样的问题。

答案 1 :(得分:1)

极有帮助的指南。我想添加一些有关第5步的信息,尤其是有关负载均衡器环境中的弹簧安全性的信息。

由于SSL将在前端代理上发生,因此spring的安全性requireSecure()可能导致无限循环的重定向。

这在herehere深入解释

对此的一种解决方法是:

在前端代理上安装ssl证书后,请在.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" 
           />

请注意:前端代理应发送以上请求标头。在大多数情况下,默认情况下会发生这种情况。选中here