使用 docker 部署前后端分離項目(基於 dockerfile)


前言

對於 SpringBoot + Vue 前后端分離項目,一般是先啟動后端,再啟動前端,通過訪問前端地址進行預覽。

比如,后端的端口號是 8081前端的端口號是 8080。既然前后端是不同的端口號,怎么通過訪問前端進而與后端通信呢?

這里就涉及到 Vue 配置請求轉發,具體可以參考文章:Vue 配置請求轉發

通過在前端配置請求轉發,所有訪問 8080 端口的請求,統統都會轉發到 8081 上去,進而實現與后端通信。

部署前后端分離項目實操

1. 本地數據庫遷移到服務器上

首先要確保服務器上有可供使用的 mysql 數據庫,因為我們編寫代碼一般使用的本地 mysql,但部署到服務器上后,可不能再使用本地 mysql 了。

在服務器上(如騰訊雲服務器)安裝 mysql ,建議使用 docker 進行安裝。

將項目用到的數據庫導入到服務器上的數據庫中,並修改后端項目 application.properties 文件,使其連接服務器上的數據庫。

2. 打包前端項目

使用 webstorm 打開前端項目,打開終端,運行命令:

npm run build

該命令執行成功之后,前端項目目錄下會生成一個 dist 文件夾,將該文件夾中的兩個文件 static 和 index.html 拷貝到 SpringBoot 項目中resources/static/ 目錄下。

3. 打包后端項目

具體操作見下圖:

1、2、3 是單擊,為了關閉 test,4 是雙擊,為了打包成 jar 包。

運行成功后,后端項目的 target 目錄下,會有一個 jar 包,這就是整個項目的 jar 包,之后就發布這個 jar 包就可以了。

4. 將 jar 包拷貝到服務器上,並編寫 dockerfile

推薦使用 xshell 連接自己的騰訊雲服務器,進入到某個目錄中,將 jar 包用鼠標拖拽進來,可以達到上傳 jar 包到服務器的效果。也可以使用 xftp 進行上傳。

使用命令 vim Dockerfile 編寫 dockerfile ,dockerfile 內容如下:

FROM centos:7.6.1810

LABEL "author"="愛吃西瓜的番茄醬"
LABEL "version"="1.0"
LABEL "email"="you170917@gmail.com"

ADD blogserver-0.0.1-SNAPSHOT.jar blogserver.jar

ADD jdk1.8.0_261 jdk8
ENV PATH jdk8/bin:$PATH

# 配置環境變量支持中文
ENV LANG="en_US.UTF-8"

EXPOSE 8081

ENTRYPOINT ["java","-jar","blogserver.jar"]

注意,Dockerfile 中暴露的端口號,就是后端的端口號 8081

關於 dockerfile 的編寫,可以參考文章:Dockerfile 編寫規范整理

5. 通過 Dockerfile 部署運行 jar 包

主要分為三步:

1、編寫 Dockerfile

2、構建鏡像

3、運行容器

這里,就使用上面那個 Dockerfile 。

先構建鏡像:

docker build -t blogserver:2.0 .
  • docker build 是構建鏡像的初始命令

  • -t blogserver:2.0 :指定鏡像的名字和版本號,可任意取

  • 最后的 . 表示 Dockerfile 在當前目錄下

運行容器

docker run --name=blog -p 8080:8081 --restart=always -d blogserver:2.0
  • docker run:是運行容器的初始命令

  • --name=blog:表示容器的名字叫做 blog

  • -p 8080:8081:表示將服務器 8080 端口,映射到容器內的 8081 端口(這個就是 dockerfile 中暴露的端口號)

  • --restart=always:表示讓容器一直運行

  • -d:表示容器后台運行

  • blogserver:2.0 這是運行容器的基礎鏡像和版本號

6. 效果

瀏覽器訪問:http://xxx.xxx.xxx.xxx:8080/index.html,效果如下:

成功部署好了。

每天學習一點點,每天進步一點點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM