[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务
目录
一、环境准备
1、工具准备
2、虚拟机环境
3、Docker 环境
二、项目准备
1、配置各个模块(微服务)的 Dockerfile
2、配置 docker-compose.yml 文件
3、Maven 打包
4、文件整合并传输
三、微服务部署
1、部署至 Docker
2、访问微服务
四、问题汇总
1、加载、启动很慢
2、没有给 CentOS 安装 jdk8
一、环境准备
1、工具准备
- 虚拟机需要使用:VMware;
- 操作虚拟机需要使用:Xshell、Xftp;
- Linux 部署微服务需要使用:Docker;
- 微服务项目打包需要使用:IDEA、Maven;
- 编辑 Dockerfile、docker-compose.yml 文件需要使用:随便一个编辑器;
2、虚拟机环境
(1)使用 CentOS7 作为项目部署的服务器操作系统
由于访问微服务需要操作系统有端口开放,因此可以采取两种措施:
- 第一种:关闭防火墙;
- 第二种:微服务用到哪些端口,就打开哪些端口;
参考如下内容:https://www.cnblogs.com/ketoli/p/15111625.html
在这里我选择用到端口再进行开放,需要注意的是:每次更新完防火墙配置后,都需要重启防火墙和 Docker。
如上图所示:开启了 10086、8091、8081、8080、8848 端口。
(2)安装 JDK8
- 首先要安装 yum 工具;
yum instll -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
- 使用下面命令直接安装 jdk8
yum install java-1.8.0-openjdk* -y
3、Docker 环境
(1)安装 Docker 并配置镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repoyum makecache fast
(2)安装 docker-ce
yum install -y docker-ce
(3)配置镜像加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<- 'EOF'
{"registry-mirrors": ["https://n0dwemtq.mirror.aliyuncs.com"]
}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
(4)安装 Docker-Compose
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
(6)设置 Docker 开机自动启动
systemctl enable docker
二、项目准备
下面将要部署一个微服务项目,其中包括 3 个微服务:
- gateway 网关;
- order 服务;
- user 服务;
1、配置各个模块(微服务)的 Dockerfile
(1)编写 Dockerfile
- 这里举一个 gateway 模块的 Dockerfile 为例子;
- 其他的模块只需要修改 EXPOSE 暴露的端口即可;
# 指定基础镜像
FROM java:8-alpine
# 将 jar 包复制到容器中
COPY ./app.jar /app.jar
# 暴露端口
EXPOSE 10086
# 入口,java项目的启动命令
ENTRYPOINT java -jar /app.jar
2、配置 docker-compose.yml 文件
Dockerfile 文件构建镜像,那么 docker-compose 文件就是根据镜像构建容器。
需要关注的是:
- 服务名,比如:nacos、user-service;
- build:它会寻找当前 docker-compose 所在目录对应的文件夹,并以文件夹中的内容去构建容器;
- ports:端口号,是服务器端口和docker端口映射;
- restart=always:在容器已经 stop 或 Docker stoped/restarted 的时候才重启容器;
version: "3.2"services:nacos: # 需要将 java 项目中的 application 配置文件中,需要用到这些中间件的地址 localhost,都改为这个服务名 nacos(数据库则是 mysql)image: nacos/nacos-serverenvironment:MODE: standaloneports: - "8848:8848"restart: alwayslogging: driver: "json-file"options: max-size: "100m"user-service: # 与 nacos 注册中心的 name 一致build: ./user-module # 寻找当前 yml 所在目录的文件夹,其中包含 dockerfilerestart: alwayslogging: driver: "json-file"options: max-size: "100m"order-service:build: ./order-modulerestart: alwayslogging: driver: "json-file"options: max-size: "100m"gateway:build: ./gatewayports: - "10086:10086"restart: alwayslogging: driver: "json-file"options: max-size: "100m"
3、Maven 打包
(1)项目结构
- feign-api:整合了 nacos 和 ribbon,但是不需要打包,使用 nacos 的容器代替即可;
- gateway:网关,做了普通的鉴权认证和跨域拦截;
- order-module:order-service 服务;
- user-module:user-service 服务;
(2)pom 文件
pom 文件的编写需要注意 2 点:
- 有 application 启动类的 module,才需要加上 <build>;
- <build> 中统一设置 <finalName> 为 app,使得到的 jar 包名称都是 app,方便书写;
- 以我的项目为例子:feign-api 是做远程调用和负载均衡的,不需要启动类,因此只有它不用 <build>;
(3)修改 application 和 bootstrap 配置文件
- 将数据库 url 中的 ip 都改为 mysql;(或者你用的其他数据库)
- 将配置 nacos 服务发现的地址和统一配置的地址的 ip 都改为 nacos;
- 这是因为实际使用时 ip 肯定不能用本机地址;
- bootstrap:
- application:
- 因为我没用到数据库,所以就不演示数据库的 ip 的修改了;
(4)打包
- 完成前面的 2 个步骤,就可以打包了,直接使用 maven 的 clean + package 命令即可;
- 打完 jar 包后,可以在 target 目录下找到 app.jar;
4、文件整合并传输
(1)将 jar 包放入指定文件夹
- 我们在 docker-compose.yml 中,指定了 user-service 放在 user-module 文件夹;
- 因此 user 的 jar 包要放入 user-module,其他的也一样;
- 下面是整个项目的文件;
(2)传输至 Linux
- 使用 Xftp(或者其他文件传输工具)将 Cloud01 文件夹传输至 Linux;
- 放在哪里可以自己定;
三、微服务部署
1、部署至 Docker
(1)cd 至项目在 Linux 中的位置
- 创建目录使用:mkdir -p /usr/myProject/springcloud/;
- 然后 cd 至含有 docker-compose.yml 的目录下;
(2)使用 docker-compose
- 使用命令:docker compose up -d;(-d 后台运行)
- 其作用是:创建并启动 Container;
注意:
- 我们在 nacos 服务中配置了 image 属性,会自动 pull 该镜像;
- 在 Dockerfile 中引入了 java:8-alpine 基础镜像,也会自动 pull;
- 因此第一次使用会比较久,建议先不加 -d,可以观察创建过程;
(3)可能会遇到的问题
如果我们使用 docker compose up 一次性将所有容器创建并启动,这就会有一个问题:
- nacos 不是第一个启动的话,那么其他服务就无法进行注册。
因此我们有两种选择:
- 第一种:先 compose up nacos 启动并创建 nacos 容器,再 compose up 启动所有容器;
- 第二种:直接 compose up 启动所有容器,再 compose restart [service] [service] 重启除了 nacos 外的服务;
2、访问微服务
(1)访问 nacos
- 我们可以先试试访问 nacos 服务中心;
- 可以发现服务都注册进来了;
(2)向 http://ip:port/xxx 发送请求
- 我这里会从网关发起向 order-service 的查询请求;
- order-service 又会远程服务调用 user-service;
四、问题汇总
1、加载、启动很慢
我遇到的问题是:
- docker compose up 之后,要过好几分钟才能访问 nacos 主页。并且需要等到可以访问 nacos 主页之后,再 restart 其他服务,才能将服务注册到 nacos。
(1)解决方法
考虑到微服务其实会占用很大的内存,所以我将虚拟机的内存增大到 4G 了。
然后部署,服务加载的速度就变得很快了。
2、没有给 CentOS 安装 jdk8
既然要运行 java 项目,那么一个 jdk 也是必不可少的。(我个人就是忘了装 jdk,debug 了数小时没有部署成功)
前文准备虚拟机环境中已有介绍。
相关文章:

[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务
目录 一、环境准备 1、工具准备 2、虚拟机环境 3、Docker 环境 二、项目准备 1、配置各个模块(微服务)的 Dockerfile 2、配置 docker-compose.yml 文件 3、Maven 打包 4、文件整合并传输 三、微服务部署 1、部署至 Docker 2、访问微服务 四…...

阿里面试:让代码不腐烂,DDD是怎么做的?
说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的高并发落地经验? 谈谈你对DDD的理解…...

NoSQL数据库使用场景以及架构介绍
文章目录 一. 什么是NoSQL?二. NoSQL分类三. NoSQL与关系数据库有什么区别四. NoSQL主要优势和缺点五. NoSQL体系框架 其它相关推荐: 系统架构之微服务架构 系统架构设计之微内核架构 鸿蒙操作系统架构 架构设计之大数据架构(Lambda架构、Kap…...

RFID系统提升物流信息管理效率应用解决方案
一、物流仓储管理方法 1、在仓库的进出口处安装RFID读写器,当粘贴RFID标签的电动叉车和货物进入装载区时,RFID读写器会自动检索并记录信息,当它们离开物流配送中心时,入口处的RFID读写器会读取标签信息,并生成出货单&…...

ONNX的结构与转换
ONNX的结构与转换 1. 背景2. ONNX结构分析与修改工具2.1. ONNX结构分析2.2. ONNX的兼容性问题2.3. 修改ONNX模型 3. 各大深度学习框架如何转换到ONNX?3.1. MXNet转换ONNX3.2. TensorFlow模型转ONNX3.3. PyTorch模型转ONNX3.4. PaddlePaddle模型转ONNX3.4.1. 简介3.4…...

vue3中,使用html2canvas截图包含视频、图片、文字的区域
需求:将页面中指定区域进行截图,区域中包含了图片、文字、视频。 第一步,先安装 npm install html2canvas第二步,在页面引入: import html2canvas from html2canvas;第三步,页面使用: 1&…...

后端神器!代码写完直接调试!
Apipost推出IDEA插件非常省时高效,写完代码直接可以进行调试,而且支持生成接口文档,真是后端神器啊! 可以点击下方链接安装更新或在插件商店中搜索安装 下载链接:https://plugins.jetbrains.com/plugin/22676-apipos…...

MATLAB | 万圣节来画个简单的可爱鬼叭!
万圣节要到啦一起来画个可爱鬼吧~ 代码比较的短: 完整代码 figure(Units,normalized,Position,[.2,.1,.52,.72]); axgca;hold on;axis off; ax.DataAspectRatio[1,1,1]; ax.YDirreverse; ax.XLim[0,100]; ax.YLim[0,100]; [X,Y]meshgrid(linspace(0,1,200)); Zsq…...

贪心算法学习------优势洗牌
目录 一,题目 二,题目接口 三,解题思路和代码 全部代码: 一,题目 给定两个数组nums1和nums2,nums1相对于nums2的优势可以用满足nums1[i]>nums2[i]的索引i的数目来描述。 返回nums1的任意排序,使其优…...

音视频rtsp rtmp gb28181在浏览器上的按需拉流
按需拉流是从客户视角来看待音视频的产品功能,直观,好用,为啥hls flv大行其道也是这个原因,不过上述存在的问题是延迟没法降到实时毫秒级延迟,也不能随心所欲的控制。通过一段时间的努力,结合自己闭环技术栈…...

Java 算法篇-深入了解二分查找法
🔥博客主页: 小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍ 目录 1.0 二分查找法的说明 2.0 二分查找实现的多种版本 2.1 二分查找的基础版本 2.2 二分查找的改动版本 2.3 二分查找的平衡版本 2.4 二分查找的官方版本 3.0 二分查找的应用 1…...
Data-Centric Financial Large Language Models
本文是LLM系列文章,针对《Data-Centric Financial Large Language Models》的翻译。 以数据为中心的大语言金融模型 摘要1 引言2 背景3 方法4 实验5 结论和未来工作 摘要 大型语言模型(LLM)有望用于自然语言任务,但在直接应用于…...

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面并携带参数
【关键字】 服务卡片、卡片跳转不同页面、卡片跳转页面携带参数 【写在前面】 本篇文章主要介绍开发服务卡片时,如何实现卡片点击跳转不同页面,并携带动态参数到js页面。在此篇文章“服务卡片 API6 JSUI跳转不同页面”中说明了如果跳转不同页面…...

SQL server数据库端口访问法
最近数据库连接,也是无意中发现了这个问题,数据库可根据端口来连接 网址:yii666.com< 我用的是sql2014测试的,在安装其他程序是默认安装了sql(sql的tcp/ip端口为xxx),服务也不相同,但是由于比较不全,我…...
深孔枪钻厂家,科研管理系统思路
序号 名称 参数及技术指标 (一)系统性能要求 1.系统界面:支持中英文界面自由切换。 2. 系统兼容性:支持主流浏览器,如:IE11 以上、 360 安全浏览器、Firefox、Google Ch…...

【论文阅读笔记】GLM-130B: AN OPEN BILINGUAL PRE-TRAINEDMODEL
Glm-130b:开放式双语预训练模型 摘要 我们介绍了GLM-130B,一个具有1300亿个参数的双语(英语和汉语)预训练语言模型。这是一个至少与GPT-3(达芬奇)一样好的100b规模模型的开源尝试,并揭示了如何成功地对这种规模的模型进行预训练。在这一过程中࿰…...
Object常用方法
Object常用方法目录 1. equals(Object obj): 2. toString(): 3. hashCode(): 4. getClass(): 5. notify() 和 notifyAll(): 6. wait() 和 wait(long timeout): 7. clone(): 8. fina…...

【VR开发】【Unity】【VRTK】2-关于VR的基础知识
【概述】 在VRTK的实操讲解之前,本篇先介绍几个重要的VR认识。 【VR对各个行业的颠覆】 如果互联网几乎把所有行业都重做了一遍,VR在接下来的几年很可能再把现有的行业都重做一遍,包括但不限于教育,房地产,零售&…...

jeecg-uniapp 转成小程序的过程 以及报错 uniapp点击事件
uniapp 点击事件 tap: 单击事件 confirm: 回车事件 blur:失去焦点事件 touchstart: 触摸开始事件 touchmove: 触摸移动事件。 touchend: 触摸结束事件。 longpress: 长按事件。 input: 输入框内容变化事件。 change: 表单元素值变化事件。 submit: 表单提交事件。 scroll: 滚动…...
Django的静态文件目录(路径)如何配置?
通常用下面的三条语句配置Django的静态文件目录 STATICFILES_DIRS [os.path.join(BASE_DIR, static)] STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, /static)那么这三条语句分别的作用是什么呢? 请参考博文 https://blog.csdn.net/wenhao_ir/articl…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...