部署芋道 2 中间件服务搭建
2.中间件服务搭建
要将服务都启动起来需要一些基础设施,也就是中间件
这里必须搭建的有3个
Mysql
:数据库Redis
:缓存Nacos
:注册中心配置中心
由于现在官方docker无法直接下载,所以之后的镜像地址都提供可以直接使用的地址,大家复制粘贴即可直接使用。
这里我的虚拟机ip为192.168.142.128
,之后代码中相关配置,⚠️注意要更改为自己机器的ip地址
MySQL
部署mysql
使用Docker部署mysql数据库
|
|
这个 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
进行初始化
可以使用以下命令初始化:
|
|
第二个指令:创建一个名为 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查看其中的数据库配置
|
|
作用:在当前目录及其子目录中查找名为 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地址
|
|
作用:在当前目录及其子目录中,找到所有名为 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️⃣查看更改后的内容
|
|
Redis
部署redis
使用Docker部署redis
|
|
-
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的地址,⚠️以下所有的查找替换操作都是在项目的根目录下执行的
查找需要修改的
|
|
进行修改,⚠️注意更换为自己的ip地址
|
|
查看更改后内容
|
|
Nacos
部署Nacos
使用Docker部署Nacos
|
|
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地址修改为自己虚拟机的
|
|