一、機器准備
首先准備三台機器:
我是一台WINDOWS系統主機,在WINDOWS里的 VMware 中安裝兩台Ubuntu系統虛擬機
如果你的虛擬機只有 CentOS,可以參考這篇文章:https://www.cnblogs.com/qwg-/p/13237210.html
VMware 中如何克隆虛擬機
右鍵點擊你的原虛擬機,選擇管理 ----> 克隆
我創建的是完整克隆,根據自身情況選擇存放路徑
以下是分布式部署項目的機器結構
(三台主機需要連接同一個WLAN)
主機名 | 負責部署 | IP地址 |
---|---|---|
ytt132 | 前后端 | 192.168.193.129 |
ytt132_02 | 訪問 | 192.168.193.130 |
WINDOWS | 數據庫 | 192.168.0.107 |
如何查詢機器IP地址
-
查詢當前 Ubuntu 虛擬機(ytt132)的IP地址
(1) 打開終端
(2) 輸入
ifconfig
-
查詢WINDOWS主機的IP地址
(1) WIN鍵 + R打開“運行”
(2) 輸入
cmd
打開 “命令提示符”(3) 輸入
ipconfig
查詢,WLAN下的IPv4地址即本機的IP地址,我的是192.168.0.107
二、項目准備
WINDOWS :
准備一個 VUE+SPINGBOOT 項目,在IDEA中打開,並且能夠成功運行
本人使用的項目是一個基於Vue框架的前端(項目名CRUDDemo)和一個基於SpringBoot框架的后端(項目名CRUDServer02)
運行要求
前端:安裝好npm、Vue
后端:安裝好Maven
三、前端部署
前端准備
先安裝 nginx 代理服務器
nginx 簡介:https://www.runoob.com/w3cnote/nginx-setup-intro.html
安裝方法一(建議使用)
1. 在終端中輸入命令:
sudo apt-get install nginx
2. 輸入 nginx -v
查看是否安裝成功,出現版本號即安裝成功
3. 啟動 nginx 服務:
sudo service nginx start
補充兩個 nginx 操作:
sudo service nginx stop # 停止nginx服務
sudo service nginx restart # 重啟nginx服務
4. 在瀏覽器地址欄輸入本機IP地址,若出現以下歡迎界面即安裝成功
其他安裝方法
其他安裝方法參考:https://blog.csdn.net/qq_23832313/article/details/83578836
前端打包
1. 修改URL(根據個人項目情況操作)
先檢查項目文件中有沒有使用 http://localhost:xxxx/ 這種URL進行 POST 和 GET 方法的語句(可以使用 CTRL + F 搜索 'localhost' 來查找),我是寫在了vue文件中的
因為 localhost 指的是本地IP地址,與 127.0.0.1 一樣,所以使用外部主機訪問該URL時是無法進行遠程訪問的
因此,我們要把所有 localhost 修改為你用來部署前后端的主機IP,例如我使用的是 ytt132端 部署的前后端,剛剛已經查詢過為192.168.193.129
復制該IP后,將其粘貼並替換vue中所有帶 localhost 的URL地址
2. 開始打包
修改完成后,打開終端 Terminal ,輸入 npm run build
(注意項目路徑)
項目資源管理窗口中出現 dist 文件夾即打包完成
在文件資源管理器中打開 dist 文件夾所在位置,對其進行壓縮
注:若你傳輸文件的常用方式為共享文件夾,則不用壓縮和解壓,可以直接上傳文件夾
3. 上傳文件
將 dist.zip 壓縮文件發送到將要部署前后端的虛擬機(ytt132)中
(可以用 SSH 連接主機和虛擬機或者 空投 等方式傳文件)
本人喜歡用空投嘻嘻:AirPortal 空投快傳
上傳成功!
找一個地方存放打包好的前端文件夾,我是在 /usr/local 下新建文件夾 project 專門存放前后端打包文件
新建文件夾命令
sudo mkdir /usr/local/project
4. 解壓文件
將dist.zip壓縮文件解壓到/usr/local/project目錄下
解壓zip文件命令:
sudo unzip -d /usr/local/project ~/下載/dist.zip
前端配置
配置文件具體位置如圖:
使用apt工具安裝 nginx 的配置文件在 /etc/nginx/nginx.conf
但在 nginx.conf 文件里有一條這樣的語句,它引用了 /etc/nginx/sites-enabled 下所有文件中的內容
進入 /etc/nginx/sites-enabled 目錄,可以看到目錄下只有一個 default 文件
所以我們需要對該 default 文件進行前端配置
1. 修改配置文件
sudo gedit default
在server中添加如下語句:
root /usr/local/project/dist; # 前端打包文件夾所在位置 # 注意要分號
保存 default 文件即前端配置完成!
2. 重啟nginx服務
sudo service nginx restart
前端部署成功
四、數據庫部署
WINDOWS:
運行 navicat premium
1. 打開 localhost_3306 連接
右鍵選擇新建數據庫,數據庫命名要與后端項目src/main/resources/application.properties中url里的數據庫名對應
例如我的是 cruddemo_db
2. 雙擊打開數據庫
3. 運行數據庫文件
接下來是運行你的數據庫文件,如果是 sql文件 的話直接右鍵運行 sql文件
以下是還原 nb3備份文件 的步驟:
右鍵備份,選擇還原備份從...
點擊 “還原” ,完成后直接關閉
數據表導入完成
4. 修改用戶權限
在數據庫開啟的狀態下,點擊上方菜單欄中的用戶
雙擊 ‘ root@localhost ’ 進入root用戶設置界面,將主機名從localhost修改為%(表示所有用戶可連接)
至此,數據庫配置完成
五、后端部署
后端打包
(確保maven插件已安裝,並且項目能夠成功運行)
在 src/main/resources 目錄下找到 application.properties ,這是編寫連接數據庫代碼的文件,找到項目對應的數據庫名字,我這里是 cruddemo_db
該文件中有幾個要注意的參數
-
server.port:后端運行的端口號
-
spring.datasource.url:連接MYSQL數據庫
-
username:MYSQL用戶名
-
password:MYSQL密碼
(可以使用自行設置的端口號,但要保證虛擬機在運行后端時沒有相同端口號的進程在運行)
在后面的配置文件中也會使用到這個端口號
這里url地址要將 localhost 修改為你要進行部署數據庫的主機IP地址,即 WINDOWS端 的IP地址
1. 修改后端url的IP地址
並檢查 username 和 password 是否和你的 MYSQL 連接的用戶名和密碼相同
檢查無誤后開始打包
2. 開始打包
點開右側邊欄中的 Maven,按照以下目錄選擇 clean、compile、package,然后點擊上方的綠色三角運行打包
打包成功界面
打包出來的文件在項目的 target 目錄下,是一個jar包
3. 上傳文件
將這個jar包上傳到部署前后端的虛擬機上(ytt132)
后端配置
再次進入 /etc/nginx/sites-enabled 目錄,對default文件進行后端配置
sudo gedit default
在 location 中添加如下語句:
proxy_pass http://192.168.193.129:8081; # 192.168.193.129為當前主機IP,8081為后端部署的端口
注:若后面后端運行失敗,連虛擬機本地都不能訪問WEB的話,嘗試在default文件中注釋原來的location,並在后面添加以下代碼:
location ^~ /prod-api/ {
proxy_pass http://192.168.193.129:8081/; # 192.168.193.129為當前主機IP,8081為后端部署的端口
}
(只是修改了location方法頭)
保存 default 文件即后端配置完成
后端運行
1. 運行jar包
在jar包所在目錄下運行以下命令
java -jar crud-demo-0.0.1-SNAPSHOT.jar
2. 重啟 nginx 服務
sudo service nginx restart
3. 訪問服務
在瀏覽器中輸入本機IP訪問
后端數據成功顯示,前后端部署完成
注:
在后端運行過程中可以輸入 CTRL+Z 終止運行
但這樣並未真正終止進程,再次運行可能會出現以下報錯:
終端里輸入 sudo netstat -anutp | grep 8081
查看占用了8081端口的進程PID:3963
殺死該進程PID號
kill -9 3963
重新運行jar包成功
六、外部訪問
最后,要在外部主機訪問WEB服務,本人是在 ytt132_02端 進行訪問的
打開另一個虛擬機的瀏覽器,輸入 ytt132 (部署前后端)的IP地址:http://192.168.193.129/
成功訪問!
防火牆問題
可以使用 ping 對方主機IP地址
來測試兩台主機能否連接
若兩台機器之間無法ping通,檢查一下ping的那台機器是否開啟了防火牆,很有可能是防火牆阻擋了外部訪問你的IP
WINDOWS打開或關閉 Microsoft Defender 防火牆:https://support.microsoft.com/zh-cn/windows/打開或關閉-microsoft-defender-防火牆-ec0844f7-aebd-0583-67fe-601ecf5d774f
Ubuntu防火牆常用命令:
sudo ufw status # 查看防火牆活動狀態
sudo ufw allow 3306 # 開放防火牆3306端口,也可以把8081端口也開放
sudo ufw enable # 開啟防火牆
sudo ufw reload # 重啟防火牆
sudo ufw disable # 關閉防火牆