SpringBoot + Angular前後端分離專案部署(更新)實錄

LYX6666發表於2022-02-22

零、前言

第一次給系統上線,雖然團隊內已經有其他同學寫過部署文件https://segmentfault.com/a/11...,但本文中我們需要補充一些細節,使操作更簡便

本文主要是補充內容,所以假設伺服器上已經部署了執行環境、資料庫和nginx。

一、連線伺服器

我們通常使用SSH連線Linux伺服器,使用scp命令在本地和伺服器之間傳輸檔案。
那麼有沒有更方便的方法呢?答案是有的。
可以藉助SFTP工具,來實現圖形化傳輸檔案,就像在自己電腦操作上一樣。

Windows -> WinSCP

官網地址: https://winscp.net/eng/index.php
這個工具可以與伺服器建立SSH連線,並且圖形化瀏覽伺服器上的檔案,並支援拖拽。

image.png

MacOS -> Termius

官網地址: https://www.termius.com/
與WinSCP功能相同,既能管理檔案,也能執行Bash命令。
並且Termius支援MacOS、Linux、Windows、Android,網上能找到和諧版本。

image.png

有了這種視覺化SFTP工具後,拷貝檔案就不需要再用命令列了。

二、編譯專案

Angular:

// 編譯Angular專案
ng build

然後就可以生成dist資料夾,angular程式碼全部編譯成了原生JavaScript程式碼。
稍後需要用到dist中的所有檔案

SpringBoot:

// 編譯SpringBoot專案
mvn clean package

我們只需要用到target中的appName.jar這個檔案。

需要注意的是,編譯過程會把包括配置檔案在內的所有檔案封裝,這意味著編譯後就不能隨意更改埠號、資料庫等各種配置資訊,因此在編譯前,需要把各個引數調整至與生產環境一致。

三、複製檔案

開啟SFTP工具,找到原來的程式碼位置。
為了穩妥起見,不要直接刪除上個版本的程式碼,而是將它們重新命名(萬一出錯了還能恢復)。
然後直接把資料夾拽過去即可。

四、關閉歷史專案的程式,啟動新程式

Angular

由於前端使用的HTML三件套、伺服器是Apache或Nginx負責,當伺服器上的程式碼檔案變更時,一重新整理就能載入新的程式碼,所以不需要重啟服務。

SpringBoot

但Java專案一旦執行,是不能自動檢測變更的,所以必須重啟這個Java程式。

// 檢視埠占用情況
sockstat -4l | grep 後端的埠號

// 舉例
sockstat -4l | grep 8093

// 返回值(本例中,2279為程式號)
// log    java       2279  26 tcp46  *:8080                *:*

//  關閉程式
sudo kill 程式號

// 舉例
sudo kill 2279

再次檢查埠占用,已經沒有程式佔用此埠了。

此時才可以在專案根目錄輸入

// 在伺服器後臺執行jar包,不會隨著終端退出而停止執行
nohup java -jar test.jar

執行成功後,控制檯不會輸出任何資訊。
但在jar包的同級目錄會有一個nohup.out檔案,之前在終端上看到的那些日誌資訊改為寫入到這個檔案中,只需要檢視此檔案就能知道專案是否啟動成功了。

相關文章