(Docker Nginx) Spring boot+Vue 前后端分離部署 詳細完整版

簡述:Spring boot+Vue 前后端分離項目部署,主要采用docker容器部署方式。

Springboot項目部署:docker構(gòu)建mysql環(huán)境+docker構(gòu)建項目自身環(huán)境遥皂。

Vue項目:使用docker啟動nginx服務(wù)器方式代理部署指攒。

1.SpringBoot項目部署

項目使用mysql8.0作為數(shù)據(jù)源,所以部署時需要使用docker構(gòu)建mysql環(huán)境及項目自身環(huán)境。

1.1.mysql容器

1.1.1.拉取鏡像

docker pull mysql:8.0.22 #pull成功之后通過 docker images查看

1.1.2.運行容器

docker container run --name mysql8.0.22 -p 3306:3306 -v /$mysql8.0.22/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22

連接出現(xiàn)1251錯誤時:

#1.進入容器
docker exec -it mysql8.0.22 /bin/bash
#2.連接mysql服務(wù)器進行配置修改
use mysql;
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;

1.2.項目容器

首先將項目進行打包:mumu-0.0.1-SNAPSHOT.jar

1.2.1.Dockerfile文件

FROM openjdk:11.0-jre
VOLUME /tmp
COPY mumu-0.0.1-SNAPSHOT.jar mumu.jar
RUN bash -c "touch /mumu.jar"
EXPOSE 8081
ENTRYPOINT ["java","-jar","mumu.jar","--spring.datasource.url=jdbc:mysql://192.168.18.170:3308/nms8000?createDatabaseIfNotExist=true&autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"]

解釋:
FROM openjdk:11.0-jre:項目jdk運行環(huán)境芹枷,Dockerfile可以通過FROM指令直接獲取它的狀態(tài)衅疙,也就是在容器中java是已經(jīng)安裝的,接下來通過自定義的命令來運行Spring Boot應(yīng)用鸳慈。
VOLUME:指向了一個/tmp的目錄饱溢,由于Spring Boot使用內(nèi)置的Tomcat容器,Tomcat默認使用/tmp作為工作目錄走芋。效果就是在主機的/var/lib/docker目錄下創(chuàng)建了一個臨時文件绩郎,并連接到容器的/tmp。
將項目的jar文件作為app.jar添加到容器
RUN:表示在新創(chuàng)建的鏡像中執(zhí)行一些命令翁逞,然后把執(zhí)行的結(jié)果提交到當前鏡像肋杖。這里使用touch命令來改變文件的修改時間,Docker創(chuàng)建的所有容器文件默認狀態(tài)都是“未修改”挖函。這對于簡單應(yīng)用來說不需要状植,不過對于一些靜態(tài)內(nèi)容(比如:index.html)的文件就需要一個“修改時間”。
EXPOSE:容器向外暴露的端口怨喘,用于容器生成時和主機某端口進行映射 必要
ENTRYPOINT:容器應(yīng)用啟動命令 參數(shù)設(shè)定 
# 注意: ENTRYPOINT 配置相關(guān)ip地址時津畸,localhost或者127.0.0.1會被指向當前容器,例如:如果你需要連接本機中的mysql服務(wù)器哲思,你必須把ip換成本機ip而不是localhost

1.2.2.生成鏡像

$ docker image build -t mumu .
# 或者
$ docker image build -t mumu:0.0.1 .
解釋:
-t參數(shù)用來指定 image 文件的名字洼畅,后面還可以用冒號指定標簽。如果不指定棚赔,默認的標簽就是latest帝簇。最后的那個點表示 Dockerfile 文件所在的路徑
image創(chuàng)建成功可以通過 docker image ls / docker images 來查看新生成的docker image信息

1.2.3.運行容器

docker container  run --name mumu -p 8081:8081 \
-v /opt/jar/springBootDocker/logs:/home/nms/sunam/docker-volumes/mumu \
-it -d mumu:0.0.1 /bin/bash

解釋
 run: 容器啟動命令
--name 自定義容器命名
-d 程序后臺啟動
-v /opt/jar/boot-docker/logs:/log 應(yīng)用日志 數(shù)據(jù)卷的方式存儲,將容器中的/log文件夾掛載到本機中的/opt/jar/boot-docker/logs
-p 8081:8081 用主機(前面)端口映射容器中(后面)的端口
-it參數(shù):容器的 Shell 映射到當前的 Shell靠益,然后你在本機窗口輸入的命令丧肴,就會傳入容器
mumu:0.0.1 image名稱 (如果有標簽提供標簽,默認是 latest 標簽)
/bin/bash  容器啟動以后胧后,內(nèi)部第一個執(zhí)行的命令芋浮。這里是啟動 Bash,保證用戶可以使用 Shell

到此壳快,springboot項目采用docker方式運行部署結(jié)束纸巷。

2.Vue項目部署

2.1.項目打包

npm run build

DONE Build complete. The dist directory is ready to be deployed.
執(zhí)行完成之后會在項目目錄下生成文件夾dist,之后我們將該文件夾進行nginx代理部署即可

其他開發(fā)中使用到的命令(本人后端開發(fā)眶痰,對vue使用不是很了解瘤旨,順帶記錄下):
1.vue ui #啟動在線項目可視化管理
2.npm run serve #啟動vue項目
3.vue add element #項目添加element插件依賴
4.vue add axios #項目添加axios插件依賴

2.2.nginx部署

使用docker容器方式運行nginx服務(wù)器。

2.2.1.代理概念

  • 正向代理

    代理client端竖伯,隱藏了client進行隱藏:由于一些原因客戶端不能直接訪問目標服務(wù)器存哲,于是客戶端將請求發(fā)送給中間代理服務(wù)器因宇,由中間代理服務(wù)器向目標服務(wù)器發(fā)起請求,并將請求到的數(shù)據(jù)返回給客戶端祟偷。在這個過程中察滑,目標服務(wù)器并不知道客戶端姓甚名誰,因為它收到的只是中間代理服務(wù)器的請求修肠。此時贺辰,客戶端和中間代理服務(wù)器是一個整體,客戶端對目標服務(wù)器是隱藏的氛赐。

  • 反向代理

    代理server端魂爪,對server端進行隱藏:比如一個基本的微服務(wù)系統(tǒng)先舷,會有網(wǎng)關(guān)轉(zhuǎn)發(fā)模塊和多種業(yè)務(wù)模塊艰管,我們通過在網(wǎng)關(guān)層進行路由配置,不同路由前綴訪問到后端不同的業(yè)務(wù)模塊蒋川,并對客戶端只暴露網(wǎng)關(guān)的端口牲芋,比如客戶端可以通過ip:9999/user/**訪問用戶模塊信息,通過ip:9999/order/** 訪問訂單模塊信息捺球,對于客戶端來說缸浦,只是訪問了網(wǎng)關(guān)服務(wù)9999,對于用戶模塊和訂單模塊是不知道的氮兵。此時裂逐,網(wǎng)關(guān)層扮演的就是服務(wù)反向代理。

2.2.2.拉取鏡像

docker pull nginx #命令默認latest泣栈,也可自己指定版本

2.2.3.運行容器

對于nginx服務(wù)器卜高,重要的兩個操作是:

  • 配置頁面訪問資源,配置路徑:/usr/share/nginx/html

  • 修改nginx.conf文件南片,配置具體代理策略

所以我們在配置啟動nginx容器的時候掺涛,需要將對應(yīng)的目錄及文件進行宿主機掛載,方便后續(xù)更新資源及操作

啟動命令:

$ docker run -d --name nginx -p 80:80 \
-v $NGINX/html:/usr/share/nginx/html \
-v $NGINX/log:/var/log/nginx \
-v $NGINX/nginx.conf:/etc/nginx/nginx.conf \
-d nginx
# 注意:這種方式是讀取宿主機下的資源及配置進行啟動疼进,所以要求“$NGINX/html”及“$NGINX/nginx.conf”文件有效薪缆,否者容器會啟動失敗,可以先進行目錄及文件不掛載方式運行伞广,將nginx中的“/etc/nginx/nginx.conf”配置文件拷貝出來拣帽。
# 拷貝命令:
docker cp nginx:/etc/nginx/nginx.conf . 
docker cp nginx.conf nginx:/etc/nginx/nginx.conf #將nginx.conf拷進容器

2.2.4.資源及代理配置

  • 將vue打包后的dist文件目錄上傳到服務(wù)器對應(yīng)目錄下“$NGINX/html”

  • nginx.conf文件配置

    user  nginx;
    worker_processes  auto;
    
    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
        server {
            listen       80;#監(jiān)聽端口
            server_name  localhost;
    
            location / {
                root   /usr/share/nginx/html/dist;#資源目錄 dist為vue打包編譯后的目錄
                index  index.html index.htm;
            }
            location /mumu/ {
                proxy_pass http://192.168.27.51:8081/;#192.168.27.51為當前l(fā)inux宿主機ip;8081為springboot項目容器暴露的端口
                proxy_read_timeout 6000s;
                proxy_set_header   Host    $host:$server_port;
                proxy_set_header   X-Real-IP   $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                client_max_body_size 1024M;
            }
        }
        include /etc/nginx/conf.d/*.conf;
    }
    
  • nginx容器重啟

    docker restart nginx

2.3.訪問測試

  • 訪問"ip:8081/test"可以訪問到springboot項目test接口

  • 訪問"ip:80"可以直接訪問到vue默認頁面

  • 訪問"ip:80/mumu/test"可以訪問到springboot項目test接口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載嚼锄,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者减拭。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灾票,隨后出現(xiàn)的幾起案子峡谊,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件既们,死亡現(xiàn)場離奇詭異濒析,居然都是意外死亡,警方通過查閱死者的電腦和手機啥纸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門号杏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斯棒,你說我怎么就攤上這事盾致。” “怎么了荣暮?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵庭惜,是天一觀的道長。 經(jīng)常有香客問我穗酥,道長护赊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任砾跃,我火速辦了婚禮骏啰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抽高。我一直安慰自己判耕,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布翘骂。 她就那樣靜靜地躺著壁熄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雏胃。 梳的紋絲不亂的頭發(fā)上请毛,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音瞭亮,去河邊找鬼方仿。 笑死,一個胖子當著我的面吹牛统翩,可吹牛的內(nèi)容都是我干的仙蚜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼厂汗,長吁一口氣:“原來是場噩夢啊……” “哼委粉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娶桦,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贾节,失蹤者是張志新(化名)和其女友劉穎汁汗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栗涂,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡知牌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斤程。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片角寸。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忿墅,靈堂內(nèi)的尸體忽然破棺而出扁藕,到底是詐尸還是另有隱情,我是刑警寧澤疚脐,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布亿柑,位于F島的核電站,受9級特大地震影響亮曹,放射性物質(zhì)發(fā)生泄漏橄杨。R本人自食惡果不足惜秘症,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一照卦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乡摹,春花似錦役耕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至板熊,卻和暖如春框全,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背干签。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工津辩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人容劳。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓喘沿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竭贩。 傳聞我的和親對象是個殘疾皇子蚜印,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容