手牵手教Docker部署Springboot+vue ,全过程十分详细,轻松完成项目部署(简单,高效,通用)

手把手教Docker部署Springboot+vue ,详细全过程,轻松完成项目部署(简单,高效)

上线前准备

腾讯云的服务器,服务器安装好docker 和docker-compose

最好事先了解技术

  • nginx
  • docker-compose

整体编排

image-20230301094606801

后端部署前期工作

如图所示编写docker-compose.yml文件和Dockerfile

image-20230301095241033

Dockerfile文件

代码如下

FROM openjdk:8-jre                                #指定jdk 版本      
EXPOSE 8082                                       #部署后端暴露端口
ADD wu-generator-master.jar app.jar               #将编译后wu-generator-master.jar  命名为app.jar
RUN bash -c 'touch /app.jar'                      #对照上面app.jar
ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=pro"]   #对照自己上面的命名,重点指定加载pro.yml文件

本来是from java:8的,由于禁用了又想用8就选择了openjdk8

spring.profiles.active部署指定运行yml文件

由于上面我们知道需要pro.yml 文件()

image-20230301100002894

application-pro.yml

修改了两个地方mysql 和redis 的主机地址,用mysql和redis 字符串代替,因为后面部署时候mysql 和redis 容器启动会将ip 地址赋予他们

如何赋予呢?继续引出下一个文件docker compose.yml

server:
  # 端口
  port: 8082

spring:
  # 数据源配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql:3306/attendance?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

  redis:
    # redis服务器
    host: redis
    # 服务器端口号
    port: 6379
    # 密码 没有则可以不填
    password: "000415"
    # 选择哪个库,默认库为0
    database: 0
docker compose.yml
version: "3"
services:
 nginx: # 服务名称,用户自定义
  image: nginx:latest  # 镜像版本
  ports:
    - 80:80  # 暴露端口
  volumes: # 挂载
    - /root/nginx/html:/usr/share/nginx/html
    - /root/nginx/nginx.conf:/etc/nginx/nginx.conf
  privileged: true # 这个必须要,解决nginx的文件调用的权限问题
 mysql:
  image: mysql:8.0.23
  ports:
    - 3306:3306
  environment: # 指定用户root的密码
    - MYSQL_ROOT_PASSWORD=123456
 redis:
  image: redis:latest
 wu-generator-master:
  image: wu-generator-master:latest
  build: . # 表示以当前目录下的Dockerfile开始构建镜像
  ports:
    - 8082:8082
  depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
    - nginx
    - mysql
    - redis

上面文件大体解释已经有了,下面继续分析

关于nginx 挂载

  1. 后面会在服务器新建/root/nginx/html ,在html 目录下放前端代码,/usr/share/nginx/html 容器默认地址不用改变。
  2. ​ - /root/nginx/nginx.conf:/etc/nginx/nginx.conf 宿主机的conf 映射到容器conf地址
  3. wu-generator-master :这个是我的jar 名字 剩下直接对号入座就可以了

后端打包

wu-generator-master 自己的项目名字

<build>
    <finalName>wu-generator-master</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

image-20230301101254025

打包文件放在target

服务器前期准备

上面说到需要新建nginx 的挂载目录

mkdir nginx
touch nginx.conf
mkdir html

第一个就是nignx.conf

前端准备

前端有很多不一样有的人是这样的,我这里列几种请求路径

假设后端的接口是http://localhost:8082

第一种

axios.defaults.baseURL = "http://localhost:8082"

使用$axios.get()

如果访问登陆http://localhost:8082/login

第二种使用代理

在请求前缀加了个api ,代理到8082端口,因为前端项目占用一个端口
如果我们访问路径http://localhost:8081/api/login,会代理成http://localhost:8082/login

let base = '/api';
//传送json格式的post请求
export const postRequest = (url, params) => {
    return axios({
        method: 'post',
        url: `${base}${url}`,
        data: params
    })
}

vue.config.js

module.exports = {
	devServer: {
		//端口号
		port: 8081,
		//自动打开浏览器
		open: true,
		// 配置代理 
		proxy: {
			"/api": {
				target: 'http://localhost:8082', 
				// 是否改变域名
				changeOrigin: true, 
				// 代理websockets
				ws: true,
				// 路径重写
				pathRewrite: {
					"/api": "/"
				},
			
			}
		},
	}
};

上面两种nginx 配置文件不一样

第一种配置文件

#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  43.123.42.64;   #服务器地址
      location / {
          root   /usr/share/nginx/html;       
          try_files $uri $uri/ /index.html last; # 避免404
          index  index.html index.htm;

      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

第二种配置文件,为什么这里使用代理,因为本地代理生产环境会失效,只能用于开发环境

#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  43.123.42.64;
      location / {
          root   /usr/share/nginx/html;
          try_files $uri $uri/ /index.html last; #避免404
          index  index.html index.htm;

      }
        #ssl配置省略
         location /api {
            rewrite  ^.+api/?(.*)$ /$1 break;
            proxy_pass  http://43.123.42.64:8082;    # 即需要代理的IP地址
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }

      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

将上面属于自己的配置文件内容粘贴在服务器的nginx.conf

前端打包

使用命令

npm run build

image-20230301103512263

将dist 压缩,拖到服务器hmtl 目录下 进行解压

unzip dist.zip
 mv dist/* .
rm -rf dist*

这样文件就是

image-20230301103728370

前端也迁移到服务器了,剩下就是整体编排了

正式部署

前提,需要将打包得jar 文件,还有之前编写的docker-compose.yml文件和Dockerfile 都放到根目录

这样就是下面的样子了

image-20230301104007528

根目录执行

docker-compose up -d

如果运行成功,有四个容器,如果少一个就是运行错误

查看容器日志

docker logs 容器号
#清楚所有容器,从来
docker rm -vf $(docker ps -aq)

最后记得连接数据库,增加数据

我遇到的问题

  1. 405 Not Allowed
  2. 404
  3. We’re sorry but template doesn’t work properly without JavaScript enabled.Please enable it to continue.
### 部署Spring BootVue应用程序到Docker 为了在Linux环境中利用Docker部署Spring BootVue组成的全栈应用,需遵循一系列操作流程来确保前后端服务能够顺利运行并相互协作。 #### 准备工作环境 首先,在本地机器安装好Docker引擎之后,通过克隆指定仓库获取项目源码[^3]: ```bash git clone https://github.com/boylegu/SpringBoot-vue.git cd SpringBoot-vue/ ``` #### 构建Docker镜像 接着针对项目的不同部分分别创建对应的Dockerfile文件用于定义构建过程中的各项指令。对于前端(Vue.js),通常会采用Node.js作为基础镜像;而后端(Spring Boot)则多选用OpenJDK等Java运行时环境为基础镜像。完成配置后可以执行如下命令来进行镜像的制作: ```bash docker build -t springboot-vue-frontend ./vue-app docker build -t springboot-vue-backend ./spring-boot-app ``` #### 启动容器网络和服务 考虑到前后端通信的需求以及数据库连接等问题,建议新建一个自定义桥接网络以便于各组件间更稳定地交互。同时为简化管理可借助`docker-compose.yml`文件描述整个系统的架构布局,包括但不限于MySQL、Redis等依赖的服务及其启动参数设定(如密码)[^4]: ```yaml version: '3' services: db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: jeecg123456 cache: image: redis:alpine command: ["redis-server", "--requirepass", "jeecg123456"] backend: depends_on: - db - cache ... frontend: ports: - "80:80" ... networks: default: driver: bridge ``` 最后只需一条简单的命令就能按照上述YAML文档所指示的内容一键拉起全部所需资源: ```bash docker-compose up -d ``` 这样就完成了基于Linux平台下使用Docker技术快速搭建一套完整的Spring BootVue开发框架的任务[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值