Java微服务轻松部署服务器

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

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

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

<packaging>jar</packaging> <!--打包成jar包-->

在maven的插件中配置如下 

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

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

接下来就是部署了,可视化官网1Panel - 现代化、开源的 Linux 服务器运维管理面板,工作一般用这个,今天是从零开始部署

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

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

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

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

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

 # 使用一个基础镜像
FROM openjdk:8
# 将jar1.jar复制到镜像中的工作目录
COPY jar1.jar /my-images/jar1.jar 
# 设置工作目录
WORKDIR /dabaomao/my-images
# 暴露端口
EXPOSE 18080 #必须服务端口一致
#定义时区参数
ENV TZ=Asia/Shanghai
# 设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 运行jar文件
CMD java -jar api-0.0.1-SNAPSHOT.jar

之后返回/dabaomao目录,执行命令,创建镜像my-image

docker build -t my-images:1.0 路径

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

docker run -d -p 8080:18080 my-image:1.0
docker run -it -d --name my-image my-image:1.0

将镜像打包

docker save 镜像id > /dabaimao/my-image.tar my-image:1.0

也可以加载部署到多个服务器上

docker load < /dabaimao/my-image.tar

注意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/Shanghai
    ports:
      - "18080:18080"
    networks: # 指定网络
      - network1 # 将服务连接到network网络上
  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文件先启动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
    # 注释:前端程序运行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
}

注意:在处理高并发场景时,使用本地(127.0.0.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或者博客了解

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
全套微服务架构,视频学习java微服务架构,包括如下 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows 比较 007安装 Linux 008Linux 远程控制管理 009Linux 目录结构 010操作文件目录 011系统管理命令 012开关机命令 013压缩命令 014Linux 编辑器 015修改数据源 016常用 APT 命令 017Linux 用户和组管理 018查看目录和文件的权限 019更改操作权限 020安装 Java 021安装 Tomcat 022安装 MySQL 023部署项目 第3章 Docker实战开发 042设置镜像标签 024Docker 简介 025Docker 功能特点 026Docker 系统架构 027Docker 安装 028第一个 Docker 应用程序 029运行交互式的容器 030后台运行与停止容器 031Docker 客户端帮助命令 032运行 Web 容器 033指定 Web 容器映射端口 034查看容器进程 035查看容器状态 036批量移除容器 037Docker Hub 镜像仓库 038获取镜像 039查找镜像 040更新镜像 041创建和移除镜像 043安装 Tomcat 044安装 MySQL 045部署项目 046数据卷简介 047创建数据卷 048备份数据卷 049恢复数据卷 050Docker Compose-安装 051Docker Compose-使用 第4章 使用 GitLab 托管代码 055GitLab简介 056GitLab 安装 057GitLab 设置 058GitLab 账户管理 059GitLab 使用-HTTP 060GitLab 使用-SSH 第5章 Spring Boot 061Spring简史 062 Spring Boot 简介 063 第一个 Spring Boot 应用程序 064 Spring Boot 自定义 Banner 065 Spring Boot 配置 066 Spring Boot Starter POM 067 Spring Boot 日志配置 第6章 集成 MyBatis 068Thymeleaf简介 069 第一个 Thymeleaf 模板页 070 集成 Druid 数据源 071 集成 TkMyBatis 简化 MyBatis 操作 072 集成 PageHelper 分页插件 073 使用 MyBatis Maven Plugin 自动生成代码 074 集成 MyBatis-测试查询 第7章 项目实战 075项目简介 076 创建依赖管理项目 077 创建通用工具项目 078 创建数据库管理项目 079 创建领域模型项目 080 创建管理后台接口项目 081 创建管理后台实现项目 082 为什么要使用 Dubbo 083 再谈微服务-背景介绍 084 再谈微服务-面向服务架构与微服务架构 085 再谈微服务-服务框架对比 1 085 再谈微服务-服务框架对比 2 086 再谈微服务-RPC 对比 REST 087 Dubbo 简介 088 Dubbo 服务治理 089 Dubbo 组件角色 090 Zookeeper 简介 091 Zookeeper 应用举例 092 Zookeeper 集群模式 093 Dubbo Admin 管理控制台 094 系统后台管理-修改所需依赖 095 服务提供者 096 服务消费者 097 测试 JRebel 热部署 098 登录页 099 首页1 099 首页2 100 使用 thymeleaf 模板 101 使用 iframe 展示功能页 102 频道管理功能-列表页布局 103 新增频道 104 频道列表 105 选择父级频道1 105 选择父级频道2 106 表单页的树控件 107 列表页的树表格 108 FastDFS 分布式文件系统简介 109 FastDFS 分布式文件系统安装 110 文章管理功能-改造树控件1 110文章管理功能-改造树控件2 111 文章管理功能-新增文章 112 文章管理功能-使用 PageHelper 进行分页查询 113 文章管理功能-前端 Datatable 控件分页处理1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白猫~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值