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

使用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.lryc.cn/news/348195.html

相关文章:

  • 红外遥控和LCD1602
  • 房屋出租管理系统需求分析及功能介绍
  • 高精度模拟算法
  • Ansible简介版
  • 卷积通用模型的剪枝、蒸馏---蒸馏篇--RKD关系蒸馏(以deeplabv3+为例)
  • AVL树的完全指南:平衡与性能
  • itext7 PDF添加水印,获取页面高度,添加到页面右上角
  • docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口
  • RSA非对称加密解密,前端公钥加密后端私钥解密
  • Nginx-01-Nginx 是什么? 能做什么?
  • 最大数字——蓝桥杯十三届2022国赛大学B组真题
  • 查看微信小程序主包大小
  • B树与B+树的奥秘:原理解析与性能
  • Unity组件入门篇目录
  • 【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析
  • kubeflow文档-介绍与架构
  • 传输层的TCP流量控制比数据链路层作用范围更广
  • CSS表格
  • 东芝移动硬盘数据恢复方法有哪些
  • FullCalendar日历组件集成实战(1)
  • wps
  • 【软设】常见易错题汇总
  • 安全数据交换系统哪个好?该如何选型?
  • 用matplotlib制作代码和色块
  • centos无法tab补全至文件
  • 大模型训练框架DeepSpeed使用入门(1): 训练设置
  • 自定义类型——结构体、枚举和联合
  • Windows11系统安装Mysql8之后,启动服务net start mysql报错“服务没有响应控制功能”的解决办法
  • WIFI模块的AT指令联网数据交互--第十天
  • 设计模式Java实现-迭代器模式