準備環(huán)境
- tomcat8.5.42
- openjdk11.0.3
- war包
- https證書
tomcat安裝
這里示范如何在Ubuntu18.04下安裝Tomcat8.5姨拥,其他操作系統(tǒng)也類似博其。
1.安裝jdk
OpenJDK是Ubuntu18.04上默認的java開發(fā)包和運行時庫,他是一個java平臺的開源實現(xiàn)。安裝OpenJDK很簡單
$ sudo apt install default-jdk
這樣安裝的是當前最新的OpenJDK版本氯庆。
2.創(chuàng)建Tomcat用戶
創(chuàng)建一個新的系統(tǒng)用戶tomcat
瓤漏,并且指定用戶家目錄/opt/tomcat
,用戶運行Tomcat service
$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
3.下載Tomcat
我們使用wget
與unzip
來下載和解壓Tomcat壓縮包校套。如果你的系統(tǒng)沒有安裝unzip
與wget
趴久,請先安裝這兩個包
$ sudo apt install unzip wget
下載Tomcat 8.5.42版本可以通過Tomcat下載頁面來下載最新的版本。
也可以通過wget方式來獲取搔确。先切到系統(tǒng)的/tmp
然后通過wget
進行下載
$ cd /tmp
$ wget http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.zip
一旦下載了tomcat完畢,就可以通過unzip進行解壓灭忠,解壓后膳算,將解壓后的目錄移植到/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)建一個軟連接latest
弛作,指向當前最新的tomcat安裝目錄
$ sudo ln -s /opt/tomcat/apache-tomcat-8.5.42 /opt/tomcat/latest
這樣子涕蜂,如果后續(xù)有更新tomcat版本,那么只要將軟連接指向最新的安裝目錄即可
tomcat用戶需要權限訪問來訪問/opt/tomcat
目錄映琳,所以我們需要改變目錄的歸屬用戶
$ sudo chown -R tomcat: /opt/tomcat
并且將tomcat目錄下的bin目錄中的可執(zhí)行腳本机隙,都加上+x
賦予執(zhí)行權限
$ sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'
4.創(chuàng)建系統(tǒng)服務
為了將Tomcat運行成一個服務,需要在/etc/systemd/system
目錄下面創(chuàng)建一個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)建了一個 新的服務有鹿,并且可以通過以下命令啟動服務
$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat
檢查tomcat服務狀態(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.
如果運行沒有錯誤的話,我們可以將tomcat服務加入到開機自啟
$ sudo systemctl enable tomcat
5.調(diào)整防火墻
如果你使用了防火墻進行保護谎脯,并且想要通過外部網(wǎng)絡訪問你的tomcat葱跋,那么需要打開你配置的端口,默認是8080源梭,這里以8080舉例娱俺,為了允許通過8080端口進行tcp交互,需要執(zhí)行如下命令:
$ sudo ufw allow 8080/tcp
如果有接入負載均衡等废麻,最好使用8080端口荠卷,將80端口留給負載均衡器使用,并且限制8080端口只能內(nèi)部使用烛愧。
6.測試安裝
測試你的安裝是否成功油宜,在瀏覽器中輸入http://<你的tomcat服務器ip>:8080
如果出現(xiàn)一只貓的管理頁面,就代表你的安裝成功了屑彻。
WAR包部署
我的工程使用了SpringBoot
验庙,并且通過idea進行開發(fā),所以我們這里講解一下如何通過配置社牲,借助idea進行生產(chǎn)war包粪薛。
1.配置Spring Boot
配置Spring Boot生成war包,首先我們需要在pom.xml
文件的<project>
根目錄下配置
<packaging>war</packaging>
如果沒有這個節(jié)點搏恤,則加上违寿,如果有存在湃交,可能配置是jar,則替換成war藤巢。
默認生成的war包名稱由{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包
為了構建我們有tomcat依賴的war程序温圆,我們執(zhí)行mvn clean package
,然后我們的war包就會在target目錄下生成spring-boot-tomcat-demo.war
文件(這里的spring-boot-tomcat-demo是上面pom的配置中孩革,暫定的artifactId屬性)岁歉。
或者在idea的左側或者右側的maven菜單中,找到Lifecycle->install菜單膝蜈,雙擊運行即可锅移,生成的目標文件與上面路徑一致,都在target目錄下饱搏。
3.部署在tomat
上面步驟我們已經(jīng)完成了war包的生成非剃,現(xiàn)在要將war包部署在tomcat中,部署其實很簡單:
- 將war包copy到tomcat容器的webapps目錄下
- 啟動tomcat
- 訪問http://localhsot:8080/spring-boot-tomcat-demo/<springboot中的訪問路徑>
這樣我們就將war包部署在tomcat中了窍帝。
HTTPS配置
在配置HTTPS之前努潘,我們首先需要準備兩個東西:
- 域名
- 證書
端口使用
首先將域名的A記錄指向我們的服務器地址,對于http請求默認端口是80坤学,https默認端口是443疯坤,那我們之前在tomcat中配置的http是8080端口,是否需要將8080端口改為80呢深浮,其實當然是可以的压怠,但是我們的tomcat部署在,ubuntu服務器上飞苇,并且我們腳本中是采用tomcat用戶啟動菌瘫,在linux下非root用戶不能打開1024以下的端口,如果強行將tomcat中的啟動端口改為80布卡,那么在tomcat啟動后雨让,本地通過命令行netstat -npl
查看應用程序占用端口時,我們發(fā)現(xiàn)tomcat并未綁定80端口忿等,所以栖忠,這種情況下,有兩種解決方案:
方案一
如果有接入負載均衡器,則將域名指向負載均衡器的ip地址庵寞,負載均衡器監(jiān)聽80端口狸相,并且將請求轉發(fā)到8080端口上,這樣就可以實現(xiàn)tomcat使用8080端口
方案二
如果沒有使用負載均衡器捐川,服務器上只有一個tomcat怎么辦脓鹃,那我們只能通過本地端口轉發(fā),在防火墻上將80端口直接轉發(fā)到8080端口上
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
這樣默認的http請求使用80端口古沥,就能轉發(fā)到tomcat中了瘸右。當然別忘記了,打開防火墻允許80端口進行tcp交互:
$ sudo ufw allow 80/tcp
證書配置
上面我們講了http怎么配置tomcat使用80端口岩齿,現(xiàn)在我們講一下我們的證書要怎么使用尊浓,怎么和tomcat結合起來用。
首先你要去CA機構申請一個證書纯衍,如果使用自簽名的證書,網(wǎng)站訪問會提示不安全苗胀,是否繼續(xù)訪問等信息襟诸,給用戶照成困擾,所以建議還是去購買一個,如何申請不在本文范圍內(nèi)基协,請參考文章末尾的鏈接歌亲。
那我手上拿到的是一個PFX格式的證書,我們暫且叫它server.pfx
澜驮,拿到這個證書的同時陷揪,我們還需要證書密碼,才能配置杂穷。步驟如下
1.放置證書
在tomcat7開始已經(jīng)支持PFX格式的證書悍缠,所以我們用的tomcat8可以支持,首先我們需要在tomcat的目錄下耐量,新建一個cert目錄飞蚓,這個cert目錄名字可以自定義,但是與第二點中配置tomcat中的keystoreFile
屬性值有關系廊蜒,下文具體講
在cert中放置我們的
server.pfx
證書文件趴拧。
2.配置tomcat
在tomcat中,我們需要配上證書和密碼才能正常使用山叮,在tomcat根目錄下/conf/server.xml文件著榴,我們在Service節(jié)點下配置我們的Connector節(jié)點,如下:
<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是我們第一點中建立的cert目錄口叙,如果是其他目錄炼绘,這里請自行修改;
keystorePass
這里就是存放的是證書的密碼妄田;
通過這樣配置后俺亮,我們重啟tomcat
$ sudo systemctl stop tomcat
$ sudo systemctl start tomcat
這樣重啟后,通過域名訪問疟呐,https://<域名>:8443/spring-boot-tomcat-demo/<springboot中的訪問路徑>脚曾,這樣就能夠通過https訪問網(wǎng)站了。
3.修改端口
第二點中說到的訪問方式启具,我們還是通過了8443端口進行訪問本讥,而https默認端口是443,所以我們需要像修改http訪問80端口一樣鲁冯,需要做一層本地端口轉發(fā)拷沸,將443端口轉發(fā)到8443,這樣在訪問時薯演,就不需要帶上8443端口了
$ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
最后別忘了打開防火墻433端口允許tcp交互
$ sudo ufw allow 443/tcp
4.配置總結
總體來說配置證書的過程還是比較簡單的撞芍,首先就是放置證書位置,然后在server.xml中配置跨扮,最后端口轉發(fā)序无,防火墻端口開放,就可以正常訪問了衡创。
其他
在上文我們的war包部署中帝嗡,我們是通過war包拷貝到webapps目錄下,在tomcat啟動時會自動解壓在一個與war包同名的文件夾下璃氢,在通過url請求時丈探,需要帶上這個目錄名稱作為路徑的一部分才能訪問,這給我們造成了一定的困擾拔莱,如果我們想要去掉這個路徑碗降,直接訪問該怎么辦呢?解決辦法肯定是有的塘秦,在server.xml
中讼渊,找到<Host>
節(jié)點,增加一個<Context>
配置
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="xxx.war" reloadable="true" debug="0" crossContext="true"/>
</Host>
其默認會將首頁映射到$CATALINA_HOME/webapps/ROOT尊剔, 從官網(wǎng)上下載內(nèi)容爪幻,默認為tomcat的管理控制臺。
- path:指定訪問該Web應用的URL入口
- docBase:指定Web應用的文件路徑,可以給定絕對路徑挨稿,也可以給定相對于<Host>的appBase屬性的相對路徑仇轻,如果Web應用采用開放目錄結構,則指定Web應用的根目錄奶甘,如果Web應用是個war文件篷店,則指定war文件的路徑。(指定項目所在地址)
- reloadable:如果這個屬性設為true臭家,tomcat服務器在運行狀態(tài)下會監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動疲陕,如果監(jiān)測到有class文件被更新的,服務器會自動重新加載Web應用
總結
本文講了從tomcat钉赁、openjdk的安裝開始蹄殃,一步一步到war包配置,怎么打成war包部署在tomcat中你踩,最后講了https的證書配置以及端口轉發(fā)诅岩,整體上來說參考本文,就可以做到簡單的整套部署與配置带膜,希望對大家有幫助按厘,有問題可以留言交流~~~
參考鏈接
How to install Tomcat 8.5 on Ubuntu 18.04
Deploy a Spring Boot WAR into a Tomcat Server
linux下開通443端口
linux下用iptables做本機端口轉發(fā)方法
一篇文章讓你搞懂 SSL 證書
Tomcat8下將webapps目錄與tomcat目錄分離