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

news2024/9/28 17:34:17

手把手教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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)

文章目录 相信大家都能感受到Visual Studio C 编辑器链接 lib 或 dll文件是一件非常头疼的事情。配置gooleTest的过程也不例外。 市面上很多教程&#xff0c;要么就不全&#xff0c;要么就缺少一些细节&#xff0c;导致我自己再配置的过程中&#xff0c;踩了很多坑。今天就记录…

用不同的思路实现括号匹配(java)

给定一个只包括 (&#xff0c;) 的字符串&#xff0c;判断字符串是否有效。 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 以上就是题目要求 利用替换的思想 ()()()()()()()(())例如需要判断例子中的括号是否有效&#xff0c;用替换的思想具体就是 将字…

力扣sql简单篇练习(二十一)

力扣sql简单篇练习(二十一) 1 使用唯一标识符替换员工ID 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT e2.unique_id,e1.name FROM Employees e1 LEFT JOIN EmployeeUNI e2 ON e1.ide2.id1.3 运行…

使用netlify实现自动化部署前端项目(无服务器版本)

介绍 本文以 github仓库进行介绍关联netlify的无服务前端自动化部署。用途&#xff1a;个人网站设计、小游戏等当然这只是让你入门~具体细节等待你自己去探索 实现 打开官方网站 如果没有注册过的账户&#xff0c;你需要使用 github 去进行登录。注册完成后会自动给你提示填…

有关Windows域信任关系的一系列知识

简单的总结了一下来自这篇文章的知识点 https://www.kroll.com/-/media/kroll/pdfs/publications/rootedcon2019-pentesting-active-directory-forests-carlos-garcia.pdf 视频录像为 https://www.youtube.com/watch?v6aV5tZlQ2EQ&t10s&themeRefresh1 森林 域是由树和…

项目管理的工作内容有哪些?

首先&#xff0c;什么是项目管理&#xff1f; 项目管理是为了交付项目成果&#xff0c;包括“规划&#xff08;尤其关注估算&#xff09;——实施——确保成功”。项目管理可以用在所有事情上&#xff0c;当然&#xff0c;这个定义听起来可能还不够清晰&#xff0c;但它的好处…

华为机试题:HJ91 走方格的方案数(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

剑指offer06.从尾到头打印链表

题目描述 解题思路 遍历链表&#xff0c;依次将元素压入栈中。然后依次弹出栈顶元素&#xff0c;存入数组返回。程序 class Solution { public:vector<int> reversePrint(ListNode* head) {ListNode *phead;stack<int> s1;while(p!NULL) //遍历链表&#xff0c;元…

jetson-Linux上 python 部署yolov5报错总结

第一个问题&#xff1a;python报错 illegal instruction报错先上图这报错&#xff0c;emmmmm&#xff0c;我是小白&#xff0c;多谢大佬的笔记&#xff0c;帮我解决了&#xff0c;虽然我也没搞懂。。。。嘿嘿具体解决办法就是&#xff1a;临时运行代码&#xff1a;1-在运文件前…

优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止

在使用 SpringBoot 的时候&#xff0c;都要涉及到服务的停止和启动&#xff0c;当我们停止服务的时候&#xff0c;很多时候大家都是kill -9 直接把程序进程杀掉&#xff0c;这样程序不会执行优雅的关闭。而且一些没有执行完的程序就会直接退出。 我们很多时候都需要安全的将服…

SAP 采购定价过程字段解析

下面我们针对每一个字段进行解释和用途分析 &#xff1a; 1、 步骤&#xff1a;代表了创建PO时&#xff0c;哪个条件类型放到前面&#xff0c;哪个放到后面&#xff0c;如果步骤号相同&#xff0c;那就以谁先选择出来谁就在前面。 2、 计数&#xff1a;没有任何实际意义&a…

web,h5海康视频接入监控视频流记录二(后台node取流)

首先将自己的appkey,secret以及对应参数填上&#xff0c;看看是否能够取流成功。 ws取流是需要开通559端口的&#xff0c;可以联系海康技术开放&#xff0c;以及mgc需要升级版本。 普通模式的话 需要升级mgc到5.13.102版本&#xff0c;可以找下现场技术帮你升级&#xff0c;先…

Java | IO 模式之 JavaBIO 应用

文章目录IO模型Java BIOJava NIOJava AIO&#xff08;NIO.2&#xff09;BIO、NIO、AIO的使用场景BIO1 BIO 基本介绍2 BIO 的工作机制3 BIO 传统通信实现3.1 业务需求3.2 实现思路3.3 代码实现4 BIO 模式下的多发和多收消息4.1 业务需求4.2 实现思路4.3 代码实现5 BIO 模式下接收…

大V龚文祥造谣董明珠恋情被禁言

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 因造谣董明珠与王自如恋情&#xff0c;知名大V龚文祥老师被今日头条禁言。龚文祥说&#xff0c;69岁的董明珠&#xff0c;找了一个小自己34岁的男友&#xff0c;引的网友议论纷纷。 2月26日&#…

使用Python和OpenCV制作电影般的截屏相册!

目录 简介&#xff1a; 实现步骤&#xff1a; 代码说明&#xff1a; 报错error&#xff1a; 问题所在&#xff1a; 解决方法&#xff1a; 1&#xff09;卸载&#xff1a; 2&#xff09;重新安装&#xff1a; 3&#xff09;安装成功&#xff1a; 效果如下&#xff1a; 简…

DockQuery 天狼 v1.2.0 正式发布

DockQuery 天狼经过 2022 年的孵化&#xff0c;于 2022 年年底发布了第一个版本。 在春回大地万象更新之际&#xff0c;DockQuery 发布了 1.2.0 版本&#xff0c;也是我们公开招募第一批产品体验官的版本。 在这个版本中&#xff0c;DockQuery 主要专注以下几个主题&#xff…

电影《毒舌律师》观后感

上周看了《毒蛇律师》这部电影&#xff0c;讲述一位’大律师’在法庭为己方辩护&#xff0c;最终赢得辩护的故事。 &#xff08;1&#xff09;人之常情 说起法律相关&#xff0c;不禁会让人联想到讲法律相关知识的罗翔老师&#xff0c;平时也会看他相关视频&#xff0c;无论是亲…

开发中遇到的问题合集

集合相关 1.JDK版本冲突导致的报错 报错信息&#xff1a; Set.of、List.of、Path.of 如果在 JDK 1.8 的项目中使用 Set.of() 方法报错&#xff0c;可能是因为该方法是 JDK 9 中新增的&#xff0c;不被 JDK 1.8 所支持。 如果你需要在 JDK 1.8 中使用类似的功能&#xff0c;可…

前端:CSS

CSS基本语法规则&#xff1a;选择器若干属性声明 style标签&#xff1a;可以放到代码的任意位置处&#xff0c;head/body中都可以 三种写CSS的方式&#xff1a; 1、内部样式&#xff1a;使用style标签&#xff0c;直接把CSS写到html文件中。此时的style标签可以放到任何位置…

BMI160 BOSCH/博世 六轴 加速度 陀螺仪 传感器

BMI160 6轴惯性运动传感器&#xff0c;采用MEMS传感器封装&#xff0c;将16位3轴加速度计和超低功耗3轴陀螺仪集成在一起。当加速度计和陀螺仪在全速模式下运行时&#xff0c;耗电典型值低至950A&#xff0c;仅为市场上同类产品耗电量的50%或者更低。 Bosch BMI160专为智能手机…