使用Docker+Jar方式部署微服务工程(前后端分离)看着一篇就够了

news2024/11/25 18:42:49

本篇教程的使用到的技术有springboot、springcloud、Nacos、Docker、Nginx部署前后端分离访问的微服务。

部署一下Nacos

首先我们需要在服务器中(或者本地部署启动一下Nacos),这里我采用服务器的方式进行部署,这里有一点不一样的是数据源采用MySQL5+的方式进行,替换了原先Nacos中默认的Java数据库方式。

大神总结的Docker安装Naocs文章一

大神总结的Docker安装Nacos文章二

这里简单的做一下说明就是需要在文章一中的数据库配置中格外注意需要将Nacos的数据源显示的指明为MySQL5+,如下图所示。
在这里插入图片描述

打包一下Docker镜像并上传到指定的位置

这里可以直接使用IDEA自带的工具进行打包,打包完成之后直接上传得到的jar包
在这里插入图片描述
在这里插入图片描述

在文件所在的目录,使用后台启动的方式执行jar包

这里仔细分享一下大家如何后台启动的方式执行Fat jar

在Spring Boot应用中,一个常见的方式是将应用打包为一个fat jar(或uber jar),这样可以方便地在不同环境下部署和运行。下面是如何在后台启动这样的jar包以及查看其日志的步骤:

如何后台启动Spring Boot的fat jar

  1. 使用nohup命令启动

    • 在Linux或Unix系统中,你可以使用nohup命令来启动jar包,以确保即使你关闭了终端或断开了SSH连接,程序仍然可以在后台运行。
    • 命令格式如下:
      nohup java -jar yourapp.jar > app.log 2>&1 &
      
    • 这条命令做了几件事:
      • nohup:确保命令在用户登出后继续运行。
      • java -jar yourapp.jar:使用Java运行你的jar包。
      • > app.log:将标准输出重定向到app.log文件。
      • 2>&1:将标准错误也重定向到标准输出(即app.log文件)。
      • &:将进程放到后台执行。
  2. 使用screen或tmux

    • 这些工具可以创建一个虚拟会话,你可以在其中运行应用程序,然后断开连接,应用仍然在后台运行。
    • 使用screentmux,你可以随时重新连接到这个会话来查看应用的输出。

如何查看日志

  1. 直接查看日志文件

    • 如果你按照上面的命令启动应用,日志将被写入到app.log文件中。
    • 你可以使用tail命令查看日志文件的内容:
      tail -f app.log
      
    • 这个命令会持续输出新增到app.log中的日志,非常适合实时监控日志。
  2. 配置Spring Boot的日志设置

    • 你可以在应用的application.propertiesapplication.yml文件中配置日志文件的路径和级别,例如:
      logging.file.name=application.log
      logging.level.root=WARN
      
    • 这样,Spring Boot会自动将日志写入到指定的文件,你也可以用类似tail -f的方式查看这个文件。

这里我采用的是上面nohup命令启动方式。下面简单演示一下启动的命令

启动其中的一个服务
nohup java -jar km-module-base-biz-1.1.1.jar > km-module-base-biz-1.1.1.log 2>&1 &

使用上述命令保证服务可以被重定向到各自的日志中查看。

如何优雅的关闭掉启动的服务

1. 找到运行服务的进程ID(PID)

每个在后台运行的进程都有一个唯一的进程标识号(PID)。你可以使用ps命令结合grep来查找与你的服务相关的PID。假设你的服务名为km-module-base-biz-1.1.1.jar,可以使用如下命令:

ps aux | grep km-module-base-biz-1.1.1.jar

这将列出所有包含服务名的进程。输出通常看起来像这样:

username    1234  0.5  1.2 143036 24508 ?        Ssl  10:31   0:01 java -jar km-module-base-biz-1.1.1.jar

在这里,1234是进程ID。

2. 使用kill命令终止进程

一旦你找到了进程ID,你可以使用kill命令来终止它。如果进程不响应普通的kill命令,你可能需要使用更强力的信号,如SIGKILL(信号编号9):

kill 1234

或者,如果进程不响应,你可以使用:

kill -9 1234

3. 验证进程是否已关闭

执行kill命令后,你可以再次运行ps aux | grep km-module-base-biz-1.1.1.jar来确认进程是否已经被成功终止。

注意事项

  • 平稳关闭:如果你的应用支持平稳关闭(graceful shutdown),尝试首先只用kill(发送SIGTERM)来允许应用完成当前任务并释放资源。
  • 强制关闭:使用kill -9SIGKILL)强制关闭进程,应该是最后的手段,因为它不允许进程进行任何清理操作。

下面展示一下服务启动之后的效果,启动之后会有日志的输出。
在这里插入图片描述
在Naocs上会出现服务启动的实例。
在这里插入图片描述

前端服务演示如何通过Docker+Nginx打包的方式进行执行

前端服务配置地址信息

在这里插入图片描述
打包完成之后会得到对应的dist文件夹。
在这里插入图片描述
将dist文件夹上传到服务器中的对应位置
在这里插入图片描述

编写一下Docker打包文件信息

# 使用官方Nginx镜像作为基础镜像
FROM nginx:alpine

# 将dist目录下的文件复制到容器中的/usr/share/nginx/html目录下
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/conf.d/default.conf


# 暴露80端口
# 这里需要注意的是暴露的端口需要和nginx配置的监听端口一致
EXPOSE 8541

# 使用Nginx运行Vue应用
CMD ["nginx", "-g", "daemon off;"]

配置一下nginx中的配置文件信息

server {
        listen       8541;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
	    add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Headers X-Requested-With;
            add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
            #这里需要注意的是文件的路径需要是真实有效正确的容器中的目录不然会出现500或者404报错
            root   /usr/share/nginx/html/;
            index  index.html index.htm;
                    try_files $uri &uri/ /index.html;

        }
	    location /api/{
                        rewrite ^/api/(.*) /$1 break;
                        proxy_pass http://192.168.0.170:9000;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

执行打包命令

docker build -t front-project .

在这里插入图片描述

执行运行命令

docker run -d -p 8541:8541 front-project

在这里插入图片描述

最后就可以执行访问查看最终的页面效果了

在这里插入图片描述

注意点总结

  1. 首先在执行jar之后需要注意服务器中的Java版本需要和本地开发环境的版本保持一致。
  2. 配置Nacos的时候,如果需要切换不用默认的数据源一定需要在配置文件中指明。
  3. 在配置Nginx监听的时候需要注意将监听的root地址一定要配置和dockerfile打包地址一致不然会出现报错,如果采用微服务的方式访问需要在配置文件中明确正确配置断言的网关地址。

最后说一句(求关注,别白嫖我)

如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
关注公众号:【舒一笑的架构笔记】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 第二十八节 (vue3 事件循环之JS事件循环)

1、什么是事件循环 事件循环就是消息队列,是浏览器渲染主线程的工作方式; 过去将消息队列,简单的分为宏任务 和微任务 两种队列,而对于现在复杂多变的浏览器环境,显然这种处理方式已经不能满足使用,取而代…

如何开通微软必应bing国内竞价广告账户?

微软必应Bing作为全球第二大搜索引擎,凭借其特有的用户群和市场定位,为中国广告主开辟了一片潜力无限的蓝海市场。云衔科技通过专业实力,为广告主提供全方位支持,从开户到代运营,助力企业扬帆起航。 一、微软必应bing…

图的概念、性质和存储与简单遍历

前置知识:树的基本概念及性质 为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!如果在阅读中遇到困难,也可以回到前面章节查阅。 学习目标 掌握图的基本概念掌握图的一些性质 图的概念 基本概念 图 (…

基于Springboot的大学生平时成绩量化管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的大学生平时成绩量化管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三…

【ARM Cortex-M 系列 2.2 -- Cortex-M7 单步调试原理及实现详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 单步调试概述单步执行原理Debug stepping control using the DHCSR 紧接上篇文章 【ARM Cortex-M 系列 2.1 – Cortex-M7 Debug system registers】 单步调试概述 在ARMv7-M架构中,通过使用单步调试(Haltin…

采用java+B/S开发的全套医院绩效考核系统源码springboot+mybaits 医院绩效考核系统优势

采用java开发的全套医院绩效考核系统源码springbootmybaits 医院绩效考核系统优势 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求,以“工作量为基础的考核方案”为核心思想,结合患者满意度、服务质量、技术难度、工作效率、医德医风等管…

电脑快速搜索文件及文件夹软件——Everything

一、前言 Everything是一款由voidtools开发的文件搜索工具,主要运行于Windows操作系统上。它的主要功能是快速、高效地搜索电脑上的文件和文件夹名称。Everything通过利用NTFS文件系统的MFT(主文件表)来索引文件,从而实现几乎实时…

揭秘 HTTP 代理:增强在线活动的安全性和匿名性

HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界,探索它们的优势、应用程序以及最大化其效用的最佳实践。…

4.uniapp+vue3项目使用vuex

文章目录 1. uniappvue3项目使用vuex1.1. main.js引入store1.2. 创建store/index.js1.3. 项目中引用1.4. 开始解决实际问题1.5. vuex和storage的区别 1. uniappvue3项目使用vuex 这篇文章,既是使用的教程,也是用来解决一个实际问题:uView自定…

软件工程期末复习(5)

可行性研究 可行性研究的任务 可行性研究的目的: 用最小的代价,在尽可能短的时间内确定问题是否能够解决。 可行性研究的实质: 就是一次压缩、简化了的系统分析和设计的过程。 可行性研究的路线: 分析和澄清问题定义&#…

在word中创建宏来多级列表的编号不显示的bug

出现问题的示意图如下,可以看出标题前面1.1消失了 第一步:选择开发工具 第二步: 第三步:选择当前文件(创建宏后,方便查找) 第四步: 第五步:打卡VB 第七步&#xf…

汇昌联信:拼多多入驻条件是哪些?

在电商领域,拼多多以其独特的团购模式迅速崛起,吸引了众多商家的目光。想要在拼多多上开店,了解其入驻条件是必不可少的第一步。下面将详细解读拼多多的入驻条件,帮助有意加入的商家们做好准备。 一、企业资质要求 想要成功入驻拼…

人工智能中的概率魔法:解锁不确定性的智慧之钥

在人工智能(AI)的广阔天地中,概率论以其独特的魅力,成为了连接现实世界与智能决策的桥梁。从语音识别到图像识别,从自然语言处理到机器翻译,从智能推荐到自动驾驶,概率论知识在这些领域中发挥着…

SpringCloud 集成 RocketMQ 及配置解析

文章目录 前言一、SpringCloud 集成 RocketMQ1. pom 依赖2. yml 配置3. 操作实体4. 生产消息4.1. 自动发送消息4.2. 手动发送消息 5. 消费消息 二、配置解析1. spring.cloud.stream.function.definition 前言 定义 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力…

文件流-二进制文件(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 建立两个二进制磁盘文件f1.dat,f2.dat,编程实现以下工作: (1)将20个整数(可在程序中初始化),分别存放到两个磁盘文件中,前10个放到f1.dat中&…

C++类和对象下——实现日期类

前言 在学习了类和对象的六大成员函数后,为了巩固我们学习的知识可以手写一个日期类来帮助我们理解类和对象,加深对于其的了解。 默认函数 构造函数 既然是写类和对象,我们首先就要定义一个类,然后根据实际需要来加入类的数据与函…

windows和Linux卸载移动磁盘

文章目录 Linux卸载磁盘target is busy.window卸载磁盘打开事件查看器 Linux卸载磁盘target is busy. #查看有哪些进程访问挂载点 lsof /media/lei/repository/#杀死进程 pkill node window卸载磁盘 #提示 #该设备正在使用中. 请关闭可能使用该设备的所有程序或窗口,然后重试…

【React】redux开发者工具redux-devtools-extension的安装和使用

前言 redux-devtools-extension: 是一个用于Redux的开发者工具扩展。适合用于需要调试和监控Redux应用的状态管理。特点是可以提供实时的状态查看、行动日志和错误检测等 安装 chrome安装redux-devtools-extension 项目中安装并引入redux-devtools-extension yarn add re…

强化学习——马尔可夫奖励过程的理解

目录 一、马尔可夫奖励过程1.回报2.价值函数 参考文献 一、马尔可夫奖励过程 在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ&#xff0c;就可以得到马尔可夫奖励过程&#xff08;Markov reward process&#xff09;。一个马尔可夫奖励过程由 < S , …

C++语言的字符数组

存放字符数据的数组是字符数组&#xff0c;字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。 1. 声明一个字符数组 char c[5]; 2. 字符数组赋值方式 &#xff08;1&#xff09;为数组元素逐一赋值 c[0]H c[1]E c[2]L c[3]L c[4]O &#xff08;2&…