溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker?Compose怎么部署springboot+vue前端端分離

發(fā)布時間:2022-08-12 10:37:26 來源:億速云 閱讀:184 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“docker Compose怎么部署springboot+vue前端端分離”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“docker Compose怎么部署springboot+vue前端端分離”吧!

溫馨提示:如果有自己的服務(wù)器最好不過了,這樣部署網(wǎng)項(xiàng)目就可以上線了。沒有的話,只能使用localhost 本機(jī)訪問啦,記得替換 ngixn 中的ip地址、域名為localhost。

(一) 準(zhǔn)備工作

一、安裝

1、安裝Docker并配置阿里云倉庫加速

① 環(huán)境查看,選擇對應(yīng)的docker的安裝版本:

# 先查看發(fā)行版
cat /etc/os-release

# 若是redhat,查看系統(tǒng)信息:
cat /etc/redhat-release

# 若是debain,查看系統(tǒng)信息:
cat /etc/debian_version

2、安裝Docker

選擇linux版本的docker安裝教程

# 1、卸載舊版本:
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
 # 2、使用倉庫安裝
 # 需要的安裝包
 sudo yum install -y yum-utils   
 # 官網(wǎng)提供的倉庫,下載速度太慢【默認(rèn)是國外的,我們不要使用國外的,需要使用國內(nèi)的阿里云鏡像地址】 
# 不用官網(wǎng)的倉庫,選擇阿里云的倉庫  
 sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
# 更新yum 軟件包索引    
yum makecache fast
    
    
# 3、安裝 Docker 引擎   docker-ce 社區(qū)  docker-ee 企業(yè)版
 yum install docker-ce docker-ce-cli containerd.io

 
 # 4、啟動 Docker
 systemctl start docker
 
 # 檢查是否成功啟動
 docker version
 
 # 5、測試hello-world 
 docker run hello-world
 
 # 查看下載的鏡像
 docker images
 
 # 6、了解卸載工作:
 # 卸載 Docker 引擎(卸載依賴)
 sudo yum remove docker-ce docker-ce-cli containerd.io
 # 刪除所有映像、容器和卷(珊除資源) /var/lib/docker 是docker默認(rèn)的工作路徑
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd

2-2、阿里云鏡像加速

登錄阿里云官網(wǎng),點(diǎn)擊控制臺,找到產(chǎn)品與服務(wù),搜容器鏡像服務(wù)

docker?Compose怎么部署springboot+vue前端端分離

鏡像加速器:

docker?Compose怎么部署springboot+vue前端端分離

配置使用:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://o10wzpax.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

3、安裝DockerCompose

(1) 下載

# 官網(wǎng)提供的下載地址太慢了

# 使用daocloud提供的下載速度更快
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

(2) 授權(quán)

sudo chmod +x /usr/local/bin/docker-compose

(3) 驗(yàn)證是否安裝成功:

[root@iZwz9535z41cmgcpkm7i81Z bin]# docker-compose --version
docker-compose version 1.29.1, build c34c88b2

二、修改生產(chǎn)環(huán)境下的配置以及打包操作:

前端、后端增加生產(chǎn)環(huán)境配置,然后修改:項(xiàng)目主機(jī)號、請求路徑以及將mysqlredis的主機(jī)號修改為docker compose的服務(wù)名

1、修改前后端配置文件的項(xiàng)目主機(jī)號

前端修改配置訪問后端路徑,后端改的就是跨域配置允許前端訪問的路徑

前端生產(chǎn)環(huán)境配置:

docker?Compose怎么部署springboot+vue前端端分離

后端生產(chǎn)環(huán)境配置(跨域配置):

docker?Compose怎么部署springboot+vue前端端分離

2、修改前后端配置文件的項(xiàng)目請求路徑

docker?Compose怎么部署springboot+vue前端端分離

后端項(xiàng)目暴露的端口是8888,編寫docker-compose.yaml時記得暴露

3、后端生產(chǎn)環(huán)境的配置把mysql和redis的主機(jī)號修改為docker compose的服務(wù)名

docker?Compose怎么部署springboot+vue前端端分離

4、打包

(1) 前端打包命令:npm run build

打包生成了一個dist包

(2) 后端是多環(huán)境配置,打包記得把依賴一起打包:

記得配置激活的配置環(huán)境為 prod,如果忘記在springboot 配置中環(huán)境配置了,還可以在制作spirngboot鏡像的dockerfile 中指明 生產(chǎn)環(huán)境是prod

# springboot 中 application-prod.properties文件中配置
spring.profiles.active=prod

docker?Compose怎么部署springboot+vue前端端分離

打包記得把依賴一起打包:

docker?Compose怎么部署springboot+vue前端端分離

docker?Compose怎么部署springboot+vue前端端分離

docker?Compose怎么部署springboot+vue前端端分離

(二) 開始部署

# 創(chuàng)建 /mnt/docker/ 目錄
mkdir -p /mnt/docker/
cd /mnt/docker/

接下來:

① 編寫構(gòu)建各個項(xiàng)目模塊的Dockerfile

② 編寫docker-compose.yaml

③ mysql、redis、nginx的配置

④ 啟動dockerCompose編排

⑤ 導(dǎo)入數(shù)據(jù)[數(shù)據(jù)庫表數(shù)據(jù)、前端靜態(tài)web資源]

⑥ 測試訪問,并排除錯誤

一、blog_api 制作鏡像

1、上傳打包生成的jar包,上傳到/mnt/docker/ 目錄,并修改jar包的包名為 blog_api.jar

2、編寫鏡像文件 api_dockerfile:

FROM java:8 
MAINTAINER shan <test@qq2363581677@163.com> 
ADD ./blog_api.jar /api.jar
CMD java -jar /api.jar --spring.profiles.active=prod

3、構(gòu)建生成鏡像 api:

命令: docker build -f dockerfile路徑 -t 自定義鏡像名稱 .

# blog_api 生成鏡像
docker build -f ./api_dockerfile -t api .

二、dockerCompose編排

1、編寫 docker-compose.yaml

version: "3"
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    volumes:
      - /mnt/docker/mysql/conf:/etc/mysql/conf
      - /mnt/docker/mysql/logs:/logs
      - /mnt/docker/mysql/data:/var/lib/mysql 
    environment:
      MYSQL_ROOT_PASSWORD: admin
  redis:
    image: redis
    container_name: redis
    volumes:
      - /mnt/docker/redis/data:/data
  api:
    image: api
    container_name: api
    expose:
      - "8888"
    depends_on:
      - mysql
      - redis
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - /mnt/docker/nginx/:/etc/nginx/
      - /mnt/shan/blog:/shan/blog
    links:
      - api
    depends_on:
      - api

2、dockercompose 進(jìn)行編排

★ 前提:mysql、redis、nginx的配置文件配置好后才可以進(jìn)行編排

# 切換到docker-compose.yaml目錄下,啟動容器
cd /mnt/docker/
docker-compose up
docker-compose up -d #代表后臺啟動


docker-compose down  #停止并刪除容器
docker-compose start #啟動已有容器
docker-compose stop  #停止運(yùn)行的容器

三、mysql、redis、nginx的配置:

1、mysql的配置:

① mysql 服務(wù)在docker-compose.yaml 中的編寫內(nèi)容為:

  mysql:
    volumes:
      - /mnt/docker/mysql/conf:/etc/mysql/conf

② 掛載mysql的配置文件:

mkdir -p /mnt/docker/mysql/conf
cd /mnt/docker/mysql/conf
# 編寫my.cnf文件[vim my.cnf]
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
lower_case_table_names=1
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2、redis的配置:

① redis 服務(wù)在docker-compose.yaml 中的編寫內(nèi)容為:

  redis:
    volumes:
      - /mnt/docker/redis/data:/data

由于沒有掛載配置文件,所有不用掛載redis的配置

3、nginx的配置:

① nginx 服務(wù)在docker-compose.yaml 中的編寫內(nèi)容為:

  nginx:
    volumes:
      - /mnt/docker/nginx/:/etc/nginx/ #配置文件
      - /mnt/shan/blog:/shan/blog	  # web資源

② 掛載nginx的配置文件:

mkdir -p /mnt/docker/nginx/
cd /mnt/docker/nginx/
# 編寫nginx 配置文件

nginx基本配置,編寫nginx.conf文件[vim nginx.conf]:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
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;
    include /etc/nginx/conf.d/*.conf;
}

nginx基本配置文件nginx.conf中include了一個mime.types配置文件:

上傳mime.types配置文件:

  • mime.types配置文件: 在nginx安裝包的conf目錄下,下載一個nginx獲取,然后進(jìn)行上傳

  • mime.types的上傳目錄:結(jié)合dockercompose中數(shù)據(jù)卷的掛載點(diǎn),推斷出 /mnt/docker/nginx/

cd /mnt/docker/nginx/
# 使用xftp工具上傳mime.types配置文件

注意:沒有自己的服務(wù)器,把下面 blog.conf配置 中的域名server_name 改為localhost,并且沒有ssl證書,記得把443(https 協(xié)議端口號) 的配置去掉,并把80(http協(xié)議端口號)rewrite 部分去掉。

nginx配置文件blog.conf 記得將配置文件的中文注釋去除再復(fù)制粘貼。

mkdir -p /mnt/docker/nginx/conf.d
cd /mnt/docker/nginx/conf.d
# 編寫blog.conf文件[vim blog.conf]
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_vary off;
upstream apistream{
        server api:8888;
}

server{
        listen 80;
        server_name blog.yilele.site; 
        rewrite ^(.*) https://blog.yilele.site/$1 permanent;
}

server {
               listen       443 ssl;
               server_name  blog.yilele.site;
               index   index.html;
               ssl_certificate      /etc/nginx/ssl/blog.yilele.site.pem;
               ssl_certificate_key  /etc/nginx/ssl/blog.yilele.site.key;
               ssl_session_timeout  5m;
               location /api {#請求https://blog.yilele.site/api 會代理轉(zhuǎn)發(fā)到 api:8888
					proxy_pass http://apistream;
               }              
               location / {
                        root /shan/blog/;
                        index index.html;
               }
              location ~* \.(jpg|jpeg|gif|png|swf|rar|zip|css|js|map|svg|woff|ttf|txt)$ {
                          root /shan/blog/;
                          index index.html;
                          add_header Access-Control-Allow-Origin *;
              }
}

③ 配置nginx的ssl證書

申請、下載和上傳服務(wù)器的ssl證書

  • 下載ssl證書:要選擇nginx類型的下載

  • 上傳nginx的ssl證書:要注意證書文件的名稱、證書格式和咱配置在nginx的配置文件保持一致

# nginx的配置文件: 
server{
        listen 80;
        server_name blog.yilele.site; #域名
   		.....
}

# ssl的PEM 證書通常具有以下擴(kuò)展: .pem、.crt、.cer 和.key
ssl_certificate      /etc/nginx/ssl/blog.yilele.site.pem;#nginx的ssl公鑰,注意是pem后綴,可以根據(jù)阿里云ssl下載的格式填寫
ssl_certificate_key  /etc/nginx/ssl/blog.yilele.site.key;#nginx的ssl私鑰
               
               
# 再根據(jù) docker-compose.yml 文件推出ssl證書上傳的目錄:
   volumes:
    - /mnt/docker/nginx/:/etc/nginx/

上傳ssl證書:

mkdir -p /mnt/docker/nginx/ssl
cd /mnt/docker/nginx/ssl
# 使用xftp工具上傳ssl證書(blog.yilele.site.pem、blog.yilele.site.key)

可以啟動dockercompose 進(jìn)行編排啦~

四、導(dǎo)入數(shù)據(jù)[數(shù)據(jù)庫表的數(shù)據(jù)、前端靜態(tài)web資源]

1、導(dǎo)入數(shù)據(jù)庫表的數(shù)據(jù)

(1) 導(dǎo)入sql文件

① mysql的掛載信息:

    volumes:
		.....
      - /mnt/docker/mysql/data:/var/lib/mysql

② 數(shù)據(jù)庫視圖工具navicat 把表導(dǎo)出sql文件:

docker?Compose怎么部署springboot+vue前端端分離

③ 上傳sql文件(文件名:blog.sql):

在數(shù)據(jù)庫中創(chuàng)建和 sql文件(blog.sql)對應(yīng)的數(shù)據(jù)庫名blog

cd /mnt/docker/mysql/data
# 使用 xftp 將 blog.sql 進(jìn)行傳輸

(2) 執(zhí)行sql文件(創(chuàng)建blog 數(shù)據(jù)庫并導(dǎo)入數(shù)據(jù))

# 進(jìn)入mysql容器:
docker exec -it mysql bash
# 切換到掛載目錄(blog.sql 所在目錄): 
cd /var/lib/mysql
# 查看該目錄下所有文件: 
ls
# 可以看到blog.sql也在該目錄下

接下來在docker中執(zhí)行該sql:

mysql -uroot -p 
# 輸入密碼 admin ,進(jìn)入docker中的數(shù)據(jù)庫
# 創(chuàng)建數(shù)據(jù)庫
create database blog;
# 退出回到容器
exit
# 在/var/lib/mysql目錄下,將文件blog.sql導(dǎo)入數(shù)據(jù)庫 
mysql -u root -p blog < blog.sql;
# 輸入密碼 admin

# 重新進(jìn)入數(shù)據(jù)庫,切換數(shù)據(jù)庫
mysql -uroot -p 
# 輸入密碼 admin ,進(jìn)入docker中的數(shù)據(jù)庫
use blog;
# 執(zhí)行sql并保存數(shù)據(jù)庫
source blog.sql;
# 執(zhí)行source命令可能會報錯,打不開blog.sql 文件,這個問題可以忽略。

將.sql文件導(dǎo)入數(shù)據(jù)庫命令:mysql -u 用戶名 -p 數(shù)據(jù)庫(blog) < 要導(dǎo)入的數(shù)據(jù)庫數(shù)據(jù)(blog.sql)

結(jié)果檢查

use blog; 
show tables; 
select * from ms_admin;

如果能查出來結(jié)果,那就說明我們的mysql導(dǎo)入sql文件成功了。

docker?Compose怎么部署springboot+vue前端端分離

  • 退出mysql數(shù)據(jù)庫:exit

  • 退出mysql容器:exit

(3) 檢查mysql的配置

● 編排dockerCompose之后檢查docker中mysql的配置是否成功:

docker logs -f mysql

沒有看到報錯信息即成功(警告信息可以忽略)

2、導(dǎo)入前端靜態(tài)web資源

(1) nginx 前端web資源的配置:

   volumes:
   	   ......
     - /mnt/shan/blog:/shan/blog	 # web資源
# 在log目錄用于上傳前端的web資源(打包工具打包生成的html、css、js、圖片等)
cd /mnt/shan/blog
# 使用xftf 上傳web資源

(2) 手動壓縮前端dist包,上傳到 /mnt/shan/blog 目錄

  • 手動壓縮:是為了提高傳輸速度

  • 安裝解壓縮工具:

#獲取安裝列表  yum安裝列表中搜索zip/unzip是否存在
yum list|grep zip
yum list|grep unzip

#執(zhí)行安裝支持zip命令 
yum install -y zip

#執(zhí)行安裝支持unzip命令 
yum install -y unzip

上傳web資源(dist 壓縮包)

# 使用xftf 上傳web資源
# 解壓
unzip dist.zip

docker?Compose怎么部署springboot+vue前端端分離

可以測試排錯啦~

五、測試并排除錯誤:

(1) 測試:

api 模塊的測試:訪問 https://blog.yilele.site/

● 當(dāng)我們覺得部署完全搞定的時候,就可以docker-compose up -d 后臺啟動,這樣的話關(guān)掉遠(yuǎn)程連接也能運(yùn)行了。

(2) 排查錯誤:

docker 常用命令:

# 容器命令
● 查看運(yùn)行的容器:docker ps
● 刪除容器:docker rm -f 容器id或容器名稱
● 刪除所有容器:docker rm -f $(docker ps -aq)
● 創(chuàng)建、啟動并進(jìn)入容器: docker run -it 容器id或容器名稱 bash 
● 進(jìn)入啟動過的容器: docker exec -it 容器id或容器名稱 bash 
● 退出容器:【停止容器】exit 【非停止容器】ctr+p+q
● 啟動容器:docker start 容器id

# 鏡像命令
● 查看所有鏡像: docker images
● 刪除鏡像: docker rmi -f 鏡像id
● 刪除所有鏡像: docker rmi -f $(docker images -aq)

dockerCompose 常用命令:

# 切換到docker-compose.yaml目錄下,啟動容器
docker-compose up
docker-compose up -d #代表后臺啟動


docker-compose down  #停止并刪除容器
docker-compose start #啟動已有容器
docker-compose stop  #停止運(yùn)行的容器

查看日志進(jìn)行排查錯誤:

# 查看后端項(xiàng)目的錯誤-日志(進(jìn)入docker-compose的目錄下):
cd /mnt/docker/
docker-compose logs

# 查看服務(wù)端ngix-日志:
docker logs nginx

到此,相信大家對“docker Compose怎么部署springboot+vue前端端分離”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI