一般的 Spring Boot 項(xiàng)目打包完是 .jar
文件遏弱,已內(nèi)嵌了 Tomcat 服務(wù)器,但是當(dāng)我們部署到生產(chǎn)環(huán)境的時(shí)候一般用的是 .war
包利花,這次我們使用寶塔面板來完成項(xiàng)目的環(huán)境搭建和部署。
此教程所使用的環(huán)境:
- Windows 10 Version 1903
- JDK 8
- Maven 3.6
- Spring Boot 2.2
- CentOS 7.7
- 寶塔面板 7.0
- Tomcat 9
- Nginx 1.17
首先,我們需要構(gòu)建 .war
包艰亮,需要對項(xiàng)目構(gòu)建進(jìn)行一些設(shè)置,以 Maven 為例挣郭,修改 pom.xml
迄埃。
修改打包方式為 war
,注意最后一行:
<groupId>cn.shadowcat</groupId>
<artifactId>baotatest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 打包成 WAR -->
<packaging>war</packaging>
加入這一項(xiàng)依賴設(shè)置:
<!-- 修改內(nèi)置 Tomcat 包屬性 scope 為 provided -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
在包的根目錄新建一個(gè) ServletInitializer
類(比如在我的項(xiàng)目里兑障,與 BaotatestApplication
類同級)侄非,內(nèi)容類似如下:
package cn.shadowcat.baotatest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BaotatestApplication {
public static void main(String[] args) {
SpringApplication.run(BaotatestApplication.class, args);
}
}
然后再回到項(xiàng)目根目錄(有 pom.xml
的目錄),進(jìn)行編譯:
mvn clean package
如果要跳過測試流译,就輸入:
mvn clean package -Dmaven.test.skip=true
編譯完成之后就能在 target/
目錄下找到我們的 .war
包逞怨,比如我是 baotatest-0.0.1-SNAPSHOT.war
。
接下來配置服務(wù)器環(huán)境福澡,首先寶塔面板的安裝不再贅述叠赦,到其“軟件商店”安裝好:
- Tomcat(必須,要求和本地環(huán)境一致革砸,比如我用的是 Spring Boot 2.2除秀,那么就使用 Tomcat 9)
- Nginx(非必須糯累,可以不用安裝,配置反向代理所需)
安裝完 Tomcat 后記得放行 8080
端口(Tomcat 默認(rèn)端口)册踩。再把我們的 .war
包放進(jìn) /www/server/tomcat/webapps
目錄就會(huì)自動(dòng)解壓部署泳姐,在同級目錄生成同名文件夾(如果沒有自動(dòng)部署就重啟一下 Tomcat,另外部署不成功的話可以去 /www/server/tomcat/logs
看看日志文件)暂吉。此時(shí)再訪問 http://example.com:8080/baotatest-0.0.1-SNAPSHOT/
就可以訪問我們的應(yīng)用了胖秒。
后面長長的一串似乎并不好看,我們可以將其去掉慕的,有兩種方法阎肝。
一種是直接將包名改成 ROOT.war
,即可业稼。
另一種需要修改配置文件 /www/server/tomcat/conf/server.xml
盗痒,在 <host>...</host>
標(biāo)簽內(nèi)插入:
<Context path="" docBase="/www/server/tomcat/webapps/baotatest-0.0.1-SNAPSHOT" debug="0" reloadable="true" />
或者這樣:
<Context path="" docBase="/www/server/tomcat/webapps/baotatest-0.0.1-SNAPSHOT"
debug="0" privileged="true" />
path
屬性可以定義訪問的路徑,比如掛載到 /hello
上低散,這里我們留空就是根域名俯邓。
然后再將 Tomcat 配置重載,我們就能在根目錄下訪問到這個(gè)項(xiàng)目了熔号。
還有就是給上傳目錄配置靜態(tài)資源映射稽鞭,比如我這里的 有一個(gè)上傳目錄 /www/uploads
,用戶上傳的圖片都會(huì)保存到這個(gè) uploads
文件夾來引镊,那如何在服務(wù)器訪問這個(gè)目錄呢朦蕴?一樣,加入:
<Context path="/uploads" docBase="/www/uploads" debug="0" reloadable="true" />
習(xí)慣上還需要配置一下 Nginx 反向代理 Tomcat弟头。
去寶塔的“網(wǎng)站”頁面里新建一個(gè)站點(diǎn)吩抓,除了域名保持默認(rèn)就行了。
然后在其“設(shè)置”中配置“反向代理”赴恨,目標(biāo)域名就是 Tomcat 的地址疹娶,比如 http://dev.shadowcat.cn:8080
,發(fā)送地址用 $host
就可以了伦连,其他保持默認(rèn)即可雨饺,最后訪問一下 Nginx 即可成功返回結(jié)果。