[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务

目录

一、环境准备

1、工具准备

2、虚拟机环境

[3、Docker 环境](#3、Docker 环境)

二、项目准备

[1、配置各个模块(微服务)的 Dockerfile](#1、配置各个模块(微服务)的 Dockerfile)

[2、配置 docker-compose.yml 文件](#2、配置 docker-compose.yml 文件)

[3、Maven 打包](#3、Maven 打包)

4、文件整合并传输

三、微服务部署

[1、部署至 Docker](#1、部署至 Docker)

2、访问微服务

四、问题汇总

1、加载、启动很慢

[2、没有给 CentOS 安装 jdk8](#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 工具;
html 复制代码
yum instll -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
  • 使用下面命令直接安装 jdk8
html 复制代码
yum install java-1.8.0-openjdk* -y

3、Docker 环境

(1)安装 Docker 并配置镜像源

html 复制代码
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

html 复制代码
yum install -y docker-ce

(3)配置镜像加速器

html 复制代码
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

html 复制代码
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 开机自动启动

html 复制代码
systemctl enable docker

二、项目准备

下面将要部署一个微服务项目,其中包括 3 个微服务:

  • gateway 网关;
  • order 服务;
  • user 服务;

1、配置各个模块(微服务)的 Dockerfile

(1)编写 Dockerfile

  • 这里举一个 gateway 模块的 Dockerfile 为例子;
  • 其他的模块只需要修改 EXPOSE 暴露的端口即可;
html 复制代码
# 指定基础镜像
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 的时候才重启容器;
html 复制代码
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 了数小时没有部署成功)

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

相关推荐
powerfulzyh10 分钟前
Ubuntu24.04远程开机
linux·ubuntu·远程工作
ulimpid10 分钟前
Command | Ubuntu 个别实用命令记录(新建用户、查看网速等)
linux·ubuntu·command
HHoao11 分钟前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔13 分钟前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu
GFCGUO15 分钟前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
winds~16 分钟前
ubuntu中软件的进程管理-结束软件运行
linux·运维·ubuntu
阳光不锈@43 分钟前
麒麟桌面系统安装和配置Node.js
linux·麒麟系统安装node.js
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
叫我龙翔2 小时前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
小诸葛的博客2 小时前
Ubuntu如何如何安装tcpdump
linux·ubuntu·tcpdump