2.中间件服务搭建
要将服务都启动起来需要一些基础设施,也就是中间件
这里必须搭建的有3个
Mysql:数据库Redis:缓存Nacos:注册中心配置中心
由于现在官方docker无法直接下载,所以之后的镜像地址都提供可以直接使用的地址,大家复制粘贴即可直接使用。
这里我的虚拟机ip为192.168.142.128,之后代码中相关配置,⚠️注意要更改为自己机器的ip地址
MySQL
部署mysql
使用Docker部署mysql数据库
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 容器的。下面是对命令中各个选项和参数的详细解释:
-d
- 含义:以分离模式(detached mode)运行容器,这意味着容器将在后台运行。
- 作用:允许你在启动容器后立即释放终端。
-p 3306:3306
- 含义:端口映射,格式为
宿主机端口:容器端口。 - 作用:将宿主机的 3306 端口映射到容器内的 3306 端口,使得可以通过宿主机的 IP 地址和 3306 端口访问容器内的 MySQL 服务。
--restart=unless-stopped
- 含义:重启策略设置为
unless-stopped。 - 作用:除非容器被手动停止,否则 Docker 守护进程会在机器重启或容器退出时自动重启该容器。
--name=yudao_mysql
- 含义:指定容器的名字。
- 作用:为容器指定一个易于识别的名字
yudao_mysql,方便后续管理(如停止、启动、删除等操作)。
-e MYSQL_ROOT_PASSWORD=123456
- 含义:设置环境变量。
- 作用:通过环境变量
MYSQL_ROOT_PASSWORD设置 MySQL 的 root 用户密码为123456。这是初始化 MySQL 数据库时必须的一个步骤。
-v "/etc/localtime:/etc/localtime"
- 含义:挂载宿主机文件或目录到容器内。
- 作用:将宿主机上的
/etc/localtime文件挂载到容器内的相同路径,确保容器内的时区与宿主机保持一致。
-v yc_mysql:/var/lib/mysql
- 含义:挂载数据卷。
- 作用:使用名为
yc_mysql的 Docker 卷来持久化 MySQL 数据库的数据文件。这保证了即使容器被删除,数据也不会丢失。
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进行初始化
可以使用以下命令初始化:
cd /opt/gitdir/yudao-cloud/sql/mysqldocker 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查看其中的数据库配置
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地址
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️⃣查看更改后的内容
find ./ -name application-local.yaml -exec grep 'jdbc:mysql://192.168.142.128:3306' {} +Redis
部署redis
使用Docker部署redis
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 构建)。
- 镜像地址:从华为云镜像仓库(SWR) 拉取 Redis 7.2.5 镜像。
修改Redis配置
通过docker ps -a查看redis容器是否已经拉取成功
然后进入容器:docker exec -it yudao_redis /bin/bash
修改后端配置中redis的地址,⚠️以下所有的查找替换操作都是在项目的根目录下执行的
查找需要修改的
find ./ -name application-local.yaml -exec grep 'host: 127.0.0.1 # 地址' {} +进行修改,⚠️注意更换为自己的ip地址
find ./ -name application-local.yaml -print0 | xargs -0 sed -i 's|host: 127.0.0.1 # 地址|host: 192.168.142.128 # 地址|g'查看更改后内容
find ./ -name application-local.yaml -exec grep 'host: 192.168.142.128 # 地址' {} +Nacos
部署Nacos
使用Docker部署Nacos
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.01. 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地址修改为自己虚拟机的
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'