享學課堂特邀做者:老顧
html
小夥伴們在網上看到的不少文章,都是對tomcat的一些介紹,什麼配置啊,怎麼啓動。其實在生產環境中怎麼部署,和網上介紹的有很大區別。這篇文章老顧就帶着你們分享一些如何在生產環境下部署。java
咱們先回顧一下tomcat有哪些組件web
咱們小夥伴要抓住幾個點apache
對外接收請求是Connector鏈接器組件,能夠支持不一樣協議,Connector組件中可設置端口,因此咱們請求的時候須要輸入端口號。能夠把Connector看成接待員。tomcat
Connector組件接收到請求後,轉發給處理Engine(catalina引擎)組件去處理。bash
根據請求的域名,分配到對應的Host主機。服務器
在根據path分配context組件app
區分項目有2個核心組件,一個是host,一個是context。根據域名和path分配不一樣的項目。其實還少了一個就是啓動參數的配置,也就是一同的項目啓動參數也能夠不同,如端口號啊。webapp
咱們先看一下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應用從新部署?
小夥伴們,應該怎麼辦呢?
咱們先把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存放日誌文件。
到此目錄分離開了,但還缺乏一個啓動腳本
此啓動腳本,老顧引用了網上的一個腳本改造了一下,命名爲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 "%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包是按照什麼流程以及方式上傳到生產環境的?這個留個懸念,下次老顧會介紹。
咱們通常在學習中,一些介紹的資料都是淺層次的,雖然可以運行起來,但在真實使用過程當中須要考慮別的因素(維護的方便性,隔離性等),因此在咱們學習到的基礎上面會有很大的不同。但願小夥伴經過本身學習的,必定要結合公司或者前輩們分享的生產實戰經驗,去理解真正的使用。謝謝你們!!!