最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

[SpringCloud

运维笔记admin18浏览0评论

[SpringCloud

[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 作为项目部署的服务器操作系统

由于访问微服务需要操作系统有端口开放,因此可以采取两种措施:

  • 第一种:关闭防火墙;
  • 第二种:微服务用到哪些端口,就打开哪些端口;

参考如下内容:.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 .reposed -i 's@download.docker@mirrors.tuna.tsinghua.edu/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": [""]
}EOFsudo systemctl daemon-reloadsudo systemctl restart docker

(4)安装 Docker-Compose

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

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

发布评论

评论列表(0)

  1. 暂无评论