当前位置: 首页 > news >正文

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微服务轻松部署服务器

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

Wordpress站点通过修改.htaccess 设置重定向实现强制 https 访问

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

人大金仓助力国家电网调度中心培养国产数据库专家人才

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

什么是增强型SSL证书?购买一张需要多少钱?

增强型SSL证书是一种提供更高级别安全验证与用户信任度的网络安全工具&#xff0c;也被称为EV证书。相较于DV&#xff08;域名验证&#xff09;和OV&#xff08;组织验证&#xff09;证书&#xff0c;它通过严格的身份核实流程确保网站所有者的合法性和真实性。 首先&#xff0…...

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的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…...

RPM与DNF的操作实践

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

车道线检测之LaneNet

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

MySQL连接数不足导致服务异常GetConnectionTimeoutException

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

软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01

一、创建型设计模式一览 二、创建型设计模式 2-1、创建型设计模式的概念 一个类创建型模式使用继承改变被实例化的类&#xff1b; 一个对象创建型模式将实例化委托给另一个对象。 对应java的new一个对象。 2-2、简单工厂模式&#xff08;静态工厂方法&#xff09; 简单工厂…...

Matlab 双目相机标定(内置函数)

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

【博客7.4】缤果Qt5_TWS串口调试助手V2.0 (高级篇)

超级好用的Qt5_TWS耳机串口调试助手 开发工具: qt-opensource-windows-x86-5.14.2 (编程语言C) 目录 前言 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 三、获取 >> 源码以及Git记录&#xff1a; 总结 前言 串口调试助手支持常用的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经验分享+复盘

计算机专业的同学真的别想的太天真&#xff01; 相比于其他专业&#xff0c;计算机专业的同学其实还是很有优势的 但是现在随着计算机专业的同学越来越多&#xff0c;找工作的困难程度以及学历自然而然被卷起来了 以前的算法岗基本要求在本科以上&#xff0c;现在基本都是非92研…...

低代码与数字化工具:重塑软件开发的新范式

随着信息技术的飞速发展&#xff0c;软件开发已成为推动数字化转型的核心力量。在这个变革的时代&#xff0c;低代码与数字化工具逐渐崭露头角&#xff0c;它们不仅简化了开发过程&#xff0c;还大大提高了开发效率&#xff0c;成为推动软件开发领域变革的重要力量。 低代码&am…...

如何使用 ArcGIS Pro 生成TIN

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

你真的会做抖音小店吗?你做抖店的方法是正确的吗?教学分享

大家好&#xff0c;我是电商花花。 新的一年&#xff0c;不少做抖店的商家都会产生一个疑问&#xff0c;2024年抖音小店无货源还能继续做吗&#xff1f; 做无货源模式还会被处罚吗&#xff1f; 先说答案&#xff0c;2024年抖音小店无货源能做&#xff0c;不仅能做且仍然是抖音…...

ssh免密登陆更换目标主机后无法连接

在进行hadoop分布式环境搭建时&#xff08;三台机&#xff0c;master&#xff0c;slave1&#xff0c;slave2&#xff09;&#xff0c;后期slave2系统出现问题&#xff0c;更换新机后&#xff0c;master与slave2文件传输失败&#xff1a; 以为是秘钥过期的问题&#xff0c;更换…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...