【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)

0. 环境:

  1. 腾讯云服务器,版本centos7.6,我的版本自带docke和docker compose,没有的可以自行安装

1.安装docker

#安装
yum install docker
#检验安装是否成功
[root@VM-16-5-centos ~]# docker --version
Docker version 20.10.5, build 55c4c88
#启动docker
systemctl start docker

2.安装docker compose

可以参考:https://docs.docker.com/compose/install/

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#
sudo chmod +x /usr/local/bin/docker-compose
# 检查是否安装成功
docker-compose --version

3.编写Dockerfile 文件

因为我们的项目需要成为docker的镜像,所以我们必须先编写Dockerfile文件构建我们的项目镜像然后进行编排,Dockerfile文件可以帮我们进行构建。

3.1 Dockerfile文件

  • List item

直接在/root创建并编写Dockerfile文件

vim Dockerfile
  • List item

在此文件中写入以下内容

FROM java:8
EXPOSE 8888
ADD ./blog_api.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]

上面几行命令其实很简单,首先依赖jdk8环境,对外暴露8888,然后就是复制blog_api.jar 到docker容器中并命名为app.jar,最后是执行命令java -jar /app.jar —spring.profiles.active=prod,使用的是我们另外编写的一个线上环境配置 注意:你的后端项目在打包后可能命名为blog_api-1.0.0-SNAPSHOT.jar,在上传到服务器后,请命名为blog_api.jar 这个后续会讲,目前可先略过

3.2 编写docker-compose.yml文件

我们需要用到的软件与服务分别有nginx、mysql、redis、还有我们的springboot项目,所以编写如下:

  • 在/root目录下创建这个docker-compose.yml文件
vim docker-compose.yml
version: "3"
services:
  nginx: # 服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
      - 80:80  # 暴露端口
    volumes: # 挂载,前面是挂载到哪儿,后面是nginx的配置目录
      - /root/nginx/html:/usr/share/nginx/html
      - /root/nginx/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
  mysql:
    image: mysql:5.7.36
    ports:
      - 3306:3306
    environment: # 指定用户root的密码
      - MYSQL_ROOT_PASSWORD=root
  redis:
    image: redis:latest
  vueblog:
    image: vueblog:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
      - 8888:8888
    depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
      - mysql
      - redis

上面的意思,我都用注释解释一遍了,希望可以讲清楚!需要注意的是,nginx中我们对nginx的放置静态资源的html文件夹和配置文件nginx.conf进行了一个挂载,所以我们打包后的文件放置到宿主机/root/nginx/html文件目录就行了哈

3.3 修改SpringBoot中的application-prod.properties配置文件

注意这个application-prod.properties是我从application.properties中拷贝过来的,请按照我的来修改,这地方码神之路讲了,建议看看视频
然后我们再回头看看application-prod.properties文件,mysql和redis的链接之前还是localhost,现在我们需要修改成容器之间的调用,如何知道mysql和redis的链接地址呢?docker compose(编排)就帮我们解决了这个问题,我们可以使用镜像容器的服务名称来表示链接。比如docker-compose.yml中mysql的服务名称就叫mysql、redis就叫redis。
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第1张图片
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第2张图片

3.4 准备好nginx的挂载目录和配置

在docker-compose.yml中已经提到

  • 宿主机的挂载目录:/root/nginx/html
  • 挂载配置:/root/nginx/nginx.conf
    所以我们在root目录下新建nginx目录,并进入nginx目录下新建html目录和一个nginx.conf配置文件

下图是我已经建立好的
在这里插入图片描述

#创建文件并编辑
vim nginx.conf

然后对nginx.conf进行编写,具体配置如下
nginx.conf

#nginx.conf
#user  root;
worker_processes  1;
events {
  worker_connections  1024;
}
http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;
  server {
      listen       80;
      server_name  localhost;
      location / {
          root   /usr/share/nginx/html;
          try_files $uri $uri/ /index.html last; # 别忘了这个哈
          index  index.html index.htm;
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

3.5 上传前端

前端打包之后先修改前端调用后端的接口,配置如下
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第3张图片
index.js未做任何改动
修改好之后 运行 npm run build打包得到dist文件,可以将dist文件下的所有文件上传到 /root/nginx/html目录下。如下图:

【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第4张图片

3.6 部署后端

一切准备就绪后,我们就开始编排部署了,首先打包我们的blog_api项目
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第5张图片
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第6张图片
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第7张图片
之后,点击apply之后,点击运行,见下图
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第8张图片
运行之后,就打包成功,可以在target目录下看到打包之后的文件
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第9张图片
将这个jar包上传到/root下,并使用mv命令进行重命名

mv blog_api-1.0-SNAPSHOT.jar blog_api.jar

命名之后的文件目录见下图
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第10张图片
之后执行编排命令:

#开始编排
cd ~
docker-compose up -d

编排的时间可能有点慢,编排成功之后提示如下:
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第11张图片
使用命令监控vueblog镜像的日志

#-t可以一直监控,可以看到报错信息 ab245b88feed代表vueblog的CONTAINER ID,如上图使用docker ps查询出来的
docker logs -t ab245b88feed

到目前为止已经部署成功了,其实可以使用postman测试一下登录,发现返回解决为系统异常,
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第12张图片
此时看服务器输出的日志信息发现是没有找到数据库
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第13张图片
这时候我们可以使用我们自己电脑的sqkyog或者其他可视化界面远程连接数据库,但是进行远程连接数据库之前需要进行一些配置,配置如下:


docker exec -it mysql-test /bin/bash  # mysql-test是上面新建容器时起的名字
mysql -u root -p
# 设置自己的电脑远程连接服务器上的mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxx'; 
# 成功的话会这样输出 Query OK, 0 rows affected (0.00 sec) xxxx为你的mysql密码 

之后远程连接数据库
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第14张图片
讲sql文件导入到这个数据库中,导入成功后如下:
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第15张图片
此时在进行postman测试,测试结果如图:
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第16张图片
在浏览器上输入 http://ip地址看是否部署成功,我的界面如下:
【码神之路】使用Docker对基于springboot + vue 的博客搭建过程(上线)_第17张图片

你可能感兴趣的:(学习笔记,docker,spring,boot,vue.js)