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

本篇教程的使用到的技术有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.rhkb.cn/news/326622.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【XR806开发板试用】SPI驱动数码管显示

准备工作 安装repo 创建repo安装目录。 mkdir ~/bin下载repo wget https://storage.googleapis.com/git-repo-downloads/repo -P ~/bin/改变执行权限 chmod ax ~/bin/repo设置环境变量,在~/.bashrc文件的最后输入 export PATH~/bin:$PATH和export REPO_URLhttps://…

redis深入理解之实战

1、SpringBoot整合redis 1.1 导入相关依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId&g…

JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字

前言 在本栏的前面的内容中&#xff0c;我们介绍了线程的创建、Thread 类及常见方法、线程的状态&#xff0c;今天我们来介绍一下关于线程的另一个重点知识——线程安全。 一、线程安全 基本概念&#xff1a; 线程安全的确切定义是复杂的&#xff0c;但我们可以这样认为&…

vue3 antd-vue 超简单方式实现a-table跨页勾选

效果如下&#xff1a; 一、第一种方法 定义一个变量 selectKeysBack 用于维护所有勾选的数据value, 然后用 onSelect 拿到当前操作的数据&#xff0c;以及时候勾选。 这个方法便于拿到后端的数据之后用于回显 1、template <a-tableclass"custom-table-data":da…

类与对象(二)

封装 封装作为面向对象三大特性&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;之一&#xff0c;那如何实现封装性的呢&#xff1f;就又得拿出上面的访问修饰限定符的图 public: 就是在任何地方都可以访问 protected: 涉及子类在介绍继承时详细介绍 default: …

STK12 RPO模块学习 (1)

一、背景介绍 在STK12中&#xff0c;在Astrogator的模块上开发了新的模块&#xff08;Rendezvous and proximity operations)。轨道交会接近通常来说是一个很复杂的过程。RPO实现需要对轨道动力学有一个清晰的理解&#xff0c;并且对于Astrogator模块具备很强的背景和经验&…

【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示 背景需求&#xff1a; 之前的代码吗存在几个问题&#xff0c;最大的问题是不能生成“”长条黑边框”” 【教学类-55-01】20240511图层顺序挑战&#xff08;四格长条纸&#xff09;&#xff08;4*4&#xff09;和“手工纸自制参考图”-CSDN博客文章浏览阅读485次&…

第十篇:数字堡垒:操作系统安全深度解析与实战指南

数字堡垒&#xff1a;操作系统安全深度解析与实战指南 1 *引言 1.1 数字世界的守护者 在遥远的比特海中&#xff0c;有一座名为“操作系统”的数字堡垒&#xff0c;它守护着我们的数据宝藏&#xff0c;确保每一次计算的航行都能安全抵达彼岸。然而&#xff0c;这片海域并非风…

记录:robot_localization传感器数据融合学习

一、参考资料 官方&#xff1a; http://wiki.ros.org/robot_localizationhttp://docs.ros.org/en/noetic/api/robot_localization/html/index.html2015 ROSCon 演讲官方网址&#xff08;youyube上也有这个视频&#xff09; 实践教程 https://kapernikov.com/the-ros-robot_…

深入理解Python的类,实例和type函数

问题起源&#xff1a; class t():pass s1 t() s2 type("Student2",(),{}) isinstance(s1, type), isinstance(s2, type)为什么第一个是false&#xff0c;第二个是true呢 根因定位&#xff1a; 在Python中&#xff0c;一切皆对象&#xff0c;类是对象&#xff0c…

Linux字符设备驱动设计

Linux字符设备驱动设计 概述 驱动的定义与功能 计算机系统中存在着大量的设备&#xff0c; 操作系统要求能够控制和管理这些硬件&#xff0c; 而驱动就是帮助操作系统完成这个任务。 驱动相当于硬件的接口&#xff0c; 它直接操作、 控制着我们的硬件&#xff0c; 操作系统通…

升级Microsoft 365后,SAP GUI中无法打开Excel的解决方案

最近&#xff0c;我们遇到了一个棘手的问题&#xff0c;一位客户在升级到Microsoft 365后&#xff0c;无法在SAP GUI中打开Excel。这个问题不仅影响了工作效率&#xff0c;也给用户的日常操作带来了不便。在本文中&#xff0c;我们将探讨问题的成因&#xff0c;并提供一种解决方…

gin自定义验证器+中文翻译

gin自定义验证器中文翻译 1、说明2、global.go3、validator.go4、eg&#xff1a;main.go5、调用接口测试 1、说明 gin官网自定义验证器给的例子相对比较简单&#xff0c;主要是语法级别&#xff0c;便于入门学习&#xff0c;并且没有给出翻译相关的处理&#xff0c;因此在这里记…

PaddleOCR_PP-Structure

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.15.132 NETMASK255.255.255.0 GATEWAY192.168.15.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

YOLOv8小白中的小白安装环境教程!没一个字废话,看一遍不踩坑!

文章目录 去哪里下代码?怎么下代码?怎么装环境?命令行界面(CLI)指令和Python脚本区别?附录1 conda常用指令附录2 git常用指令附录3 项目代码文件作用去哪里下代码? 下载代码请大家直接去 YOLOv8的官方仓库下载,名字叫 ultralytics,有些镜像网站和个人发的等来历不明的代…

CMakeLists.txt语法规则:foreach 循环基本用法

一. 简介 cmake 中除了 if 条件判断之外&#xff0c;还支持循环语句&#xff0c;包括 foreach()循环、while()循环。 本文学习 CMakeLists.txt语法中的循环语句。 CMakeLists.txt语法中 有两种 循环实现方式&#xff1a;foreach循环与 while循环。 二. CMakeLists.txt语法规则…

解决 SyntaxError: Unexpected token ‘.‘ 报错问题

这个报错一般是编译问题&#xff0c;浏览器的版本过低没通过代码 解决办法&#xff1a; 在package.json文件中加上这个 "browserslist": ["> 1%","last 2 versions","not dead","not ie < 6","Android > 4&…

AI算法工程师课程学习-数学基础-高数1-微积分

基础数学学习目的&#xff1a;为机器学习(尤其是算法)和深度学习打基础。 学习路线&#xff1a;1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。&#xff08;因为自己40多岁年龄了&#xff0c;做了7年的.net开发&#xff0c;后面都一直在做软件…

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序 设计竞赛Problem L. Toxel 与 PCPC II

//sort bug下标 遍历dp. //没修负的bug肯定连续 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],dp[n]; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a>>b;for(int i1;…