Spring Boot應用 打包與部署指南
一、前言
- 本篇主要包含哪些內容?
- 通過Maven將Spring Boot應用打包成jar包
- 將打包的jar包傳輸的伺服器並配置啟動、停止指令碼
- 將Spring Boot應用配置為系統服務並配置開機啟動
- Spring Boot的打包與部署有何特點?
Java Web應用在Spring Boot之前,通常是打包成war(Web application ARchive)包,結合Tomcat來完成部署。
對於Spring Boot,Spring官方的建議是將Spring Boot應用打包成一個fat jar(Java ARchive),通過java命令來啟動執行。這個fat jar會把Tomcat內建進來,所以部署時也不需要單獨配置Tomcat。
- 本篇環境資訊
開發環境:
用途 |
工具&版本 |
---|---|
作業系統 |
Windows 10 |
開發工具 |
IntelliJ IDEA 2017 |
打包工具 |
Maven 3.X |
JDK |
1.8.x |
傳輸工具 |
FlashFxp |
生產環境:
用途 |
工具&版本 |
---|---|
作業系統 |
CentOS 7 |
JDK |
1.8.x |
傳輸工具 |
Vsftp |
二、打包
打包工具的話如前面提到的,我們使用的是Maven
首先需要在pom.xml檔案build節點增加如下配置:
<build> <finalName>springboot-course</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
另外,需要確認pom.xml檔案的package節點配置:
<packaging>jar</packaging>
本篇ken.io會介紹兩種打包方式,一個是Maven命令打包。一個是IDEA+Maven外掛打包。
1、 Maven命令打包
- 準備工作
配置Java、Maven環境變數
- cmd:進入專案目錄
本次專案目錄是:D:\Projects\GitHub\springboot-course\package-maven
d: & cd D:\Projects\GitHub\springboot-course\package-maven
- 清理package
#清理已存在的編譯結果 mvn clean #清理成功後輸出資訊示例 [INFO] ----------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] -----------------------------------------------------------
- 打包
#打包 mvn package #清理成功後輸出資訊示例 [INFO] ----------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] ----------------------------------------------------------- #清理成功後會在專案根目錄生成target資料夾 #檢視是否生成target資料夾 ls #檢視是否生了jar檔案 ls target #根據pom.xml檔案的配置,生成的jar檔名是:springboot-course.jar
2、IDEA + Maven外掛打包
通過View->Tool Windows->Maven projects 撥出Maven工具欄 或者通過IDEA右側工具欄撥出Maven工具欄
圖形化操作就很簡單了。兩個步驟:
- clean
- package
成功之後也會在IDEA 控制檯顯示以下輸出:
[INFO] -------------------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] -------------------------------------------------------------------- [INFO] Total time: 7.839 s [INFO] Finished at: 2017-12-09T13:36:40+08:00 [INFO] Final Memory: 21M/218M [INFO] --------------------------------------------------------------------
生成的jar包路徑:專案根目錄\target\springboot-course.jar
3、本地執行測試
- 通過java命令執行jar包
#進入jar包所在目錄 d: & cd D:\Projects\GitHub\springboot-course\package-maven\target #執行 java -jar springboot-course.jar #執行成功後會輸出如下資訊(部分資訊略去) [main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) [main] i.k.springboot.course.CourseApplication : Started CourseApplication in 5.569 seconds (JVM running for 6.363)
通過瀏覽器訪問:localhost:8080,驗證是否正常
- 埠號
在/src/main/resources下新建配置檔案application.yml
檔案內容:
server: port: 8081
配置完成之後,重新打包即可
三、部署
1、 準備工作
通過FTP將jar包上傳到CentOS的 /webroot/helloweb 目錄
- 建立日誌目錄:
#建立應用目錄&日誌目錄 sudo mkdir /webroot/helloweb sudo mkdir /webroot/helloweb/logs #修改資料夾許可權 sudo chmod 777 /webroot/helloweb sudo chmod 777 /webroot/helloweb/logs
- 開放埠
#新增可訪問埠 sudo firewall-cmd --add-port=8081/tcp --permanent #重新載入防火牆策略 sudo firewall-cmd --reload
2、啟動&停止指令碼
- 建立啟動指令碼
#建立啟動指令碼start.sh sudo vi /webroot/helloweb/start.sh
指令碼內容:
#!/bin/sh #指定JDK目錄&AppName export JAVA_HOME=/usr/java/jdk1.8.0_151 APP_NAME=springboot-course.jar echo $JAVA_HOME echo $APP_NAME #nohup命令後臺啟動jar包並寫入日誌 nohup java -jar $APP_NAME >>logs/start.log 2>>logs/startError.log & #sleep等待15秒後,判斷包含AppName的執行緒是否存在 sleep 15 if test $(pgrep -f $APP_NAME|wc -l) -eq 0 then echo "Start Failed" else echo "Start Successed" fi
- 建立停止指令碼
#建立停止指令碼檔案 sudo vi /webroot/helloweb/stop.sh
指令碼內容:
#!/bin/sh #指定AppName APP_NAME=springboot-course.jar #找到包含AppName的程序 PROCESS=`ps -ef|grep $APP_NAME|grep -v grep |awk '{ print $2}'` #迴圈停用程序直到成功 while : do kill -9 $PROCESS > /dev/null 2>&1 if [ $? -ne 0 ];then break else continue fi done echo 'Stop Successed'
- 啟動/停止站點
#啟動 sh /webroot/helloweb/start.sh #停止 sh /webroot/helloweb/stop.sh
3、部署訪問測試
訪問 http://<ip address>:8081
驗證是否正常即可
四、開啟啟動&Nginx反向代理配置
1、CentOS 7 開機自動Spring Boot應用
- 將站點停止指令碼標記為可執行檔案
chmod +x /webroot/helloweb/stop.sh
- 建立helloweb服務
#建立服務檔案 sudo vi /usr/lib/systemd/system/helloweb.service #檔案內容 [Unit] Description=helloweb After=network.target [Service] WorkingDirectory=/webroot/helloweb ExecStart=/usr/java/jdk1.8.0_151/java -jar /webroot/helloweb/springboot-course.jar ExecStop=/webroot/helloweb/stop.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
- 設定服務開機啟動&開啟服務
#設定服務開機啟動 sudo systemctl enable helloweb #啟動服務 sudo systemctl start helloweb
2、Nginx反向代理配置
- 建立helloweb站點配置
#新建配置檔案 sudo vi /etc/nginx/conf.d/helloweb.conf #反向代理配置內容 server { listen 80; #監聽80埠 server_name helloweb.mydomain.com; #繫結的域名 location / { #轉發或處理 proxy_pass http://localhost:8081; } error_page 500 502 503 504 /50x.html;#錯誤頁 location = /50x.html { root /usr/share/nginx/html; } }
- 過載Nginx配置
sudo nginx -s reload
- 開放防火牆埠
#新增可訪問埠 sudo firewall-cmd --add-port=80/tcp --permanent #重新載入防火牆策略 sudo firewall-cmd --reload
訪問測試: 通過設定本地hosts將helloweb.mydomain.com指向伺服器IP
然後通過瀏覽器訪問: helloweb.mydomain.com
即可
五、備註
- 本篇原始碼