Tomcat在Ubuntu18.04下安裝部署與HTTPS配置

準(zhǔn)備環(huán)境

  • tomcat8.5.42
  • openjdk11.0.3
  • war包
  • https證書

tomcat安裝

這里示范如何在Ubuntu18.04下安裝Tomcat8.5,其他操作系統(tǒng)也類似。

1.安裝jdk
OpenJDK是Ubuntu18.04上默認(rèn)的java開發(fā)包和運(yùn)行時(shí)庫(kù),他是一個(gè)java平臺(tái)的開源實(shí)現(xiàn)。安裝OpenJDK很簡(jiǎn)單

$ sudo apt install default-jdk

這樣安裝的是當(dāng)前最新的OpenJDK版本。

2.創(chuàng)建Tomcat用戶
創(chuàng)建一個(gè)新的系統(tǒng)用戶tomcat,并且指定用戶家目錄/opt/tomcat,用戶運(yùn)行Tomcat service

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

3.下載Tomcat
我們使用wgetunzip來下載和解壓Tomcat壓縮包。如果你的系統(tǒng)沒有安裝unzipwget,請(qǐng)先安裝這兩個(gè)包

$ sudo apt install unzip wget

下載Tomcat 8.5.42版本可以通過Tomcat下載頁(yè)面來下載最新的版本。
也可以通過wget方式來獲取。先切到系統(tǒng)的/tmp然后通過wget進(jìn)行下載

$ cd /tmp
$ wget http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.zip

一旦下載了tomcat完畢,就可以通過unzip進(jìn)行解壓,解壓后,將解壓后的目錄移植到/opt/tomcat目錄下

$ unzip apache-tomcat-8.5.42.zip
$ sudo mkdir /opt/tomcat
$ sudo mv apache-tomcat-8.5.42 /opt/tomcat/

為了后續(xù)更好的更新tomcat,我們這里創(chuàng)建一個(gè)軟連接latest,指向當(dāng)前最新的tomcat安裝目錄

$ sudo ln -s /opt/tomcat/apache-tomcat-8.5.42 /opt/tomcat/latest

這樣子,如果后續(xù)有更新tomcat版本,那么只要將軟連接指向最新的安裝目錄即可
tomcat用戶需要權(quán)限訪問來訪問/opt/tomcat目錄,所以我們需要改變目錄的歸屬用戶

$ sudo chown -R tomcat: /opt/tomcat

并且將tomcat目錄下的bin目錄中的可執(zhí)行腳本,都加上+x賦予執(zhí)行權(quán)限

$ sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'

4.創(chuàng)建系統(tǒng)服務(wù)
為了將Tomcat運(yùn)行成一個(gè)服務(wù),需要在/etc/systemd/system目錄下面創(chuàng)建一個(gè)tomcat.service文件,并且加入一下內(nèi)容

[Unit]
Description=Tomcat 8.5 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/default-java"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

通知systemd我們創(chuàng)建了一個(gè) 新的服務(wù),并且可以通過以下命令啟動(dòng)服務(wù)

$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat

檢查tomcat服務(wù)狀態(tài)可以用下面命令

$ sudo systemctl status tomcat
● tomcat.service - Tomcat 8.5 servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-07-10 21:32:33 CST; 12h ago
  Process: 4980 ExecStop=/opt/tomcat/latest/bin/shutdown.sh (code=exited, status=0/SUCCESS)
  Process: 5026 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 5036 (java)
    Tasks: 57 (limit: 1130)
   CGroup: /system.slice/tomcat.service
           └─5036 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dja

Jul 10 21:32:33 iZapkefd3rcnlhZ systemd[1]: Starting Tomcat 8.5 servlet container...
Jul 10 21:32:33 iZapkefd3rcnlhZ startup.sh[5026]: Existing PID file found during start.
Jul 10 21:32:33 iZapkefd3rcnlhZ startup.sh[5026]: Removing/clearing stale PID file.
Jul 10 21:32:33 iZapkefd3rcnlhZ startup.sh[5026]: Tomcat started.
Jul 10 21:32:33 iZapkefd3rcnlhZ systemd[1]: Started Tomcat 8.5 servlet container.

如果運(yùn)行沒有錯(cuò)誤的話,我們可以將tomcat服務(wù)加入到開機(jī)自啟

$ sudo systemctl enable tomcat

5.調(diào)整防火墻
如果你使用了防火墻進(jìn)行保護(hù),并且想要通過外部網(wǎng)絡(luò)訪問你的tomcat,那么需要打開你配置的端口,默認(rèn)是8080,這里以8080舉例,為了允許通過8080端口進(jìn)行tcp交互,需要執(zhí)行如下命令:

$ sudo ufw allow 8080/tcp

如果有接入負(fù)載均衡等,最好使用8080端口,將80端口留給負(fù)載均衡器使用,并且限制8080端口只能內(nèi)部使用。

6.測(cè)試安裝
測(cè)試你的安裝是否成功,在瀏覽器中輸入http://<你的tomcat服務(wù)器ip>:8080
如果出現(xiàn)一只貓的管理頁(yè)面,就代表你的安裝成功了。

WAR包部署

我的工程使用了SpringBoot,并且通過idea進(jìn)行開發(fā),所以我們這里講解一下如何通過配置,借助idea進(jìn)行生產(chǎn)war包。

1.配置Spring Boot
配置Spring Boot生成war包,首先我們需要在pom.xml文件的<project>根目錄下配置

<packaging>war</packaging>

如果沒有這個(gè)節(jié)點(diǎn),則加上,如果有存在,可能配置是jar,則替換成war。
默認(rèn)生成的war包名稱由{artifactId}-{version}.war組成,我們需要自己配置生成的war包名稱

<build>
    <finalName>${artifactId}</finalName>
</build>

這樣我們生成的war包名稱,就和屬性一致了,這里我們暫定叫spring-boot-tomcat-demo
最重要的,我們需要配置tomcat的依賴

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

最后,還需要配置一下@SpringBootApplication注解的類,繼承SpringBootServletInitializer類即可

@SpringBootApplication
public class SpringBootTomcatApplication extends SpringBootServletInitializer {
}

2.生成war包
為了構(gòu)建我們有tomcat依賴的war程序,我們執(zhí)行mvn clean package,然后我們的war包就會(huì)在target目錄下生成spring-boot-tomcat-demo.war文件(這里的spring-boot-tomcat-demo是上面pom的配置中,暫定的artifactId屬性)。
或者在idea的左側(cè)或者右側(cè)的maven菜單中,找到Lifecycle->install菜單,雙擊運(yùn)行即可,生成的目標(biāo)文件與上面路徑一致,都在target目錄下。

3.部署在tomat
上面步驟我們已經(jīng)完成了war包的生成,現(xiàn)在要將war包部署在tomcat中,部署其實(shí)很簡(jiǎn)單:

這樣我們就將war包部署在tomcat中了。

HTTPS配置

在配置HTTPS之前,我們首先需要準(zhǔn)備兩個(gè)東西:

  • 域名
  • 證書

端口使用

首先將域名的A記錄指向我們的服務(wù)器地址,對(duì)于http請(qǐng)求默認(rèn)端口是80,https默認(rèn)端口是443,那我們之前在tomcat中配置的http是8080端口,是否需要將8080端口改為80呢,其實(shí)當(dāng)然是可以的,但是我們的tomcat部署在,ubuntu服務(wù)器上,并且我們腳本中是采用tomcat用戶啟動(dòng),在linux下非root用戶不能打開1024以下的端口,如果強(qiáng)行將tomcat中的啟動(dòng)端口改為80,那么在tomcat啟動(dòng)后,本地通過命令行netstat -npl查看應(yīng)用程序占用端口時(shí),我們發(fā)現(xiàn)tomcat并未綁定80端口,所以,這種情況下,有兩種解決方案:
方案一
如果有接入負(fù)載均衡器,則將域名指向負(fù)載均衡器的ip地址,負(fù)載均衡器監(jiān)聽80端口,并且將請(qǐng)求轉(zhuǎn)發(fā)到8080端口上,這樣就可以實(shí)現(xiàn)tomcat使用8080端口
方案二
如果沒有使用負(fù)載均衡器,服務(wù)器上只有一個(gè)tomcat怎么辦,那我們只能通過本地端口轉(zhuǎn)發(fā),在防火墻上將80端口直接轉(zhuǎn)發(fā)到8080端口上

$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

這樣默認(rèn)的http請(qǐng)求使用80端口,就能轉(zhuǎn)發(fā)到tomcat中了。當(dāng)然別忘記了,打開防火墻允許80端口進(jìn)行tcp交互:

$ sudo ufw allow 80/tcp

證書配置

上面我們講了http怎么配置tomcat使用80端口,現(xiàn)在我們講一下我們的證書要怎么使用,怎么和tomcat結(jié)合起來用。
首先你要去CA機(jī)構(gòu)申請(qǐng)一個(gè)證書,如果使用自簽名的證書,網(wǎng)站訪問會(huì)提示不安全,是否繼續(xù)訪問等信息,給用戶照成困擾,所以建議還是去購(gòu)買一個(gè),如何申請(qǐng)不在本文范圍內(nèi),請(qǐng)參考文章末尾的鏈接。
那我手上拿到的是一個(gè)PFX格式的證書,我們暫且叫它server.pfx,拿到這個(gè)證書的同時(shí),我們還需要證書密碼,才能配置。步驟如下
1.放置證書
在tomcat7開始已經(jīng)支持PFX格式的證書,所以我們用的tomcat8可以支持,首先我們需要在tomcat的目錄下,新建一個(gè)cert目錄,這個(gè)cert目錄名字可以自定義,但是與第二點(diǎn)中配置tomcat中的keystoreFile屬性值有關(guān)系,下文具體講

存放證書目錄

在cert中放置我們的server.pfx證書文件。

2.配置tomcat
在tomcat中,我們需要配上證書和密碼才能正常使用,在tomcat根目錄下/conf/server.xml文件,我們?cè)赟ervice節(jié)點(diǎn)下配置我們的Connector節(jié)點(diǎn),如下:

<Service name="Catalina">
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="cert/server.pfx" keystoreType="PKCS12" keystorePass="xxxx" useBodyEncodingForURI="true" URIEncoding="UTF-8" />    
</Service>

port指的是我們監(jiān)聽的端口;
SSLEnabled開啟ssl;
scheme值為https,表示支持的是https;
sslProtocol支持的https協(xié)議;
keystoreFile這里存放的就是我們的證書文件路徑,在cert目錄下server.pfx文件,這里cert是我們第一點(diǎn)中建立的cert目錄,如果是其他目錄,這里請(qǐng)自行修改;
keystorePass這里就是存放的是證書的密碼;

通過這樣配置后,我們重啟tomcat

$ sudo systemctl stop tomcat
$ sudo systemctl start tomcat

這樣重啟后,通過域名訪問,https://<域名>:8443/spring-boot-tomcat-demo/<springboot中的訪問路徑>,這樣就能夠通過https訪問網(wǎng)站了。

3.修改端口
第二點(diǎn)中說到的訪問方式,我們還是通過了8443端口進(jìn)行訪問,而https默認(rèn)端口是443,所以我們需要像修改http訪問80端口一樣,需要做一層本地端口轉(zhuǎn)發(fā),將443端口轉(zhuǎn)發(fā)到8443,這樣在訪問時(shí),就不需要帶上8443端口了

$ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

最后別忘了打開防火墻433端口允許tcp交互

$ sudo ufw allow 443/tcp

4.配置總結(jié)
總體來說配置證書的過程還是比較簡(jiǎn)單的,首先就是放置證書位置,然后在server.xml中配置,最后端口轉(zhuǎn)發(fā),防火墻端口開放,就可以正常訪問了。

其他

在上文我們的war包部署中,我們是通過war包拷貝到webapps目錄下,在tomcat啟動(dòng)時(shí)會(huì)自動(dòng)解壓在一個(gè)與war包同名的文件夾下,在通過url請(qǐng)求時(shí),需要帶上這個(gè)目錄名稱作為路徑的一部分才能訪問,這給我們?cè)斐闪艘欢ǖ睦_,如果我們想要去掉這個(gè)路徑,直接訪問該怎么辦呢?解決辦法肯定是有的,在server.xml中,找到<Host>節(jié)點(diǎn),增加一個(gè)<Context>配置

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="xxx.war" reloadable="true" debug="0" crossContext="true"/>
</Host>

其默認(rèn)會(huì)將首頁(yè)映射到$CATALINA_HOME/webapps/ROOT, 從官網(wǎng)上下載內(nèi)容,默認(rèn)為tomcat的管理控制臺(tái)。

  • path:指定訪問該Web應(yīng)用的URL入口
  • docBase:指定Web應(yīng)用的文件路徑,可以給定絕對(duì)路徑,也可以給定相對(duì)于<Host>的appBase屬性的相對(duì)路徑,如果Web應(yīng)用采用開放目錄結(jié)構(gòu),則指定Web應(yīng)用的根目錄,如果Web應(yīng)用是個(gè)war文件,則指定war文件的路徑。(指定項(xiàng)目所在地址)
  • reloadable:如果這個(gè)屬性設(shè)為true,tomcat服務(wù)器在運(yùn)行狀態(tài)下會(huì)監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動(dòng),如果監(jiān)測(cè)到有class文件被更新的,服務(wù)器會(huì)自動(dòng)重新加載Web應(yīng)用

總結(jié)

本文講了從tomcat、openjdk的安裝開始,一步一步到war包配置,怎么打成war包部署在tomcat中,最后講了https的證書配置以及端口轉(zhuǎn)發(fā),整體上來說參考本文,就可以做到簡(jiǎn)單的整套部署與配置,希望對(duì)大家有幫助,有問題可以留言交流~~~

參考鏈接

How to install Tomcat 8.5 on Ubuntu 18.04
Deploy a Spring Boot WAR into a Tomcat Server
linux下開通443端口
linux下用iptables做本機(jī)端口轉(zhuǎn)發(fā)方法
一篇文章讓你搞懂 SSL 證書
Tomcat8下將webapps目錄與tomcat目錄分離

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,675評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

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