你知道怎麼在生產環境下部署tomcat嗎?

享學課堂特邀做者:老顧
html

1、前言

小夥伴們在網上看到的不少文章,都是對tomcat的一些介紹,什麼配置啊,怎麼啓動。其實在生產環境中怎麼部署,和網上介紹的有很大區別。這篇文章老顧就帶着你們分享一些如何在生產環境下部署。java

2、tomcat組件

咱們先回顧一下tomcat有哪些組件web


咱們小夥伴要抓住幾個點apache

  1. 對外接收請求是Connector鏈接器組件,能夠支持不一樣協議,Connector組件中可設置端口,因此咱們請求的時候須要輸入端口號。能夠把Connector看成接待員。tomcat

  2. Connector組件接收到請求後,轉發給處理Engine(catalina引擎)組件去處理。bash

  3. 根據請求的域名,分配到對應的Host主機。服務器

  4. 在根據path分配context組件app

區分項目有2個核心組件,一個是host,一個是context。根據域名和path分配不一樣的項目。其實還少了一個就是啓動參數的配置,也就是一同的項目啓動參數也能夠不同,如端口號啊。webapp

3、部署目錄

咱們先看一下Tomcat目錄結構:jvm

--bin //存放着tomcat啓動和關閉腳本

--conf //存放着tomcat服務器的各類配置文件

--lib //tomcat服務器和全部web應用所屬的jar文件

--logs //存放着Tomcat的日誌文件

--temp //存放着Tomcat的運行時產生的臨時文件

--webapps //把web應用放到此目錄便可

--work //Tomcat將jsp生成的servlet源文件和字節碼文件放到此目錄
複製代碼

咱們要部署一個web應用,只要把應用的war包放到webapps就能夠了。網上通常也是這麼講的。小夥伴們以爲有什麼問題嗎

咱們看一下,若是咱們要部署兩個web應用Web-A和Web-B,把他放到webapps中。咱們到bin目錄下運行startup.sh啓動,這樣web-A和web-B就能夠訪問了。

若是如今業務上須要把web-B先暫停,那咱們改怎麼辦?還有就是tomcat啓動是會有啓動參數設置,如最大線程數,最小線程數等配置。那web-A和web-B怎麼配置不同的啓動參數呢?

其實還有一個問題,若是咱們要把tomcat版本升級,怎麼辦?把tomcat直接覆蓋?那些web應用從新部署?

小夥伴們,應該怎麼辦呢?

4、目錄規劃

tomcat軟連接

咱們先把tomcat應用放到/usr/local目錄下

# cd /usr/local

# ll

drwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40
複製代碼

上面咱們是應用了tomcat8.5版本,若是咱們須要升級到9.x版本的話,若是咱們須要升級到9.x版本的話,那關於tomcat目錄的路徑就須要從新修改,這就太不方便了,因此咱們能夠用軟連接的方式解決這個問題

# ln -s apache-tomcat-8.5.40 tomcat

# ll

drwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40

lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40
複製代碼

這樣之後用tomcat應用路徑,就直接使用tomcat這個軟連接,即便未來tomcat升級只要修改一些軟連接就好了,其餘就不須要改。

目錄分離

咱們應該要把tomcat和web應用目錄分離出來,即便tomcat升級也跟web應用沒有關係。那分離出來,怎麼啓動呢?

咱們要利用啓動參數中的CATALINA_HOME和CATALINA_BASE,來指定tomcat程序應用和web應用;經過CATALINA_BASE就能夠實現web應用分離出去,咱們來看一些tomcat一共有哪些啓動參數

啓動參數 描述說明
JAVA_OPT jvm啓動參數,設置內存 編碼等-Xms100m -Xmx200m -Dfile.encoding=UTF-8
JAVA_HOME 指定jdk目錄
CATALINA_HOME tomcat程序根目錄
CATALINA_BASE 應用部署目錄,默認爲 $CATALINA_HOME
CATALINA_OUT 應用日誌輸出目錄,默認爲$CATALINA_BASE/logs
CATALINA_TMPDIR 應用臨時目錄,默認爲$CATALINA_BASE/temp

咱們先在/usr/local目錄下新建一個web-apps目錄,此目錄就放web應用

# mkdir web-apps
# ll
lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40
drwxr-xr-x.  2 root root    6 5月   8 20:29 web-apps
複製代碼

在web-apps目錄下,新建web-a和web-b目錄,這兩個目錄就是web-A和web-b的web應用目錄。

# cd web-apps/
# mkdir web-a
# mkdir web-b
# ll
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-a
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-b
複製代碼

把tomcat程序中的conf目錄拷貝到web-a和web-b裏面,這樣各個web應用都有各自的配置文件。

# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-a/ 
# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-b/ 
複製代碼

再在web-a和web-b目錄下,新建webapps和logs目錄,webapps存放web應用,logs存放日誌文件。

到此目錄分離開了,但還缺乏一個啓動腳本

5、啓動腳本

此啓動腳本,老顧引用了網上的一個腳本改造了一下,命名爲tomcat.sh

#!/bin/bash
export JAVA_OPTS="-Xms100m -Xmx200m"
export JAVA_HOME="/usr/java/jdk1.8.0_181"
export CATALINA_HOME="/usr/local/tomcat"
export CATALINA_BASE="`pwd`"

case $1 in
    start)
        $CATALINA_HOME/bin/catalina.sh start
        echo start success!!
        ;;
    stop)
        $CATALINA_HOME/bin/catalina.sh stop
        echo stop success!!
        ;;
    restart)
        $CATALINA_HOME/bin/catalina.sh stop
        echo stop success!!
        sleep 2
        $CATALINA_HOME/bin/catalina.sh start
        echo start success!!
        ;;
    version)
        $CATALINA_HOME/bin/catalina.sh version
        ;;
    configtest)
        $CATALINA_HOME/bin/catalina.sh configtest
        ;;
esac
exit 0
複製代碼

腳本比較簡單,核心就是啓動參數,只要注意CATALINA_BASE="pwd"的意思是,執行腳本的路徑,也就是表明web應用路徑是腳本執行的路徑;再把tomcat.sh設置一些啓動權限 # chmod +x tomcat.sh

修改conf下的server.xml

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

   <Context path="/" docBase="" reloadable="true" />

 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
複製代碼

修改了紅色字體部分,host中的appBase是相對CATALINA_BASE的路徑,就是web應用的路徑,context中的path是請求url,docBase也是相對路徑,相對於appBase的,固然也能夠設置絕對路徑。在web-a下建立index.html文件

到如今爲止的web-a的目錄下

# ll
drwx------. 3 root root 254 5月   8 22:05 conf
drwxr-xr-x. 2 root root 197 5月   8 21:27 logs
-rwxr-xr-x. 1 root root 598 5月   8 21:21 tomcat.sh
drwxr-xr-x. 2 root root  24 5月   8 21:25 webapps
# ll webapps/
-rw-r--r--. 1 root root 12 5月   8 21:25 index.html
複製代碼

啓動tomcat.sh

# ./tomcat.sh start
複製代碼

訪問 http://192.168.31.150:8080/ 就ok了,直接返回了index.html裏面的內容。

須要說明的是,在web-a執行tomcat.sh,裏面的啓動參數CATALINA_BASE是web應用路徑,那tomcat.sh腳本中的$CATALINA_HOME/bin/catalina.sh 這個腳本執行所採用的conf配置文件是web-a目錄下的,跟tomcat程序的conf沒有任務關係,也跟web-b目錄下的conf也沒有任何關係,這樣就達到了應用之間的配置分離。

補充一下,在配置context和host時,不少公司不會在server.xml配置,而是經過conf/Catalina目錄下,新建host和context,這個知識點,網上不少,小夥伴們可自行查看,由於咱們已經單應用分離出來了,那樣的配置好處不大。

6、總結

上面老顧介紹了tomcat在生產環境的部署要點,其實還缺乏一個環節,就是咱們war包或jar包是按照什麼流程以及方式上傳到生產環境的?這個留個懸念,下次老顧會介紹。

咱們通常在學習中,一些介紹的資料都是淺層次的,雖然可以運行起來,但在真實使用過程當中須要考慮別的因素(維護的方便性,隔離性等),因此在咱們學習到的基礎上面會有很大的不同。但願小夥伴經過本身學習的,必定要結合公司或者前輩們分享的生產實戰經驗,去理解真正的使用。謝謝你們!!!

相關文章
相關標籤/搜索