部署芋道 2 中间件服务搭建

2.中间件服务搭建

要将服务都启动起来需要一些基础设施,也就是中间件

这里必须搭建的有3个

  • Mysql:数据库
  • Redis:缓存
  • Nacos:注册中心配置中心

由于现在官方docker无法直接下载,所以之后的镜像地址都提供可以直接使用的地址,大家复制粘贴即可直接使用。

这里我的虚拟机ip为192.168.142.128,之后代码中相关配置,⚠️注意要更改为自己机器的ip地址

MySQL

部署mysql

使用Docker部署mysql数据库

1
2
3
4
5
6
7
docker run -d -p 3306:3306 \
  --restart=unless-stopped \
  --name=yudao_mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v "/etc/localtime:/etc/localtime" \
  -v yc_mysql:/var/lib/mysql \
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2

这个 docker run 命令是用来在 Docker 中启动一个 MySQL 容器的。下面是对命令中各个选项和参数的详细解释:

  1. -d
  • 含义:以分离模式(detached mode)运行容器,这意味着容器将在后台运行。
  • 作用:允许你在启动容器后立即释放终端。
  1. -p 3306:3306
  • 含义:端口映射,格式为 宿主机端口:容器端口
  • 作用:将宿主机的 3306 端口映射到容器内的 3306 端口,使得可以通过宿主机的 IP 地址和 3306 端口访问容器内的 MySQL 服务。
  1. --restart=unless-stopped
  • 含义:重启策略设置为 unless-stopped
  • 作用:除非容器被手动停止,否则 Docker 守护进程会在机器重启或容器退出时自动重启该容器。
  1. --name=yudao_mysql
  • 含义:指定容器的名字。
  • 作用:为容器指定一个易于识别的名字 yudao_mysql,方便后续管理(如停止、启动、删除等操作)。
  1. -e MYSQL_ROOT_PASSWORD=123456
  • 含义:设置环境变量。
  • 作用:通过环境变量 MYSQL_ROOT_PASSWORD 设置 MySQL 的 root 用户密码为 123456。这是初始化 MySQL 数据库时必须的一个步骤。
  1. -v "/etc/localtime:/etc/localtime"
  • 含义:挂载宿主机文件或目录到容器内。
  • 作用:将宿主机上的 /etc/localtime 文件挂载到容器内的相同路径,确保容器内的时区与宿主机保持一致。
  1. -v yc_mysql:/var/lib/mysql
  • 含义:挂载数据卷。
  • 作用:使用名为 yc_mysql 的 Docker 卷来持久化 MySQL 数据库的数据文件。这保证了即使容器被删除,数据也不会丢失。
  1. swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2
  • 含义:指定要使用的镜像。
  • 作用:从指定的镜像仓库拉取并使用版本为 8.4.2 的 MySQL 镜像。在这个例子中,镜像是从华为云的软件仓库服务 SWR 获取的。

导入数据

使用mysql创建数据库ruoyi-vue-pro

导入后端项目下sql目录中的ruoyi-vue-pro.sql进行初始化

可以使用以下命令初始化:

1
2
3
cd /opt/gitdir/yudao-cloud/sql/mysql
docker exec -i yudao_mysql mysql -uroot -p123456 -e 'CREATE DATABASE `ruoyi-vue-pro`;'
docker exec -i yudao_mysql mysql -uroot -p123456 ruoyi-vue-pro < ./ruoyi-vue-pro.sql

第二个指令:创建一个名为 ruoyi-vue-pro 的空数据库,用于后续导入数据。

  • docker exec -i:在运行中的容器中执行命令,-i 表示保持标准输入开启。
  • yudao_mysql:这是你之前用 --name=yudao_mysql 启动的 MySQL 容器名。
  • mysql -uroot -p123456:使用 root 用户和密码 123456 登录 MySQL。
  • -e 'CREATE DATABASE ...':执行一条 SQL 命令,这里是创建数据库 ruoyi-vue-pro
  • 使用反引号(```)是为了防止数据库名是保留字时出错。

第三个指令:将 ruoyi-vue-pro.sql 中定义的表结构、数据等导入到刚刚创建的 ruoyi-vue-pro 数据库中。

  • docker exec -i yudao_mysql ...:同上,还是在 MySQL 容器中执行命令。
  • mysql -uroot -p123456 ruoyi-vue-pro:使用 root 用户登录,并选择 ruoyi-vue-pro 数据库。
  • < ./ruoyi-vue-pro.sql:将本地当前目录下的 ruoyi-vue-pro.sql 文件内容作为输入,传给 mysql 命令,也就是将 SQL 文件导入数据库。

修改后端配置中数据库地址

数据库连接配置在application-local.yaml文件中,默认是使用127.0.0.1:3306端口,并且账号是root,密码是123456

我们需要修改其ip地址,因为文件比较多,我们使用shell批量替换

⚠️以下所有的查找替换操作都是在项目的根目录下执行的

1️⃣查找所有application-local.yaml查看其中的数据库配置

1
find ./ -name application-local.yaml -exec grep -l 'jdbc:mysql://127.0.0.1:3306' {} +

作用:在当前目录及其子目录中查找名为 application-local.yaml 的文件,并检查这些文件中是否包含字符串 jdbc:mysql://127.0.0.1:3306,如果包含则输出文件名

  • find ./

    • 作用:从当前目录(.)开始递归查找文件。

    • ./ 表示“当前目录”。

  • -name application-local.yaml

    • 作用:只查找文件名是 application-local.yaml 的文件。

    • 注意:这个是精确匹配,不是模糊匹配。

  • -exec grep -l 'jdbc:mysql://127.0.0.1:3306' {} +

    • 这是 find 的一个高级用法,表示对找到的每个文件执行后面的命令。

    • 各部分含义:

      • -exec:表示对找到的文件执行后面的命令。

      • grep -l

        • grep 是搜索命令。
        • -l 选项表示“只输出包含匹配项的文件名”,不显示匹配内容。
      • 'jdbc:mysql://127.0.0.1:3306':要搜索的字符串。

      • {}:代表 find 找到的文件名。

      • +:与 -exec 配合使用,表示把多个文件一次性传给 grep(比 \; 更高效)。

2️⃣更改数据库配置中的ip地址,⚠️注意更换为自己的ip地址

1
find ./ -name application-local.yaml -print0 | xargs -0 sed -i 's|jdbc:mysql://127.0.0.1:3306|jdbc:mysql://192.168.142.128:3306|g'

作用:在当前目录及其子目录中,找到所有名为 application-local.yaml 的文件,并将其中所有的 jdbc:mysql://127.0.0.1:3306 替换为 jdbc:mysql://192.168.142.128:3306

  • find ./ -name application-local.yaml -print0

    • 作用:查找当前目录(./)及其子目录中所有名为 application-local.yaml 的文件。

    • -print0:用空字符(\0)分隔输出结果,而不是默认的换行符。

      • 这是为了处理文件名中包含空格或特殊字符的情况。
  • | xargs -0

    • |:管道符,将前一个命令的输出作为下一个命令的输入。

    • xargs -0:告诉xargs输入的参数是用空字符(\0)分隔的。

      • 这与 find -print0 配合使用,确保支持带空格的文件名。
  • sed -i 's|jdbc:mysql://127.0.0.1:3306|jdbc:mysql://192.168.142.128:3306|g'

    • sed:流编辑器,常用于文本替换。

    • -i:直接修改文件内容(即“就地替换”)。

    • 's|...|...|g'

      • s 表示替换(substitute)。
      • 使用 | 作为分隔符,是为了避免和 URL 中的 / 冲突。
      • g 表示全局替换(替换每一行中所有匹配项,不只是第一个)。

3️⃣查看更改后的内容

1
find ./ -name application-local.yaml -exec grep 'jdbc:mysql://192.168.142.128:3306' {} +

Redis

部署redis

使用Docker部署redis

1
2
3
4
5
6
docker run -d \
  --restart=unless-stopped \
  --name=yudao_redis \
  -v "/etc/localtime:/etc/localtime" \
  -p 6379:6379 \
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.2.5
  • docker run -d

    • docker run:启动一个新的容器。

    • -d--detach):让容器在后台运行(不占用当前终端)。


  • --restart=unless-stopped

    • --restart:定义容器的重启策略。

    • unless-stopped:除非手动停止(docker stop),否则容器会自动重启(即使宿主机重启也会恢复运行)。


  • --name=yudao_redis
    • --name:给容器指定一个名称(yudao_redis),方便后续管理(如 docker stop yudao_redis)。

  • -v "/etc/localtime:/etc/localtime"

    • -v--volume):挂载宿主机文件到容器内。

    • /etc/localtime:/etc/localtime:将宿主机的时区文件同步到容器内,确保容器时间与宿主机一致。


  • -p 6379:6379

    • -p--publish):端口映射。

    • 6379:6379:将宿主机的 6379 端口映射到容器的 6379 端口(Redis 默认端口),允许外部通过 宿主机IP:6379 访问 Redis。


  • swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.2.5
    • 镜像地址:从华为云镜像仓库(SWR) 拉取 Redis 7.2.5 镜像。
      • swr.cn-north-4.myhuaweicloud.com:华为云镜像仓库域名。
      • ddn-k8s/docker.io/redis:7.2.5:镜像路径(基于官方 Redis 7.2.5 构建)。

修改Redis配置

通过docker ps -a查看redis容器是否已经拉取成功

然后进入容器:docker exec -it yudao_redis /bin/bash

修改后端配置中redis的地址,⚠️以下所有的查找替换操作都是在项目的根目录下执行的

查找需要修改的

1
find ./ -name application-local.yaml -exec grep 'host: 127.0.0.1 # 地址' {} +

进行修改,⚠️注意更换为自己的ip地址

1
find ./ -name application-local.yaml -print0 | xargs -0 sed -i 's|host: 127.0.0.1 # 地址|host: 192.168.142.128 # 地址|g'

查看更改后内容

1
find ./ -name application-local.yaml -exec grep 'host: 192.168.142.128 # 地址' {} +

Nacos

部署Nacos

使用Docker部署Nacos

1
2
3
4
5
6
7
8
docker run -d \
  -p 8848:8848 \
  -p 9848:9848 \
  --restart=unless-stopped \
  --name=yudao_nacos \
  -e MODE=standalone \
  -v "/etc/localtime:/etc/localtime" \
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.4.0

1. docker run -d

  • docker run:启动一个新的容器。
  • -d--detach):让容器在后台运行(不占用当前终端)。

2. -p 8848:8848 -p 9848:9848

  • -p(–publish):端口映射,将宿主机的端口绑定到容器的端口。
    • 8848:8848:Nacos 的默认 HTTP 端口(用于控制台和 API),就是提供一个页面。
    • 9848:9848:Nacos 2.0+ 新增的 gRPC 端口(用于服务通信),就是用来通信的。

3. --restart=unless-stopped

  • --restart:定义容器的重启策略。
  • unless-stopped:除非手动停止(docker stop),否则容器会自动重启(即使宿主机重启也会恢复运行)。

4. --name=yudao_nacos

  • --name:为容器指定名称(yudao_nacos),方便后续管理(如 docker stop yudao_nacos)。

5. -e MODE=standalone

  • -e--env):设置环境变量。
  • MODE=standalone:以单机模式运行 Nacos(适合开发测试,生产环境建议集群模式)。

6. -v "/etc/localtime:/etc/localtime"

  • -v--volume):挂载宿主机的文件到容器内。
  • /etc/localtime:/etc/localtime:同步宿主机时区到容器,确保容器时间与宿主机一致。

7. swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.4.0

  • 镜像地址:从华为云镜像仓库(SWR)拉取 Nacos 2.4.0 镜像。
    • swr.cn-north-4.myhuaweicloud.com:华为云镜像仓库域名。
    • ddn-k8s/docker.io/nacos/nacos-server:v2.4.0:镜像路径(基于官方 Nacos 2.4.0 构建)。

创建命名空间

先进入nacos的页面:192.168.142.128:8848/nacos

创建dev命名空间

「命名空间」>「新建命名空间」,然后三个空都填dev

修改Nacos配置

修改后端配置中Nacos的地址,这里也是要在项目根目录下输入指令,⚠️注意IP地址修改为自己虚拟机的

1
find ./ -name bootstrap-local.yaml -print0 | xargs -0 sed -i 's|server-addr: 127.0.0.1:8848|server-addr: 192.168.142.128:8848|g'
0%