Java微服务轻松部署服务器
我们在日常开发微服务之后需要再服务器上面部署,那么如何进行部署呢,先把微服务的各个服务和中间件以及对应的端口列举出来,都打包成镜像,以及前端代码部署的nginx,使用docker-compose启动,访问服务器nginx端口就部署完成了,大致如下
1.首先需要对多个服务进行打成jar包放到服务器上
微服务一般maven文件有一个父类的pom.xml,需要将pom.xml删除在子类加上,不然会找不到主类
<packaging>jar</packaging> <!--打包成jar包-->
在maven的插件中配置如下
就是repackage这个配置,父类删除都加到子类中,之后右键maven的选项
点击package进行打包,打包成功之后会显示jar包的路径,可以使用java-jar命令测试能不能跑起来,没出错就可以了
2.制作服务镜像,成功会一个tar的docke镜像包,可转移
将jar包放到linux中/dabaomao/my-images/这个目录中,测试一下java-jar能不能跑
如果需要的话可以加上8080端口访问,镜像内部为映射端口
java-jar -Dserver.port=8080 jar包名称
之后在创建一个DockerFile文件,注意没有前缀
# 使用一个基础镜像
FROM openjdk:8-jdk-alpine
# 将jar1.jar复制到镜像中的工作目录
# COPY jar1.jar /my-images/jar1.jar 我们已经移到了暂时不需要,注释掉
# 设置工作目录
WORKDIR /dabaomao/my-images
# 暴露端口
EXPOSE 18080
# 设置时区
ENV TZ=Asia/Shanghai
# 运行jar文件
CMD ["java", "-jar", "jar1.jar"]
之后返回/dabaomao目录,执行命令,创建镜像my-image
docker build -t my-image:1.0 /dabalmao/my-images/
之后会出现下载进度,成功之后就可以启动镜像容器myjar
docker build -t <镜像名称>:<标签> <Dockerfile路径>
docker run -d -p --name myjar 8080:18080 my-image:1.0
注意18080是我们程序的jar包对外的端口,也就是映射端口,是springboot的yml设置的,属于映射端口,需要输入真正端口8080访问,上面java-jar同理
之后使用docker ps查看容器是否存在即可
3.使用docker-compose,同时启动
# docker-compose.yml 文件
version: '3' # 指定 Docker Compose 的版本
# 定义 MySQL 服务
services:#自己服务jar包的镜像myjar:image: my-imgae:1.0 #自定义镜像名称container_name: my-mysql # 指定容器的名字environment: #设置时区- TZ=Asia/Shanghaiports:- "18080:18080"networks: # 指定网络- network1 # 将服务连接到network网络上mysql:# 使用官方的 MySQL 镜像image: mysql:5.7# 设置环境变量,用于配置 MySQLenvironment:MYSQL_ROOT_PASSWORD: rootpasswordcontainer_name: my-mysql # 指定容器的名字# 暴露端口 3306,供外部访问ports:- "3306:3306"# 定义数据卷,用于持久化 MySQL 数据库文件volumes:- mysql_data:/var/lib/mysqlrestart: always # 容器退出时总是重启networks: # 指定网络- network1 # 将服务连接到network网络上redis:# 使用官方的 Redis 镜像image: redis:latest# 暴露端口 6379,供外部访问ports:- "6379:6379"container_name: my-redis # 指定容器的名字restart: always # 容器退出时总是重启networks: # 指定网络- network1 # 将服务连接到network网络上nacos:# 使用官方的 Nacos 镜像image: nacos/nacos-server:latest# 暴露端口 8848,供外部访问ports:- "8848:8848"container_name: my-nacos # 指定容器的名字restart: always # 容器退出时总是重启networks: # 指定网络- network1 # 将服务连接到network网络上# 定义网络,所有服务都使用同一个自定义网络
networks: # 定义网络network1: # 定义一个名为network的网络
注意,启动顺序要先启动依赖配置服务,在启动业务服务,建议写两个docker-compose文件先启动mysql,redis中间件的容器,再启动各个服务,还有就是depends_on:这个只能决定服务启动顺序,不能保证一个服务启动完再启动下一个服务
4.包含nginx流量网关也可以使用docker部署,可以实现多个端口负载均衡,nginx内部一般用于启动前端代码进行访问
使用run直接期待nginx(不推荐)
docker run --name nginx -it -d -p 80:80 nginx:latest /bin/bash
部署前端代码,进入目录conf/nginx.conf,打开这个文件,找到这里
server {# 前端程序运行端口# 注释:前端程序运行端口listen 80;# 前端程序运行ip# 注释:前端程序运行ipserver_name localhost;# 前端代码,vue使用dist,需要index.html会开头# 注释:前端代码,vue使用dist,需要index.html会开头root /usr/share/nginx/html;# 加载配置文件以使用默认服务器块。# Load configuration files for the default server block.# 注释:加载配置文件以使用默认服务器块。include /etc/nginx/default.d/*.conf;location / {proxy_pass http://jar;#通过代理转到jar进行负载均衡}error_page 404 /404.html;location = /40x.html {# 如果请求的错误页面是404,则返回404.html文件。# 如果请求的错误页面是40x.html,则不做任何处理。# 注释:如果请求的错误页面是404,则返回40x.html文件。# 如果请求的错误页面是50x.html,则不做任何处理。}error_page 500 502 503 504 /50x.html;location = /50x.html {# 如果发生5xx错误,例如500内部服务器错误,则返回50x.html文件。# 如果请求的错误页面是50x.html,则不做任何处理。# 注释:如果发生错误,例如内部服务器错误,则返回5xx.html文件。}
}
Upstream jar{
#负载均衡server 192.168.30.137:18080server 192.168.30.137:18081
}
这样就绑定成功了,前端端口为80,可以访问后端18080和18081的端口api,并是轮训的方式
不只是轮训,权重的话如下,修改完成后记得重启
Upstream jar{
#负载均衡
#后端服务端口server 192.168.30.137:18080 weight=10server 192.168.30.137:18081 weight=5
#根据概率权重为2:1
}
之后再docker-compose启动的时候也加上
# docker-compose.yml 文件
version: '3' # 指定 Docker Compose 的版本# 定义 Nginx 服务
services:nginx:# 使用官方的 Nginx 镜像image: nginx:latest# 设置容器的工作目录working_dir: /usr/share/nginx/html# 暴露端口 80,供外部访问container_name: nginx # 指定容器的名字ports:- "80:80"# 定义数据卷,用于持久化 Nginx 配置和静态文件volumes:- ./nginx.conf:/etc/nginx/nginx.conf:ro # 宿主机上的 nginx.conf 文件- ./html:/usr/share/nginx/html:ro # 宿主机上的 HTML 目录restart: on-failure # 容器退出时,如果是因为错误导致的,则重启容器restart: always # 总是在容器退出时重启容器networks: # 指定网络- network1 # 将服务连接到network网络上networks: # 定义网络network1: # 定义了一个名为network的网络
之后nginx进行扩容gateway的地址,访问nginx的对外端口即可
大致就这些环节了,如果服务部署在多个服务器那么需要使用k8s进行集中管理,哪个环节出错可以使用gpt或者博客了解
相关文章:

Java微服务轻松部署服务器
我们在日常开发微服务之后需要再服务器上面部署,那么如何进行部署呢,先把微服务的各个服务和中间件以及对应的端口列举出来,都打包成镜像,以及前端代码部署的nginx,使用docker-compose启动,访问服务器nginx…...

Wordpress站点通过修改.htaccess 设置重定向实现强制 https 访问
要在WordPress站点上通过修改.htaccess文件实现强制HTTPS访问,您可以按照以下步骤进行操作: 登录到WordPress站点管理后台。 在文件管理器或通过FTP访问网站根目录,找到并打开名为 .htaccess 的文件。 在打开的文件中添加以下代码…...

人大金仓助力国家电网调度中心培养国产数据库专家人才
近日,为进一步提升调度自动化安全可靠水平,提高电网数据应用效能,人大金仓助力国家电网调度中心培养国产数据库专家人才。 调度自动化系统拥有海量电网数据资源,是支撑电网安全经济优质运行的重要保障。数据库是调度自动化系统稳定运行的基石之一,其结构严谨、运行稳定、扩展灵…...

什么是增强型SSL证书?购买一张需要多少钱?
增强型SSL证书是一种提供更高级别安全验证与用户信任度的网络安全工具,也被称为EV证书。相较于DV(域名验证)和OV(组织验证)证书,它通过严格的身份核实流程确保网站所有者的合法性和真实性。 首先࿰…...

C++:函数传参到函数执行结束发生了什么
首先要明确两个概念 函数实参的入栈从右向左栈区从高地址向低地址偏移 接下来看下面一段代码 void fun(int a,int b,int c){std::cout<<&a<<" "<<&b<<" "<<&c<<std::endl; } int main(){fun(1,2,3); }…...

QT中dumpcpp以及dumpdoc使用
qt中调用COM的方式方法有四种,参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev): 在安装好了的qt电脑上,通过powershell窗口来实现,powershell比cmd要…...

RPM与DNF的操作实践
这几课有三个目标: 第一步:先配置软件源 跳转到yum.repos.d目录,用vim创建一个openeuler_x84_64.repo文件。这个文件就是我们将会用到的软件源。 我们在里面添加这些东西,保存并退出即可。 然后,我们用yum list all就…...

车道线检测之LaneNet
论文:Towards End-to-End Lane Detection: an Instance Segmentation Approach Github:https://github.com/MaybeShewill-CV/lanenet-lane-detection?tabreadme-ov-file 论文提出一种车道线检测网络LaneNet,该网络以enet为主干网络结构&…...

MySQL连接数不足导致服务异常GetConnectionTimeoutException
文章目录 场景复现解决方案一、调整连接数二、优化程序 场景复现 已经上线正常运行的项目突然很多功能无法使用,查看程序日志发现MySQL报错,异常信息: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.Ge…...

软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01
一、创建型设计模式一览 二、创建型设计模式 2-1、创建型设计模式的概念 一个类创建型模式使用继承改变被实例化的类; 一个对象创建型模式将实例化委托给另一个对象。 对应java的new一个对象。 2-2、简单工厂模式(静态工厂方法) 简单工厂…...

Matlab 双目相机标定(内置函数)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 相机标定的目的就是要找到从世界坐标转换为图像坐标所用到的投影P矩阵各个系数(即相机的内参与外参)。具体过程如下所述: 1、首先我们需要获取一个已知图形的图像(这里我们使用MATLAB所提供的数据)。 2、找到同…...

【博客7.4】缤果Qt5_TWS串口调试助手V2.0 (高级篇)
超级好用的Qt5_TWS耳机串口调试助手 开发工具: qt-opensource-windows-x86-5.14.2 (编程语言C) 目录 前言 一、软件概要: 二、软件界面: 1.App演示 三、获取 >> 源码以及Git记录: 总结 前言 串口调试助手支持常用的50bps - 10M…...

CSS案例-4.padding导航栏练习
效果 相关数据: 上边框:3px,颜色#ff8500 下边框:1px,颜色#edeef0 背景颜色:#fcfcfc 高度:41px 内边距20px 字体颜色#4c4c4c 知识点 盒子边框border 属性 作用 border-width 定义边框粗细,单位px border-style 边框的样式 border-color 边框颜色 边框样式...
5.1.4.2、【AI技术新纪元:Spring AI解码】Llama2 Chat
Llama2 Chat Meta 的 Llama 2 Chat 是 Llama 2 系列大型语言模型的一部分。它在基于对话的应用程序中表现出色,参数规模范围从 70 亿到 700 亿不等。利用公共数据集和超过 100 万次人类注释,Llama Chat 提供了上下文感知的对话。 通过从公共数据源获取的 2 万亿标记进行训练…...
后台发送GET/POST方法
前言: 1,get请求 2,post请求 3,post,get通用方法 4,其他的get,post写法 正文: 1,get请求 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import or…...

计算机考研|双非一战135上岸,408经验分享+复盘
计算机专业的同学真的别想的太天真! 相比于其他专业,计算机专业的同学其实还是很有优势的 但是现在随着计算机专业的同学越来越多,找工作的困难程度以及学历自然而然被卷起来了 以前的算法岗基本要求在本科以上,现在基本都是非92研…...
低代码与数字化工具:重塑软件开发的新范式
随着信息技术的飞速发展,软件开发已成为推动数字化转型的核心力量。在这个变革的时代,低代码与数字化工具逐渐崭露头角,它们不仅简化了开发过程,还大大提高了开发效率,成为推动软件开发领域变革的重要力量。 低代码&am…...

如何使用 ArcGIS Pro 生成TIN
三角网是一种常用于表示地表地形的数字地球模型(DEM)方式,我们可以通过 ArcGIS Pro 将等高线和高程点转换为TIN,这里为大家介绍一下转换方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的高…...

你真的会做抖音小店吗?你做抖店的方法是正确的吗?教学分享
大家好,我是电商花花。 新的一年,不少做抖店的商家都会产生一个疑问,2024年抖音小店无货源还能继续做吗? 做无货源模式还会被处罚吗? 先说答案,2024年抖音小店无货源能做,不仅能做且仍然是抖音…...

ssh免密登陆更换目标主机后无法连接
在进行hadoop分布式环境搭建时(三台机,master,slave1,slave2),后期slave2系统出现问题,更换新机后,master与slave2文件传输失败: 以为是秘钥过期的问题,更换…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...