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

news/2024/4/26 15:45:34/文章来源:https://blog.csdn.net/weixin_45956631/article/details/129277179

手把手教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: 8082spring:# 数据源配置datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://mysql:3306/attendance?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456redis:# redis服务器host: redis# 服务器端口号port: 6379# 密码 没有则可以不填password: "000415"# 选择哪个库,默认库为0database: 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.confprivileged: true # 这个必须要,解决nginx的文件调用的权限问题mysql:image: mysql:8.0.23ports:- 3306:3306environment: # 指定用户root的密码- MYSQL_ROOT_PASSWORD=123456redis:image: redis:latestwu-generator-master:image: wu-generator-master:latestbuild: . # 表示以当前目录下的Dockerfile开始构建镜像ports:- 8082:8082depends_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, // 代理websocketsws: 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; # 避免404index  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; #避免404index  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.zipmv 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.luyixian.cn/news_show_75840.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCNP350-401学习笔记(易错题合集)

CCNP350-401学习笔记&#xff08;1-50题&#xff09;_殊彦_sy的博客-CSDN博客CCNP350-401学习笔记&#xff08;2023.2.17&#xff09;https://blog.csdn.net/shuyan1115/article/details/129088574?spm1001.2014.3001.5502CCNP350-401学习笔记&#xff08;51-100题&#xff09…

SAP 详解ST02

问&#xff1a;在st02中看到&#xff0c;Program和Export/Import的Swap出现红的了&#xff0c;这个是什么原因啊&#xff0c;是不是对系统的性能有影响啊&#xff0c;是否应该调整一些参数啊。要怎么调整呢&#xff1f; 复1&#xff1a;双击红色的部分就可以看到相应的参数修改…

Linux字符设备驱动模型之设备号

从上文中可知&#xff0c;在Linux用户空间中&#xff0c;如若需要操作硬件设备&#xff0c;均通过/dev目录下的设备文件节点进行操作&#xff0c;基本上每一种设备都会存在一个或者多个的设备节点。 并且在Linux内核中&#xff0c;其表示字符设备的结构成员也提供了相应的设备号…

在数字优先的世界中打击知识产权盗窃

在当今数据驱动的世界中&#xff0c;全球许多组织所面临的期望和需求正在达到前所未有的水平。 为了迎接挑战&#xff0c;数据驱动的方法是必要的&#xff0c;需要有效的数字化转型来提高运营效率、简化流程并从遗留技术中获得更多收益。 但是&#xff0c;虽然数字优先方法可…

css3的重点内容

css3的重点内容 浮动 父级边框塌陷问题 浮动的清除 clear:left; //清除左侧浮动 clear:right; //清除右侧浮动 clear:both; //清除两侧浮动解决方案 增加父级元素的高度增加一个空的div&#xff0c;之后清除浮动通过overflow来进行相关元素的修剪给父类添加相应的伪类元素…

植物大战 二叉搜索树——C++

这里是目录标题二叉排序树的概念模拟二叉搜索树定义节点类insert非递归Finderase(重点)析构函数拷贝构造(深拷贝)赋值构造递归FindRInsertR二叉搜索树的应用k模型KV模型二叉排序树的概念 单纯的二叉树存储数据没有太大的作用。 搜索二叉树作用很大。 搜索二叉树的一般都是用…

JavaEE进阶第六课:SpringBoot配置文件

上篇文章介绍了SpringBoot的创建和使用&#xff0c;这篇文章我们将会介绍SpringBoot配置文件 目录1.配置文件的作用2.配置文件的格式2.1 .properties语法2.1.1.properties的缺点2.2 .yml语法2.2.1优点分析2.2.2配置与读取对象2.2.3配置与读取集合2.2.4补充说明3.设置不同环境的…

时间API在更新,传奇已经谢幕,但技术永远不死

&#xff08;Bill Joy(左一)&#xff0c;Vinod Khosla(左二)&#xff0c;Andy Bechtolsheim(右二)&#xff0c;Scott McNealy(右一) &#xff09; CSDN 博文征集活动&#xff08;和日期相关的代码和bug&#xff09;&#xff1a;点击这里 各位 “big guys”&#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 模式下接收…

单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)

一、RBF神经网络 1988年&#xff0c;Broomhead和Lowc根据生物神经元具有局部响应这一特点&#xff0c;将RBF引入神经网络设计中&#xff0c;产生了RBF(Radical Basis Function)。1989年&#xff0c;Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。 RBF的基本思想是…

Mybatis二级缓存

目录 二级缓存的定义 二级缓存扩展性需求 二级缓存的结构 SynchronizedCache线程同步缓存区 LoggingCache统计命中率以及打印日志 ScheduledCache过期清理缓存区 LruCache(最近最少使用)防溢出缓存区 FifoCache(先进先出)防溢出缓存区 二级缓存的使用(命中条件) 二级…

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

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

866363-70-4,N3-C5-NHS ester,叠氮-C5-NHS 主要物理性质分享

●外观以及性质&#xff1a;Azido-Aca-NHS淡黄色或无色油状&#xff0c;叠氮化物可以与炔烃、DBCO和BCN进行铜催化的点击化学反应。NHS酯可以与胺基反应&#xff0c;形成稳定的酰胺键。●中文名&#xff1a;叠氮-C5-NHS ester&#xff0c;6-叠氮己酸活性酯●英文名&#xff1a;…

阶乘后的零[挖掘规律+动态规划]

挖掘规律 动态规划前言一、阶乘后的零二、挖掘规律1、动态规划2、直接寻找5的个数总结参考资料前言 想要计算阶乘后的0有多少&#xff0c;可以直接算出阶乘值&#xff0c;再不断对10取余。但是如果n比较大&#xff0c;这种方法是根本行不通的&#xff0c;只能挖掘规律。 一、…

数据挖掘1/13

文章目录教材&#xff0c;考核&#xff0c;软件现在数据是ZB时代数据挖掘公司3类数据挖掘数据挖掘技术&#xff08;5个&#xff09;分类&#xff1a;找因变量y无监督聚类数据分析 数据挖掘教材&#xff0c;考核&#xff0c;软件 教材 考核 软件&#xff1a;jupyter 和spss mod…

十四、MyBatis的逆向工程

逆向工程&#xff1a; 根据数据库表逆向生成Java的pojo类&#xff0c;SqlMapper.xml文件&#xff0c;以及Mapper接口类等。 借助别人写好的逆向工程插件。 使用这个插件的话&#xff0c;需要给这个插件配置哪些信息&#xff1f; pojo类名、包名以及生成位置。SqlMapper.xml文…

EPICS motor模块

一、概要 1&#xff09; 在EPICS motor模块中的是什么并且它为了什么&#xff1f; 2&#xff09; 支持的电机控制器和模型 3&#xff09;电机记录特性 4&#xff09;配置示例 5&#xff09;反馈 6&#xff09; 重试 7&#xff09; 回程差矫正 8&#xff09;发行 二、术…

webrtc拥塞控制算法对比-GCC vs BBR vs PCC

1.前言现有集成在webrtc中的拥塞控制算法有三种, 分别是: 谷歌自研发的gcc, 谷歌自研发的BBR算法, 斯坦福大学提出的基于机器学习凸优化的PCC算法. 本文将探讨一下三个算法的区别和优缺点。2.背景迈聆会议从17年到现在, 一直使用的是基于谷歌的gcc算法自研的Omcc算法(optimizat…

[软件测试]如何使用Eclipse导入项目并打开

&#x1f9d1;‍&#x1f393;个人介绍&#xff1a;大二软件生&#xff0c;现学JAVA、Linux、MySQL、算法 &#x1f4bb;博客主页&#xff1a;渡过晚枫渡过晚枫 &#x1f453;系列专栏&#xff1a;[编程神域 C语言]&#xff0c;[java/初学者]&#xff0c;[蓝桥杯] &#x1f4d…

数据结构与算法基础-学习-14-线性表之串

一、串的定义由0-n个字符组成的有限序列。&#xff08;n>0&#xff09;二、串的相关术语1、子串串中任意个连续字符组成的子序列成为该串的子串。2、主串包含子串的串成为主串。3、字符位置字符在序列中的序号为该字符在串中的位置。4、子串位置子串第一个字符在主串中的位置…