[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.repo

sed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

(2)安装 docker-ce

yum install -y docker-ce

(3)配置镜像加速器

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<- 'EOF'
{
  "registry-mirrors": ["https://n0dwemtq.mirror.aliyuncs.com"]
}

EOF

sudo systemctl daemon-reload

sudo 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-server
    environment:
      MODE: standalone
    ports: 
      - "8848:8848"
    restart: always
    logging: 
      driver: "json-file"
      options: 
        max-size: "100m"

  user-service: # 与 nacos 注册中心的 name 一致
    build: ./user-module # 寻找当前 yml 所在目录的文件夹,其中包含 dockerfile
    restart: always
    logging: 
      driver: "json-file"
      options: 
        max-size: "100m"

  order-service:
    build: ./order-module
    restart: always
    logging: 
      driver: "json-file"
      options: 
        max-size: "100m"

  gateway:
    build: ./gateway
    ports: 
      - "10086:10086"
    restart: always
    logging: 
      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 了数小时没有部署成功)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频特效制作After Effects 2024 for Mac(ae)

After Effects 2024是一款由Adobe公司开发的专业的视频特效和动态图形设计软件&#xff0c;它可以帮助用户创建各种令人惊叹的视觉效果&#xff0c;例如粒子系统、合成特效、绿屏抠像等。该软件支持动画制作&#xff0c;包括关键帧动画、形状动画、运动跟踪等工具&#xff0c;可…

SpringCloud(二) Eureka注册中心的使用

在SpringCloud(一)中,我们学会了使用RestTemplate进行远程调用,但是在调用user-service时候需要在order-service中发送http请求,请求中需要书写对应微服务的ip和端口号,十分不方便,如果此时有多个user-service实例的话,就不知道调用哪个了(除非每次调用的时候都对ip和端口号进行…

【java零基础入门到就业】第四天:Notepad++软件的下载和安装

文章目录 Notepad软件简介下载安装 Notepad软件 简介 Notepad&#xff08;又称Notepad Plus Plus&#xff09;是一款免费的文本编辑器&#xff0c;是Windows操作系统下非常受欢迎的开源软件。它提供了许多强大的功能&#xff0c;适合用于编写各种编程语言的源代码、编辑文本文…

Redis缓存穿透、击穿、雪崩问题原理和解决方案

目录 一、Redis缓存穿透1.1、缓存穿透原理1.2、缓存穿透代码演示1.3、缓存穿透解决方案解决方案一&#xff08;数据库中查询不到数据也将key进行缓存&#xff09;解决方案二&#xff08;使用布隆过滤器&#xff09; 二、Redis缓存击穿&#xff08;缓存失效&#xff09;三、Redi…

Notes/Domino中的JVM版本

大家好&#xff0c;才是真的好。 这篇内容主要写给同时关注Domino和Java的技术人员。 很多人都知道&#xff0c;从Notes/Domino R5&#xff08;1999年&#xff09;版本&#xff0c;开始自带一个Java虚拟机&#xff0c;用来支持Java应用运行。但很多人不知道&#xff0c;这个J…

【c++|opencv】二、灰度变换和空间滤波---4.高斯滤波

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 1. 高斯滤波 #include <iostream> #include <opencv2/opencv.hpp> #include"Salt.h"using namespace std; using namespace cv;/…

中国人民大学与加拿大女王大学金融硕士——人生是旷野,不是一条轨道

在这个瞬息万变的时代&#xff0c;我们每个人都像是一颗流星&#xff0c;在宇宙中独自燃烧。我们每个人都有自己的梦想&#xff0c;自己的追求&#xff0c;自己的道路。然而&#xff0c;很多时候&#xff0c;我们却发现自己被现实的轨道所束缚&#xff0c;无法自由地追求自己的…

【一、http】go的http基本请求方法

1、http的基本请求 package mainimport ("bytes""fmt""io""net/http""net/url" )func post(){r, err : http.Post("http://httpbin.org/post", "", nil)if err ! nil {fmt.Println("ss")}de…

电子凭证会计数据标准试点深化后,企业管理的关键点在于什么?

为了加快建设数字中国、发展数字经济发展&#xff0c;并推动经济社会绿色化、低碳化发展&#xff0c;政府部门一直大力推动企业的数字化转型。 企业的经营活动也越来越活跃。企业在经营中产生了大量的票据&#xff0c;由于电子凭证分属不同的部门管理&#xff0c;数据不兼容&am…

竞赛选题 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

IDEA远程调试代码

IDEA->RUN->Edit Configurations 端口随便选一个&#xff0c;选择调试模块&#xff0c;然后用IDEA生成的命令调试 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:8081 -jar backend-1.18.11.jar &

word插入图片不显示

段落格式要设置成非固定的。

约数之和 (普通快速幂求逆元做法)

假设现在有两个自然数 A 和 B&#xff0c;S 是 AB 的所有约数之和。 请你求出 Smod9901 的值是多少。 输入格式 在一行中输入用空格隔开的两个整数 A 和 B 。 输出格式 输出一个整数&#xff0c;代表 Smod9901 的值。 数据范围 0≤A,B≤5107 输入样例&#xff1a; …

【JavaEE初阶】 网络编程基础与Socket套接字

文章目录 &#x1f38b;网络编程基础&#x1f6a9;为什么需要网络编程&#xff1f;&#x1f6a9;什么是网络编程&#xff1f;&#x1f6a9;网络编程中的基本概念&#x1f4cc;发送端和接收端&#x1f4cc;请求和响应&#x1f4cc;客户端和服务端&#x1f4cc;常见的客户端服务端…

httpclient工具类(支持泛型转换)

1、网上搜到的httpclient工具类的问题&#xff1a; 1.1、如下图我们都能够发现这种封装的问题&#xff1a; 代码繁杂、充斥了很多重复性代码返回值单一&#xff0c;无法拿到对应的Java Bean对象及List对象集合实际场景中会对接大量第三方的OPEN API&#xff0c;下述方法的扩展…

二叉树OJ题汇总

本专栏内容为&#xff1a;leetcode刷题专栏&#xff0c;记录了leetcode热门题目以及重难点题目的详细记录 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;Leetcode &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &…

奇偶校验码和循环冗余码

在数据链路层的传输中&#xff0c;1可能变成0&#xff0c;0可能变成1&#xff0c;这是比特差错。 为了应对比特差错&#xff0c;有两种方式&#xff0c;即自动重传请求ARQ&#xff08;Automatic Repeat-reQuest&#xff09;和前向纠错FEC&#xff08;Forward Error Correction&…

c++获取和设置环境变量

这个功能非常常用&#xff0c;但是容易忘记&#xff0c;这里做个记录。 注意&#xff0c;设置的环境变量只在当前进程中生效&#xff0c;所以在电脑中的环境变量设置区域看不到。 std::string env getenv("PATH");env "X:\\envtest";std::string newEnv…

亚马逊、美客多卖家测评:如何建立养号团队实现运营化式测评?

大家好&#xff0c;我是跨境电商测评养号7年从事经验的珑哥。养号环境软件开发&#xff0c;深度解决各跨境平台矩阵养号防关联、砍单、F号问题。关注珑哥解决更多跨境养号测评问题。 测评&#xff0c;相信这个词对于大部分跨境卖家来说&#xff0c;想必都不陌生&#xff0c;因…