(Docker Nginx) Spring boot+Vue 前后端分离部署 详细完整版

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

Springboot项目部署:docker构建mysql环境+docker构建项目自身环境。

Vue项目:使用docker启动nginx服务器方式代理部署。

1.SpringBoot项目部署

项目使用mysql8.0作为数据源,所以部署时需要使用docker构建mysql环境及项目自身环境。

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

连接出现1251错误时:

#1.进入容器
docker exec -it mysql8.0.22 /bin/bash
#2.连接mysql服务器进行配置修改
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运行环境,Dockerfile可以通过FROM指令直接获取它的状态,也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用。
VOLUME:指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。
将项目的jar文件作为app.jar添加到容器
RUN:表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。
EXPOSE:容器向外暴露的端口,用于容器生成时和主机某端口进行映射 必要
ENTRYPOINT:容器应用启动命令 参数设定 
# 注意: ENTRYPOINT 配置相关ip地址时,localhost或者127.0.0.1会被指向当前容器,例如:如果你需要连接本机中的mysql服务器,你必须把ip换成本机ip而不是localhost

1.2.2.生成镜像

$ docker image build -t mumu .
# 或者
$ docker image build -t mumu:0.0.1 .
解释:
-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径
image创建成功可以通过 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 应用日志 数据卷的方式存储,将容器中的/log文件夹挂载到本机中的/opt/jar/boot-docker/logs
-p 8081:8081 用主机(前面)端口映射容器中(后面)的端口
-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
mumu:0.0.1 image名称 (如果有标签提供标签,默认是 latest 标签)
/bin/bash  容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell

到此,springboot项目采用docker方式运行部署结束。

2.Vue项目部署

2.1.项目打包

npm run build

DONE Build complete. The dist directory is ready to be deployed.
执行完成之后会在项目目录下生成文件夹dist,之后我们将该文件夹进行nginx代理部署即可

其他开发中使用到的命令(本人后端开发,对vue使用不是很了解,顺带记录下):
1.vue ui #启动在线项目可视化管理
2.npm run serve #启动vue项目
3.vue add element #项目添加element插件依赖
4.vue add axios #项目添加axios插件依赖

2.2.nginx部署

使用docker容器方式运行nginx服务器。

2.2.1.代理概念

  • 正向代理

    代理client端,隐藏了client进行隐藏:由于一些原因客户端不能直接访问目标服务器,于是客户端将请求发送给中间代理服务器,由中间代理服务器向目标服务器发起请求,并将请求到的数据返回给客户端。在这个过程中,目标服务器并不知道客户端姓甚名谁,因为它收到的只是中间代理服务器的请求。此时,客户端和中间代理服务器是一个整体,客户端对目标服务器是隐藏的。

  • 反向代理

    代理server端,对server端进行隐藏:比如一个基本的微服务系统,会有网关转发模块和多种业务模块,我们通过在网关层进行路由配置,不同路由前缀访问到后端不同的业务模块,并对客户端只暴露网关的端口,比如客户端可以通过ip:9999/user/**访问用户模块信息,通过ip:9999/order/** 访问订单模块信息,对于客户端来说,只是访问了网关服务9999,对于用户模块和订单模块是不知道的。此时,网关层扮演的就是服务反向代理。

2.2.2.拉取镜像

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

2.2.3.运行容器

对于nginx服务器,重要的两个操作是:

  • 配置页面访问资源,配置路径:/usr/share/nginx/html

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

所以我们在配置启动nginx容器的时候,需要将对应的目录及文件进行宿主机挂载,方便后续更新资源及操作

启动命令:

$ 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文件目录上传到服务器对应目录下“$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;#监听端口
            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为当前linux宿主机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接口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容