多個(gè)SpringBoot項(xiàng)目部署在Tomcat服務(wù)器上


引言

有一段時(shí)間沒有更新簡書了衅胀,今天遇到些后端運(yùn)維的問題滚躯,記錄一下掸掏。

需求如下:

需要在已經(jīng)部署了一個(gè)項(xiàng)目的linux 服務(wù)器上部署我自己的項(xiàng)目丧凤,互不干擾步脓。

有兩種解決方案:

① 一個(gè)容器 多個(gè)端口發(fā)布多個(gè)項(xiàng)目
② 多個(gè)容器 分別發(fā)布

linux下同一個(gè)tomcat用不同端口發(fā)布多個(gè)項(xiàng)目

一靴患、修改tomcat的conf目錄下的server.xml

配置service 節(jié)點(diǎn),有幾個(gè)項(xiàng)目就相應(yīng)的配置幾個(gè)service 節(jié)點(diǎn)农渊;

注意修改Service name; Connector port; Engine name; Host appBase這四項(xiàng)內(nèi)容

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

上面的配置文件需要直接復(fù)制server.xml中的Service節(jié)點(diǎn)囱挑。從本文復(fù)制可能會(huì)出現(xiàn)Tomact啟動(dòng)不了的坑!徽鼎!

二否淤、先依照此配置文件配置棠隐,完成后在tomcat根目錄下復(fù)制文件夾webapps助泽,粘貼重命名為webapps1嚎京,webapps2鞍帝,如下圖:此文件夾就是分別用來部署項(xiàng)目的帕涌。

三蚓曼、在tomcat根目錄下的conf文件中钦扭,復(fù)制conf文件夾下的Catalina文件夾客情,粘貼并重命名為Catalina1,Catalina2瑞凑,如圖:

配置完成籽御,現(xiàn)在可以把項(xiàng)目分別部署到配置好的兩個(gè)文件夾webapps1和webapps2中惰匙;

啟動(dòng)tomcat项鬼,分別用不同的端口號8080和8081測試;

http://127.0.0.1:8080/項(xiàng)目名
http://127.0.0.1:8081/項(xiàng)目名


linux 上多個(gè) tomcat 分別部署項(xiàng)目

一鸠真、下載 tomcat 解壓成多個(gè) 文件夾供使用吠卷,比如這里將 tomcat 下載到 /opt 下沦零,進(jìn)行解壓改名

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

重復(fù)以上解壓改名步驟,新增多個(gè) tomcat疾渴,大致如下:

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

二、分別修改各個(gè) tomcat 目錄下的 config/server.xml 文件

server.xml 中修改如下三個(gè)端口:(vim 可以使用 / 進(jìn)行查找修改)

保證修改的端口號不重復(fù)!

另搔谴,如果防火墻開啟的話(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

或者 直接關(guān)閉防火墻 : service iptables stop

當(dāng)然上面所說防火墻的IP白名單的問題其實(shí)也不太容易出現(xiàn),一般情況都會(huì)選擇Nginx作負(fù)載均衡灭将,無需開啟這么多端口。

附錄Spring Boot項(xiàng)目打包成war包空镜,并發(fā)布在tomact容器的示例吴攒。

步驟:

  • 配置文件(本地部署)
  • 啟動(dòng)類(war包部署)
  • war包部署pom.xml添加
  • maven命令生成war包(跳過測試)
  • war部署到tomcat

配置文件(本地部署)

這里呢砂蔽,是我們springboot的配置文件需要做的一些配置,即使似乎跟打包沒有半毛錢關(guān)系镣隶,但是還是在這里強(qiáng)調(diào)一下安岂,大多數(shù)情況下稻爬,maven是默認(rèn)進(jìn)行項(xiàng)目測試的,請確保在打包成war前琉雳,數(shù)據(jù)庫配置正確,以免入坑翠肘。

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

啟動(dòng)類(war包部署)

接下來呢束倍,要想springboot項(xiàng)目知道我們的意圖,我們要引導(dǎo)我們的項(xiàng)目甥桂,告訴他我們要打包成war包黄选,在此我們需要繼承SpringBootServletInitializer類重寫他的configure方法婶肩。告訴他我們要怎樣啟動(dòng)它,生成war包需要的相關(guān)文件

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添加相關(guān)的依賴配置:
首先要把<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:云服務(wù)器上部署時(shí)確保連接數(shù)據(jù)庫配置正確制圈,否則項(xiàng)目跑不起來辱揭。

總結(jié)

介紹到這里问窃,應(yīng)該是整個(gè)部署流程都已走完。

衷心希望大家能少走一些彎路嵌戈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熟呛,一起剝皮案震驚了整個(gè)濱河市尉姨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌九府,老刑警劉巖侄旬,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儡羔,死亡現(xiàn)場離奇詭異,居然都是意外死亡仇冯,警方通過查閱死者的電腦和手機(jī)族操,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門坪创,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莱预,“玉大人项滑,你說我怎么就攤上這事枪狂。” “怎么了辜限?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵薄嫡,是天一觀的道長颗胡。 經(jīng)常有香客問我,道長哑蔫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任嵌纲,我火速辦了婚禮疹瘦,結(jié)果婚禮上言沐,老公的妹妹穿的比我還像新娘酣栈。我一直安慰自己,他們只是感情好起便,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布榆综。 她就那樣靜靜地躺著铸史,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琳轿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機(jī)與錄音琉闪,去河邊找鬼。 笑死颠毙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咱扣。 我是一名探鬼主播涵防,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偏瓤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赔退,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤硕旗,失蹤者是張志新(化名)和其女友劉穎女责,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抵知,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡残制,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年掖疮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡规揪,死狀恐怖温峭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奸忽,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蹄梢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏而咆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一悠瞬、第九天 我趴在偏房一處隱蔽的房頂上張望涯捻。 院中可真熱鬧,春花似錦狂打、人聲如沸趴乡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惦辛。三九已至仓手,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗽冒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工剿另, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雨女,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓氛堕,卻偏偏與公主長得像野蝇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子乱灵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容