多个SpringBoot项目部署在Tomcat服务器上


引言

有一段时间没有更新简书了,今天遇到些后端运维的问题,记录一下。

需求如下:

需要在已经部署了一个项目的linux 服务器上部署我自己的项目,互不干扰。

有两种解决方案:

① 一个容器 多个端口发布多个项目
② 多个容器 分别发布

linux下同一个tomcat用不同端口发布多个项目

一、修改tomcat的conf目录下的server.xml

配置service 节点,有几个项目就相应的配置几个service 节点;

注意修改Service name; Connector port; Engine name; Host appBase这四项内容

<?xml version='1.0' encoding='utf-8'?>  
  
<Server port="8005" shutdown="SHUTDOWN">  
  <!-- Security listener. Documentation at /docs/config/listeners.html  
  <Listener className="org.apache.catalina.security.SecurityListener" />  
  -->  
  <!--APR library loader. Documentation at /docs/apr.html -->  
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->  
  <Listener className="org.apache.catalina.core.JasperListener" />  
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->  
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />  
  
  <GlobalNamingResources>  
    <Resource name="UserDatabase" auth="Container"  
              type="org.apache.catalina.UserDatabase"  
              description="User database that can be updated and saved"  
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
              pathname="conf/tomcat-users.xml" />  
  </GlobalNamingResources>  
  
  <Service name="Catalina1">  
     <Connector port="8080" protocol="HTTP/1.1"  
               connectionTimeout="20000"  
               redirectPort="8443" />  
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
     <Engine name="Catalina1" defaultHost="localhost">  
      <Realm className="org.apache.catalina.realm.LockOutRealm">  
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
               resourceName="UserDatabase"/>  
      </Realm>  
      <Host name="localhost"  appBase="webapps1"  
            unpackWARs="true" autoDeploy="true">  
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt"  
               pattern="%h %l %u %t "%r" %s %b" />  
        <Context path="/route" reloadable="true" docBase="/home/develop/tomcat-7.0.54/flatrass"/>  
      </Host>     
     </Engine>  
  </Service>  
    
  <Service name="Catalina2">  
    <!--把port改成8081-->  
    <Connector port="8081" protocol="HTTP/1.1"  
               connectionTimeout="20000"  
               redirectPort="9543" />                                                                                                 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
    <Engine name="Catalina2" defaultHost="localhost">  
      <Realm className="org.apache.catalina.realm.LockOutRealm">  
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
               resourceName="UserDatabase"/>  
      </Realm>  
      <Host name="localhost"  appBase="webapps2"   ---这里要修改为修改后的webapps名称  
            unpackWARs="true" autoDeploy="true">  
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt"  
               pattern="%h %l %u %t "%r" %s %b" />  
        <Context  path="/route" reloadable="true" docBase="/home/develop/tomcat-7.0.54/flatrasweats"/>  
      </Host>  
    </Engine>  
  </Service>  
</Server>  

上面的配置文件需要直接复制server.xml中的Service节点。从本文复制可能会出现Tomact启动不了的坑!!

二、先依照此配置文件配置,完成后在tomcat根目录下复制文件夹webapps,粘贴重命名为webapps1,webapps2,如下图:此文件夹就是分别用来部署项目的。

三、在tomcat根目录下的conf文件中,复制conf文件夹下的Catalina文件夹,粘贴并重命名为Catalina1,Catalina2,如图:

配置完成,现在可以把项目分别部署到配置好的两个文件夹webapps1和webapps2中;

启动tomcat,分别用不同的端口号8080和8081测试;

http://127.0.0.1:8080/项目名
http://127.0.0.1:8081/项目名


linux 上多个 tomcat 分别部署项目

一、下载 tomcat 解压成多个 文件夹供使用,比如这里将 tomcat 下载到 /opt 下,进行解压改名

tar -zxvf apache-tomcat-7.0.75.tar.gz  
mv apache-tomcat-7.0.75 tomcat-8070  

重复以上解压改名步骤,新增多个 tomcat,大致如下:

[root@vastio138 opt]# ls  
apache-tomcat-7.0.75.tar.gz  tomcat-8080  
tomcat-8090                  tomcat-8070  

二、分别修改各个 tomcat 目录下的 config/server.xml 文件

server.xml 中修改如下三个端口:(vim 可以使用 / 进行查找修改)

保证修改的端口号不重复!

另,如果防火墙开启的话(service iptables status 查看),还需要修改 防火墙配置(centos 6.8),增加 tomcat 的端口号到配置文件中:

使用(yy 拷贝已有的端口号一行,然后 p 粘贴,最后 i 修改端口号)

[root@vastio138 /]# vim /etc/sysconfig/iptables  
# Firewall configuration written by system-config-firewall  
# Manual customization of this file is not recommended.  
*filter  
:INPUT ACCEPT [0:0]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [0:0]  
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  
-A INPUT -p icmp -j ACCEPT  
-A INPUT -i lo -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8070 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT  
-A INPUT -j REJECT --reject-with icmp-host-prohibited  
-A FORWARD -j REJECT --reject-with icmp-host-prohibited  
COMMIT  
~  

保存退出后重启防火墙service iptables restart

或者 直接关闭防火墙 : service iptables stop

当然上面所说防火墙的IP白名单的问题其实也不太容易出现,一般情况都会选择Nginx作负载均衡,无需开启这么多端口。

附录Spring Boot项目打包成war包,并发布在tomact容器的示例。

步骤:

  • 配置文件(本地部署)
  • 启动类(war包部署)
  • war包部署pom.xml添加
  • maven命令生成war包(跳过测试)
  • war部署到tomcat

配置文件(本地部署)

这里呢,是我们springboot的配置文件需要做的一些配置,即使似乎跟打包没有半毛钱关系,但是还是在这里强调一下,大多数情况下,maven是默认进行项目测试的,请确保在打包成war前,数据库配置正确,以免入坑。

user = name
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/mj

spring.datasource.username = root

spring.datasource.password = 123456

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql = true

启动类(war包部署)

接下来呢,要想springboot项目知道我们的意图,我们要引导我们的项目,告诉他我们要打包成war包,在此我们需要继承SpringBootServletInitializer类重写他的configure方法。告诉他我们要怎样启动它,生成war包需要的相关文件

package com.job;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
@ServletComponentScan
public class JobManagementApplication extends SpringBootServletInitializer{

     @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(JobManagementApplication.class);
        }
    public static void main(String[] args) {
        SpringApplication.run(JobManagementApplication.class, args);
    }
}

war包部署pom.xml添加

接下来,我们要为maven的pom.xml添加相关的依赖配置:
首先要把<packaging>jar</packaging>改为以下

<packaging>war</packaging>

必要的话可以选择打包的名字

    <build>
        <finalName>demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

其次还有添加以下依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

maven命令生成war包(跳过测试)

mvn clean package  -Dmaven.test.skip=true

war部署到tomcat

部署到tomcat的webapps文件目录下(确保webapps目录下没有其他同名文件夹)

tips:云服务器上部署时确保连接数据库配置正确,否则项目跑不起来。

总结

介绍到这里,应该是整个部署流程都已走完。

衷心希望大家能少走一些弯路。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容