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

[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 中,指定了 user-service 放在 user-module 文件夹;
  • 因此 user 的 jar 包要放入 user-module,其他的也一样;

  • 下面是整个项目的文件;

(2)传输至 Linux

  • 使用 Xftp(或者其他文件传输工具)将 Cloud01 文件夹传输至 Linux;
  • 放在哪里可以自己定;

三、微服务部署

1、部署至 Docker

(1)cd 至项目在 Linux 中的位置

  • 创建目录使用:mkdir -p /usr/myProject/springcloud/;

(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 了数小时没有部署成功)

前文准备虚拟机环境中已有介绍。

相关文章:

  • 四级核心词汇
  • 【C/C++】空指针访问成员函数
  • 如何卸载干净 IDEA(图文讲解)windows和Mac教程
  • R -- 体验 stringdist
  • 【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源
  • 信号灯集,消息队列
  • 在Linux上编译gdal3.1.2指南
  • 自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目
  • 计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战
  • STM32:I²C通信原理概要
  • 可视化 | 数据可视化降维算法梳理
  • gorilla/websocket的chat示例代码简单分析
  • Web3公链之Cosmos生态的项目Celestia
  • Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作
  • Redis Functions 介绍(一)
  • __proto__ 和 prototype的关系
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Cumulo 的 ClojureScript 模块已经成型
  • fetch 从初识到应用
  • Gradle 5.0 正式版发布
  • PHP CLI应用的调试原理
  • React 快速上手 - 07 前端路由 react-router
  • scala基础语法(二)
  • 第十八天-企业应用架构模式-基本模式
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 学习ES6 变量的解构赋值
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​configparser --- 配置文件解析器​
  • $NOIp2018$劝退记
  • (+4)2.2UML建模图
  • (12)Hive调优——count distinct去重优化
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (javascript)再说document.body.scrollTop的使用问题
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读30/100)Convolutional Pose Machines
  • (五)Python 垃圾回收机制
  • (一)kafka实战——kafka源码编译启动
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ../depcomp: line 571: exec: g++: not found
  • ./configure,make,make install的作用
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net IE10 _doPostBack 未定义
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net程序帮助文档制作
  • .NET学习教程二——.net基础定义+VS常用设置
  • .考试倒计时43天!来提分啦!
  • :O)修改linux硬件时间
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [1181]linux两台服务器之间传输文件和文件夹
  • [20171113]修改表结构删除列相关问题4.txt