docker Compose部署springboot+vue前端端分离

目录
  • (一) 准备工作
    • 一、安装
    • 二、修改生产环境下的配置以及打包操作:
  • (二) 开始部署
    • 一、blog_api 制作镜像
    • 二、dockerCompose编排
    • 三、mysql、redis、nginx的配置:
    • 四、导入数据[数据库表的数据、前端静态web资源]
    • 五、测试并排除错误:

温馨提示:如果有自己的服务器最好不过了,这样部署网项目就可以上线了。没有的话,只能使用localhost 本机访问啦,记得替换 ngixn 中的ip地址、域名为localhost。

(一) 准备工作

一、安装

1、安装Docker并配置阿里云仓库加速

① 环境查看,选择对应的docker的安装版本:

# 先查看发行版
cat /etc/os-release

# 若是redhat,查看系统信息:
cat /etc/redhat-release

# 若是debain,查看系统信息:
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
 # 官网提供的仓库,下载速度太慢【默认是国外的,我们不要使用国外的,需要使用国内的阿里云镜像地址】
# 不用官网的仓库,选择阿里云的仓库
 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 社区  docker-ee 企业版
 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默认的工作路径
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd

2-2、阿里云镜像加速

登录阿里云官网,点击控制台,找到产品与服务,搜容器镜像服务

镜像加速器:

配置使用:

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) 下载

# 官网提供的下载地址太慢了

# 使用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) 授权

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

(3) 验证是否安装成功:

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

二、修改生产环境下的配置以及打包操作:

前端、后端增加生产环境配置,然后修改:项目主机号、请求路径以及将mysql和redis的主机号修改为docker compose的服务名

1、修改前后端配置文件的项目主机号

前端修改配置访问后端路径,后端改的就是跨域配置允许前端访问的路径

前端生产环境配置:

后端生产环境配置(跨域配置):

2、修改前后端配置文件的项目请求路径

后端项目暴露的端口是8888,编写docker-compose.yaml时记得暴露

3、后端生产环境的配置把mysql和redis的主机号修改为docker compose的服务名

4、打包

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

打包生成了一个dist包

(2) 后端是多环境配置,打包记得把依赖一起打包:

记得配置激活的配置环境为 prod,如果忘记在springboot 配置中环境配置了,还可以在制作spirngboot镜像的dockerfile 中指明 生产环境是prod

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

打包记得把依赖一起打包:

(二) 开始部署

# 创建 /mnt/docker/ 目录
mkdir -p /mnt/docker/
cd /mnt/docker/

接下来:

① 编写构建各个项目模块的Dockerfile

② 编写docker-compose.yaml

③ mysql、redis、nginx的配置

④ 启动dockerCompose编排

⑤ 导入数据[数据库表数据、前端静态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、构建生成镜像 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 进行编排

★ 前提:mysql、redis、nginx的配置文件配置好后才可以进行编排

# 切换到docker-compose.yaml目录下,启动容器
cd /mnt/docker/
docker-compose up
docker-compose up -d #代表后台启动

docker-compose down  #停止并删除容器
docker-compose start #启动已有容器
docker-compose stop  #停止运行的容器

三、mysql、redis、nginx的配置:

1、mysql的配置:

① mysql 服务在docker-compose.yaml 中的编写内容为:

  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 服务在docker-compose.yaml 中的编写内容为:

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

由于没有挂载配置文件,所有不用挂载redis的配置

3、nginx的配置:

① nginx 服务在docker-compose.yaml 中的编写内容为:

  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获取,然后进行上传
  • mime.types的上传目录:结合dockercompose中数据卷的挂载点,推断出 /mnt/docker/nginx/
cd /mnt/docker/nginx/
# 使用xftp工具上传mime.types配置文件

注意:没有自己的服务器,把下面 blog.conf配置 中的域名server_name 改为localhost,并且没有ssl证书,记得把443(https 协议端口号) 的配置去掉,并把80(http协议端口号)rewrite 部分去掉。

nginx配置文件blog.conf 记得将配置文件的中文注释去除再复制粘贴。

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 会代理转发到 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证书

申请、下载和上传服务器的ssl证书

  • 下载ssl证书:要选择nginx类型的下载
  • 上传nginx的ssl证书:要注意证书文件的名称、证书格式和咱配置在nginx的配置文件保持一致
# nginx的配置文件:
server{
        listen 80;
        server_name blog.yilele.site; #域名
   		.....
}

# ssl的PEM 证书通常具有以下扩展: .pem、.crt、.cer 和.key
ssl_certificate      /etc/nginx/ssl/blog.yilele.site.pem;#nginx的ssl公钥,注意是pem后缀,可以根据阿里云ssl下载的格式填写
ssl_certificate_key  /etc/nginx/ssl/blog.yilele.site.key;#nginx的ssl私钥

# 再根据 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 进行编排啦~

四、导入数据[数据库表的数据、前端静态web资源]

1、导入数据库表的数据

(1) 导入sql文件

① mysql的挂载信息:

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

② 数据库视图工具navicat 把表导出sql文件:

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

在数据库中创建和 sql文件(blog.sql)对应的数据库名blog

cd /mnt/docker/mysql/data
# 使用 xftp 将 blog.sql 进行传输

(2) 执行sql文件(创建blog 数据库并导入数据)

# 进入mysql容器:
docker exec -it mysql bash
# 切换到挂载目录(blog.sql 所在目录):
cd /var/lib/mysql
# 查看该目录下所有文件:
ls
# 可以看到blog.sql也在该目录下

接下来在docker中执行该sql:

mysql -uroot -p
# 输入密码 admin ,进入docker中的数据库
# 创建数据库
create database blog;
# 退出回到容器
exit
# 在/var/lib/mysql目录下,将文件blog.sql导入数据库
mysql -u root -p blog < blog.sql;
# 输入密码 admin

# 重新进入数据库,切换数据库
mysql -uroot -p
# 输入密码 admin ,进入docker中的数据库
use blog;
# 执行sql并保存数据库
source blog.sql;
# 执行source命令可能会报错,打不开blog.sql 文件,这个问题可以忽略。

将.sql文件导入数据库命令:mysql -u 用户名 -p 数据库(blog) < 要导入的数据库数据(blog.sql)

结果检查

use blog;
show tables;
select * from ms_admin;

如果能查出来结果,那就说明我们的mysql导入sql文件成功了。

  • 退出mysql数据库:exit
  • 退出mysql容器:exit

(3) 检查mysql的配置

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

docker logs -f mysql

没有看到报错信息即成功(警告信息可以忽略)

2、导入前端静态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

#执行安装支持zip命令
yum install -y zip

#执行安装支持unzip命令
yum install -y unzip

上传web资源(dist 压缩包)

# 使用xftf 上传web资源
# 解压
unzip dist.zip

可以测试排错啦~

五、测试并排除错误:

(1) 测试:

api 模块的测试:访问 https://blog.yilele.site/

● 当我们觉得部署完全搞定的时候,就可以docker-compose up -d 后台启动,这样的话关掉远程连接也能运行了。

(2) 排查错误:

docker 常用命令:

# 容器命令
● 查看运行的容器:docker ps
● 删除容器:docker rm -f 容器id或容器名称
● 删除所有容器:docker rm -f $(docker ps -aq)
● 创建、启动并进入容器: docker run -it 容器id或容器名称 bash
● 进入启动过的容器: 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  #停止运行的容器

查看日志进行排查错误:

# 查看后端项目的错误-日志(进入docker-compose的目录下):
cd /mnt/docker/
docker-compose logs

# 查看服务端ngix-日志:
docker logs nginx

到此这篇关于docker Compose部署springboot+vue前端端分离的文章就介绍到这了,更多相关docker Compose部署springboot vue内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker部署springboot和vue项目的实现步骤

    A. docker 部署 springboot项目 一.springboot项目编译打包 二.在项目根目录创建Dockerfile文件 FROM openjdk:8-jdk-alpine VOLUME /tmp ADD ./target/demo-0.0.1-SNAPSHOT.jar demo.jar RUN sh -c 'touch /demo.jar' ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.se

  • docker Compose部署springboot+vue前端端分离

    目录 (一) 准备工作 一.安装 二.修改生产环境下的配置以及打包操作: (二) 开始部署 一.blog_api 制作镜像 二.dockerCompose编排 三.mysql.redis.nginx的配置: 四.导入数据[数据库表的数据.前端静态web资源] 五.测试并排除错误: 温馨提示:如果有自己的服务器最好不过了,这样部署网项目就可以上线了.没有的话,只能使用localhost 本机访问啦,记得替换 ngixn 中的ip地址.域名为localhost. (一) 准备工作 一.安装 1.安装

  • Docker compose部署SpringBoot项目连接MySQL及遇到的坑

    前面使用docker简单部署了下SpringBoot项目并介绍了什么是Dockerfile,如果是镜像比较多的情况下如何一键交付呢?Docker-compose!,理解了Docker-compose后面学习K8s就会好理解一些 一.安装docker-compose 环境Centos7 //下载docker-compose curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-

  • SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法

    当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异.笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来介绍一下项目中遇到的问题以及我的解决方案,希望这个系列能够给小伙伴一些帮助.本系列文章并不是手把手的教程,主要介绍了核心思路并讲解了核心代码,完整的代码小伙伴们可以在GitHub上star并clone下来研究.另外,原本计划把项目跑起来放到网上供小伙伴们查看,但是之前买服务器为了省钱,内存只有512M,两个应用跑不起来(已经有一个V部落开

  • SpringBoot+Vue前后端分离实现请求api跨域问题

    前言 最近过年在家无聊,刚好有大把时间学习Vue,顺便做了一个增删查改+关键字匹配+分页的小dome,可是使用Vue请求后端提供的Api的时候确发现一个大问题,前后端分离了,但是请求的时候也就必定会有跨域这种问题,那如何解决呢? 前端解决方案 思路:由于Vue现在大多数项目但是用脚手架快速搭建的,所以我们可以直接在项目中创建一个vue.config.js的配置文件,然后在里面配置proxy代理来解决,话不多说,直接上代码 module.exports = { devServer: { proxy

  • springboot+VUE前后端分离实现疫情防疫平台JAVA

    目录 主要模块: 系统主要实现如下: 登录之后进入系统首页:目前系统主要功能如下 用户管理模块:用户添加.修改.删除.查询等基本操作 角色管理模块.通过用户绑定角色.角色控制菜单显示.灵活控制菜单. 前端VUE代码添加菜单 菜单添加修改列表层操作 历史行程数据管理:添加修改删除等操作 用户每日健康打卡列表数据展示以及添加打卡信息 员工出行外出报备管理申请 员工复工申请 管理员审核 通知公告模块: 一些设计报告和文档描述参考 数据库连接: 主要模块: 管理员用户登录:用户登录. 用户信息: 用户信

  • docker compose部署主从复制的实现

    目录 配置解析 服务搭建 目录结构 Compose File 实例配置 启动服务 测试 受限于 Redis 单点性能,加上我们对数据天生就有的备份的需求,因此 Redis 提供了主从复制的服务. 本文记录了通过 docker compose 搭建一主双从的 Redis 服务. 配置解析 ################################# REPLICATION ################################# # [Slave]连接 Master 的配置 # s

  • idea整合docker快速部署springboot应用的详细过程

    目录 一.前言 二.环境及工具 三.安装docker以及配置远程连接 四.idea连接远程docker 一.前言 容器化一词相信大家已经不陌生了,听到它我们可能会想到docker.k8s.jenkins.rancher等等.那么今天我来说一下idea如何使用docker快速部署springboot应用. 二.环境及工具 windows10(开发) centos 7.6 (部署) idea docker xshell 三.安装docker以及配置远程连接 安装docker步骤网上有很多,在这里还是

  • IDEA通过Docker插件部署SpringBoot项目的过程详解

    1.配置Docker远程连接端口 找到并编辑服务器上的docker.service文件. vi /usr/lib/systemd/system/docker.service 如下图所示的地方,添加: -H tcp://0.0.0.0:2375 2.重启Docker systemctl daemon-reload service docker restart 3.服务器开放端口 我用的阿里云服务器,在安全组的配置规则,开放端口. 4.测试远程连接是否正常 curl http://localhost

  • Docker快速部署SpringBoot项目介绍

    1.安装 Docker 首先打开linux环境,输入以下命令进行安装: 安装 yum install docker 检查是否安装成功 docker --version #启动 systemctl start docker 如果下载很慢,可以切换到国内的阿里云镜像,进行下载: 换镜像源 sudo vim /etc/docker/daemon.json 内容如下: { "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.c

  • Docker Compose部署Nginx的方法步骤

    使用Docker Compose部署Nginx,创建docker-compose.yaml: [root@192 ~]# vim docker-compose.yaml 输入以下内容: version: '3' services: nginx: container_name: nginx image: nginx restart: always ports: - 8080:80 privileged: true networks: - mynginx networks: mynginx: dri

随机推荐