最近有個畢設項目,想部署到與服務器上,但是屢屢不能訪問,多次嘗試后最終部署成功,現記錄下部署經歷,供各位參考。
環境
- springboot 2.3.3.RELEASE
- gradle-5.6.1
- tomcat 9
- mysql
所遇問題
部署后無法訪問
在部署中看tomcat的啟動頁面(我先開始是在Windows上部署的)如果沒有出現spring的界面,那么部署就算沒有報錯,tomcat的wabapp下也能看到war解析出來的項目文件夾,但這是訪問不了項目的。
究其原因,是因為springboot打成war包需要讓工程屏蔽內置tomcat並且繼承SpringBootServletInitializer重寫SpringApplicationBuilder方法。下面來實現這兩點。
1、gradle屏蔽內置tomcat
在build.gradle中配置如下代碼
compile("org.springframework.boot:spring-boot-starter-websocket") {
exclude module: "spring-boot-starter-tomcat"
}
因為此處的我gradle版本不高,如果高版本可能需要改一下。
2、繼承SpringBootServletInitializer
此處需要在啟動類下面做修改,讓啟動類繼承SpringBootServletInitializer並且實現其中的SpringApplicationBuilder接口
public class 啟動類名 extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(啟動類名Application.class);
}
}
訪問地址錯誤
修改完以后部署到tomcat,這時不能像平時那樣直接輸入http://localhost:8080/ 訪問,這樣還是會無法訪問,應該在8080后面加上項目名稱,就是你的war包名字比如我的是travel.war 那么我的訪問地址就是http://localhost:8080/travel/login
這樣顯然不行,因為這樣項目里面的其他路徑不可能都去修改,所以我們需要做一個地址映射,讓它像在平時在springboot里面啟動那樣不用輸入項目名稱直接訪問。
修改server.xml
如圖所示修改host標簽下的屬性,context要自己加上去,其中path路徑為空,沒有空格。
然后重啟tomcat,這樣就不用每次都要輸入項目名稱了。
部署到linux上無法顯示圖片
在Windows的tomcat上可以部署以后,我上傳到了linux部署,這里需要注意,一定要修改里面的那些地址,全部修改成linux目錄。
在linux上面能訪問項目,但是我發現上傳圖片的時候能上傳上去(linux目錄下有上傳的圖片)但是無法在網頁中展示。
這里我首先看了上傳圖片的權限,果然
-rw-r----- 1 root root 6739
於是我給圖片授權644,為了不用每張上傳來的圖片都去授權,所以我們可以作如下配置
將UMASK改為0022,重啟tomcat即可。
但是依然無法讀取,顯然不僅僅是權限的問題,后面我上網搜索了一下發現,是我當時只配置了項目的映射路徑,沒有給圖片配置映射路徑,所以在server.xml中加入圖片映射即可。
注意:在linux上也要注意改下項目的路徑。
最后完美解決!