享學課堂特邀作者:老顧
轉載請聲明出處!
一、前言
小伙伴們在網上看到的很多文章,都是對tomcat的一些介紹,什么配置啊,怎么啟動。其實在生產環境中怎么部署,和網上介紹的有很大區別。這篇文章老顧就帶著大家分享一些如何在生產環境下部署。
二、tomcat組件
我們先回顧一下tomcat有哪些組件
我們小伙伴要抓住幾個點
對外接收請求是Connector連接器組件,可以支持不同協議,Connector組件中可設置端口,所以我們請求的時候需要輸入端口號。可以把Connector當作接待員。
Connector組件接收到請求后,轉發給處理**Engine(catalina引擎)**組件去處理。
根據請求的域名,分配到對應的Host主機。
在根據path分配context組件
區分項目有2個核心組件,一個是host,一個是context。根據域名和path分配不同的項目。其實還少了一個就是啟動參數的配置,也就是一同的項目啟動參數也可以不一樣,如端口號啊。
三、部署目錄
我們先看一下Tomcat目錄結構:
--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應用重新部署?
小伙伴們,應該怎么辦呢?
四、目錄規劃
tomcat軟鏈接
我們先把tomcat應用放到/usr/local目錄下
# cd /usr/local# lldrwxr-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# lldrwxr-xr-x. 9 root root 220 5月 8 19:23 apache-tomcat-8.5.40lrwxrwxrwx. 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存放日志文件。
到此目錄分離開了,但還缺少一個啟動腳本
五、啟動腳本
此啟動腳本,老顧引用了網上的一個腳本改造了一下,命名為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 instart)$CATALINA_HOME/bin/catalina.sh startecho start success!!;;stop)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!;;restart)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!sleep 2$CATALINA_HOME/bin/catalina.sh startecho 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 "%r" %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,**這個知識點,網上很多,小伙伴們可自行查看,因為我們已經單應用分離出來了,那樣的配置好處不大。
六、總結
上面老顧介紹了tomcat在生產環境的部署要點,其實還缺少一個環節,就是我們war包或jar包是按照什么流程以及方式上傳到生產環境的?這個留個懸念,下次老顧會介紹。
總結
上述知識點,囊括了目前互聯網企業的主流應用技術以及能讓你成為“香餑餑”的高級架構知識,每個筆記里面幾乎都帶有實戰內容。
很多人擔心學了容易忘,這里教你一個方法,那就是重復學習。
打個比方,假如你正在學習 spring 注解,突然發現了一個注解@Aspect,不知道干什么用的,你可能會去查看源碼或者通過博客學習,花了半小時終于弄懂了,下次又看到@Aspect 了,你有點郁悶了,上次好像在哪哪哪學習,你快速打開網頁花了五分鐘又學會了。
資料領取方式:戳這里免費領取
從半小時和五分鐘的對比中可以發現多學一次就離真正掌握知識又近了一步。
人的本性就是容易遺忘,只有不斷加深印象、重復學習才能真正掌握,所以很多書我都是推薦大家多看幾遍。哪有那么多天才,他只是比你多看了幾遍書。
學會了。
資料領取方式:戳這里免費領取
從半小時和五分鐘的對比中可以發現多學一次就離真正掌握知識又近了一步。
[外鏈圖片轉存中…(img-YV84jmMb-1623614617860)]
人的本性就是容易遺忘,只有不斷加深印象、重復學習才能真正掌握,所以很多書我都是推薦大家多看幾遍。哪有那么多天才,他只是比你多看了幾遍書。