Java微服务轻松部署服务器

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

1.首先需要对多个服务进行打成jar包放到服务器上

微服务一般maven文件有一个父类的pom.xml,需要将pom.xml删除在子类加上,不然会找不到主类

就是repackage这个配置,父类删除都加到子类中,之后右键maven的选项

点击package进行打包,打包成功之后会显示jar包的路径,可以使用java-jar命令测试能不能跑起来,没出错就可以了

2.制作服务镜像,成功会一个tar的docke镜像包,可转移

将jar包放到linux中/dabaomao/jar1/这个目录中,测试一下java-jar能不能跑

如果需要的话可以加上8080端口访问,镜像内部为映射端口

java-jar -Dserver.port=8080 jar包名称

之后在创建一个DockerFile文件,注意没有前缀

# 使用一个基础镜像
FROM openjdk:8-jdk-alpine
# 将jar1.jar复制到镜像中的工作目录
COPY jar1.jar /jar/jar1.jar
# 设置工作目录
WORKDIR /jar
# 暴露端口
EXPOSE 18080
# 设置时区
ENV TZ=Asia/Shanghai
# 运行jar文件
CMD ["java", "-jar", "jar1.jar"]

之后返回/dabaomao目录,执行命令

docker build jar1 -t jar1:v1

之后会出现下载进度,成功之后就可以启动镜像了

docker run -d -p --name myjar 8080:18080 jar1:v1

注意18080是我们程序的jar包对外的端口,也就是映射端口,是springboot的yml设置的,属于映射端口,需要输入真正端口8080访问,上面java-jar同理

之后使用docker ps查看容器是否存在即可

3.使用docker-compose,同时启动
# docker-compose.yml 文件

version: '3'  # 指定 Docker Compose 的版本

# 定义 MySQL 服务
services:
  mysql:
    # 使用官方的 MySQL 镜像
    image: mysql:5.7
    # 设置环境变量,用于配置 MySQL
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
    container_name: my-mysql # 指定容器的名字
    # 暴露端口 3306,供外部访问
    ports:
      - "3306:3306"
    # 定义数据卷,用于持久化 MySQL 数据库文件
    volumes:
      - mysql_data:/var/lib/mysql
    restart: 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文件,还有就是depends_on:这个只能决定服务启动顺序,不能保证一个服务启动完再启动下一个服务
4.包含nginx流量网关也可以使用docker部署,可以实现多个端口负载均衡,nginx内部一般用于启动前端代码进行访问
docker run --name nginx -it -d -p 80:80 nginx:latest /bin/bash

进入目录conf/nginx.conf,打开这个文件,找到这里

server {
    # 前端程序运行端口
    # 注释:前端程序运行端口
    listen       80;
    # 前端程序运行ip
    # 注释:前端程序运行ip
    server_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:18080
    server 192.168.30.137:18081
}

这样就绑定成功了,前端端口为80,可以访问后端18080和18081的端口api,并是轮训的方式

不只是轮训,权重的话如下,修改完成后记得重启

Upstream jar{
#负载均衡
    server 192.168.30.137:18080 weight=10
    server 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或者博客了解

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

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

相关文章

linux板子vscode gdb 远程调试

板子:hi3556v200 交叉编译工具:arm-himix200-linux 主机:win10虚拟机的ubuntu16.4 gdb:gdb-8.2.tar.gz 1.在ubuntu交叉编译gdb(Remote g packet reply is too long解决) 建议修改gdb8.2/gdb目录下面的remote.c解决…

16.WEB渗透测试--Kali Linux(四)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:15.WEB渗透测试--Kali Linux(三)-CSDN博客 1.crunch简介与使用 C…

docker实战(3)

1, jdk17版本的dockerfile FROM eclipse-temurin:17-jre ADD ./target/ods-poc-0.0.1-SNAPSHOT.jar /home/app/app.jar WORKDIR /home/app ENV TZ Asia/Shanghai ENTRYPOINT ["java","-jar","/home/app/app.jar"] EXPOSE 8083dockerfile 1, …

神策分析 Copilot 成功通过网信办算法备案,数据分析 AI 化全面落地

近日,神策数据严格遵循《互联网信息服务深度合成管理规定》,已完成智能数据问答算法备案。该算法基于大模型技术,专注于为客户提供数据指标查询和数据洞察方面的专业回答。 神策分析 Copilot 运用神策数据智能数据问答算法,聚焦分…

uni app 打肉肉(打飞机)小游戏

都给老婆和孩子写了 合十 钓鱼了&#xff0c;给自己写个打飞机吧。没找飞机怪兽的图片。就用馒头和肉肉代替了。有问题不要私信我。自己改哈 <template><view class"page_main"><view class"contentone"><canvas class"canvas…

【Session】Tomcat Session 集群

设备 nginx&#xff1a;192.168.67.11 tomcat1&#xff1a;192.168.67.12 tomcat2&#xff1a;192.168.67.13安装nginx &#xff08;192.168.67.11&#xff09; #关闭防火墙和安全机制 [roottest1 ~]# systemctl stop firewalld [roottest1 ~]# setenforce 0#安装epel源 [ro…

iOS面试题锦集

1. 问&#xff1a;一张图片所占内存大小跟什么有关&#xff1f; 图片所占内存大小&#xff0c;与图片的宽高有关 我们平时看到的png、jpg、webp这些图片格式&#xff0c;其实都是图片压缩格式。通过对应的算法来优化了大小以节省网络传输与本地保存所需的资源。 但是当我们加…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

【PTA】​L1-034 点赞(C++)

题目链接&#xff1a; L1-034 点赞 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结果…

git下载及基础

git学习教程&#xff1a;【【GeekHour】一小时Git教程】 https://www.bilibili.com/video/BV1HM411377j/?share_sourcecopy_web&vd_source1a32dd27a726236a74603cf06b7302aa 1. 下载 官网&#xff1a;https://git-scm.com/ 终端输入 git -v 能看到版本信息表示安装成功…

最新开源解密版TwoNav网址导航系统源码

源码简介 2024最新开源解密版TwoNav网址导航系统源码去授权破解版 内置二十多套主题模板。 已去授权&#xff0c;最新开源解密版。TwoNav 是一款开源的书签&#xff08;导航&#xff09;管理程序&#xff0c;使用PHP SQLite 3开发&#xff0c;界面简洁&#xff0c;安装简单&…

【MySQL】4. 表的操作

表的操作 1. 创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c…

springcloud:4.1 GateWay

概述 Gateway 简介 Spring Cloud Gateway基于Spring 5.0、SpringBoot 2.0和Project Reactor等技术开发 旨在为微服务架构提供一种简单有效的、统一的API路由管理方式&#xff0c;并为微服务架构提供安全、监控、指标和弹性等功能 其目标是替代Zuul特点 易于编写谓词和过滤器&…

1.2 课程架构介绍:STM32H5 芯片生命周期管理与安全调试

1.2 课程架构介绍&#xff1a;STM32H5 芯片生命周期管理与安全调试 下面开始学习课程的第二节&#xff0c;简单介绍下STM32H5芯片的生命周期和安全调试&#xff0c;具体课程大家可以观看STM32官方录制的课程&#xff0c;链接&#xff1a;1.2. 课程架构介绍&#xff1a;STM32H5…

免费阅读篇 | 芒果YOLOv8改进109:注意力机制SimAM:用于卷积神经网络的简单、无参数注意力模块

免费阅读篇|芒果YOLOv8改进109&#xff1a;注意力机制篇SimAM&#xff1a;用于卷积神经网络的简单、无参数注意力模块 &#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#x…

【AIGC调研系列】通义灵码与copilot的对比

通义灵码与GitHub Copilot的对比主要集中在几个方面&#xff1a;代码编写能力、免费性、操作界面和适配性。 首先&#xff0c;在代码编写能力上&#xff0c;虽然GitHub Copilot在整体上要强于通义灵码&#xff0c;但通义灵码的能力也不算弱&#xff0c;并且在某些特定的小类任…

外卖平台订餐流程架构的实践

当我们想要在外卖平台上订餐时&#xff0c;背后其实涉及到复杂的技术架构和流程设计。本文将就外卖平台订餐流程的架构进行介绍&#xff0c;并探讨其中涉及的关键技术和流程。 ## 第一步&#xff1a;用户端体验 用户通过手机应用或网页访问外卖平台&#xff0c;浏览菜单、选择…

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

stm32-定时器输出比较PWM

目录 一、输出比较简介 二、PWM简介 三、输出比较模式实现 1.输出比较框图(以通用定时器为例) 2.PWM基本结构 四、固件库实现 1.程序1&#xff1a;PWM呼吸灯 2.程序2&#xff1a;PWM驱动直流电机 3.程序3&#xff1a;控制舵机 一、输出比较简介 死区生成和互补输出一般…

计算机网络——物理层(奈氏准则和香农定理)

计算机网络——物理层&#xff08;奈氏准则和香农定理&#xff09; 失真码间串扰奈氏准则&#xff08;奈奎斯特定理&#xff09;极限数据率 噪声信噪比香农定理奈氏准则和香农定理的区别 前面我们已经了解一些数据通信的基本知识&#xff0c;没有看过上一篇得小伙伴可以点击这里…