1. 为什么选择Docker来部署RuoYi-Vue-Plus?
如果你是一个Java全栈开发者,或者正在学习若依这个国内非常流行的开源后台管理系统,那你肯定遇到过环境搭建的麻烦。传统的部署方式,你得在本地电脑上安装Java、Maven、Node.js,然后还得装Redis、PostgreSQL数据库,光是版本兼容问题就够你折腾半天。我记得几年前我第一次接触这类项目,光是配环境就花了一整天,最后还因为Windows和Linux环境差异导致项目跑不起来,那种挫败感现在还记得。
所以,当我发现可以用Docker来部署RuoYi-Vue-Plus时,简直像发现了新大陆。Docker就像一个“集装箱”,把应用和它需要的所有环境(比如特定版本的Redis、PostgreSQL)都打包在一起。你不需要关心宿主机是什么系统,只要装了Docker,一条命令就能把整个环境拉起来。这对于需要快速搭建开发环境、或者想在多台机器上保持环境一致的开发者来说,效率提升不是一点半点。特别是RuoYi-Vue-Plus-5.X这个版本,它默认就推荐使用Docker Compose进行一键部署,这说明官方也意识到了容器化部署的巨大优势。
这次我们要实战部署的,不仅仅是RuoYi-Vue-Plus应用本身,更重要的是它的两个核心依赖:Redis和PostgreSQL数据库。Redis负责缓存和会话管理,能极大提升系统性能;而PostgreSQL作为关系型数据库,存储着所有的业务数据。用Docker来部署它们,意味着你可以轻松管理数据库的版本、数据持久化,并且完全不会污染你的本地系统环境。接下来,我就带你一步步走通这个流程,从零开始,用最清晰、最“小白”的方式,把整个环境搭建起来。
2. 动手之前:你的电脑需要准备好这些
在开始敲命令之前,我们得确保“战场”是准备好的。首先,你需要在你的电脑上安装Docker。无论是Windows、macOS还是Linux,Docker都提供了相应的桌面版(Docker Desktop),安装过程基本是“下一步”到底,非常友好。我强烈建议你去Docker官网下载最新稳定版,安装完成后,在终端(Windows是PowerShell或CMD,macOS/Linux是Terminal)里输入 docker --version 和 docker-compose --version 来验证安装是否成功。看到版本号输出,就说明Docker引擎和Compose工具都就绪了。
除了Docker,你还需要准备好RuoYi-Vue-Plus项目的代码。你可以从它的Gitee或GitHub仓库克隆下来。这里有个小建议:为了后续操作方便,我习惯在用户目录下创建一个专门的工作区,比如 ~/projects/,然后把项目克隆到这里。这样所有的路径都相对清晰,不容易乱。当然,你还需要一个趁手的代码编辑器,比如IntelliJ IDEA(用于后端Java)和VS Code(用于前端Vue),这些就看个人喜好了。
最后,也是最重要的一点心理准备:网络。因为我们需要从Docker Hub拉取Redis和PostgreSQL的官方镜像,所以请确保你的网络环境能够顺畅访问Docker的镜像仓库。有时候拉取镜像会比较慢,这是正常现象,耐心等待即可,或者可以配置一下国内的镜像加速器,速度会快很多。好了,工具和心态都准备好了,我们就可以进入正题,开始部署第一个关键服务——Redis。
3. 五分钟搞定Redis:缓存服务一键部署
Redis在RuoYi-Vue-Plus里扮演着至关重要的角色,比如登录令牌的存储、热点数据的缓存,都离不开它。用Docker部署Redis,简单到超乎你想象。整个过程其实就是两个核心命令:拉取镜像和运行容器。
首先,我们打开终端,输入拉取最新版Redis镜像的命令:
docker pull redis
这条命令会让Docker去官方仓库把Redis镜像下载到本地。你可能会看到它下载不同的“层”(layer),这是Docker镜像的分层机制,能有效利用存储空间。下载完成后,可以用 docker images 命令查看一下,列表中应该出现了 redis 这个镜像。
接下来就是启动Redis容器了,这是关键一步。我直接给出一个经过实战检验的命令,你复制过去用就行:
docker run -d --name ruoyi-redis -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123456
别急着执行,我们一起来拆解一下这个命令的每个部分是什么意思,这样你以后自己调整参数就心里有数了。
-d: 让容器在后台运行,这样就不会占用你的终端窗口。--name ruoyi-redis: 给容器起个名字,这里叫“ruoyi-redis”,方便我们后续管理。比默认的一串随机字符好记多了。-p 6379:6379: 端口映射。左边6379是你宿主机(你的电脑)的端口,右边6379是容器内部Redis服务的端口。这样你通过本地localhost:6379就能访问到容器里的Redis了。-v redis-data:/data: 数据卷挂载。这是保证数据不丢失的关键!redis-data是一个Docker管理的卷(volume),它会被挂载到容器内的/data目录。Redis的所有持久化数据(RDB/AOF文件)都会写在这里。即使你删除了容器,这个卷里的数据还在,下次启动新容器挂载上就能恢复。redis: 指定要使用的镜像名。redis-server --requirepass 123456: 这是容器的启动命令,它告诉Redis服务启动时,设置一个访问密码为“123456”。请务必修改这个密码,在生产环境中要用强密码。
执行完命令后,用 docker ps 看看容器是不是已经跑起来了,状态(STATUS)显示为“Up”就成功了。你还可以用 docker logs ruoyi-redis 快速瞄一眼启动日志,确认没有报错。至此,一个带密码保护、数据持久化的Redis服务就已经在本地运行起来了,是不是比直接安装Redis软件省心多了?
4. 部署PostgreSQL:踩坑与避坑指南
数据库是任何应用的核心,RuoYi-Vue-Plus-5.X默认使用PostgreSQL(简称PG)。用Docker部署PG的步骤和Redis类似,但配置上会多一些细节,也是新手最容易踩坑的地方。别担心,跟着我的步骤走,我把常见的坑都给你标出来。
首先,拉取一个特定版本的PG镜像,这里我用比较稳定的15版本:
docker pull postgres:15
指定版本号是个好习惯,能避免因镜像最新版变动带来的意外问题。
接下来是创建并启动容器。这里我直接给出一个功能更完整的命令,它创建数据库、用户并设置了数据挂载:
docker run -d \
--name ruoyi-postgres \
-e POSTGRES_PASSWORD=myStrongPassword123! \
-e POSTGRES_USER=ruoyi \
-e POSTGRES_DB=ruoyi_vue_plus \
-p 5432:5432 \
-v pg-data:/var/lib/postgresql/data \
postgres:15
这个命令比Redis的复杂一点,我们重点看几个环境变量 -e:
POSTGRES_PASSWORD: 这是超级用户postgres的密码。安全起见,一定要换成你自己的复杂密码。POSTGRES_USER: 这个环境变量很实用,它允许你在镜像初始化时创建一个额外的指定用户。这里我创建了一个名为ruoyi的用户。POSTGRES_DB: 同样,这个变量会在初始化时创建一个指定名称的数据库。我们创建了ruoyi_vue_plus库,后续项目就可以直接连这个库。
命令执行后,用 docker ps 和 docker logs ruoyi-postgres 确认容器正常运行。这时候,一个常见的“坑”就来了:你在Docker容器内用 psql 命令可能能连上数据库,但用本地的数据库管理工具(比如DBeaver、IDEA自带的数据库工具)或者RuoYi后端服务去连接 localhost:5432,却死活连不上,提示“连接被拒绝”或者“认证失败”。
4.1 定位连接问题:权限与配置检查
这个问题十有八九出在PostgreSQL的客户端认证配置上。PG有一个严格的配置文件叫 pg_hba.conf(host-based authentication),它规定了哪些主机、哪些用户、通过什么方式可以连接哪些数据库。
我们需要进入容器内部查看这个文件。执行以下命令:
docker exec -it ruoyi-postgres bash
这会进入容器的bash命令行。然后查看配置文件:
cat /var/lib/postgresql/data/pg_hba.conf
你会看到一堆以“local”或“host”开头的行。关键看“host”那几行。如果最后几行是这样的:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
这说明它只允许来自本机(127.0.0.1)的连接。你的本地工具虽然看起来是连 localhost,但对于容器内的PG服务来说,这个连接是来自宿主机的网络,而不是容器网络内部的“本机”,因此会被拒绝。
4.2 解决问题:修改配置允许远程连接
解决方法就是添加一条规则,允许来自所有IPv4地址的密码连接。不过,直接修改容器内的文件不是最佳实践,因为容器重启后可能丢失。更优雅的方式是在启动容器时,就准备好一个正确的 pg_hba.conf 文件挂载进去,或者通过执行SQL命令来修改。
这里我分享一个更简单直接的方案:在启动命令中,直接映射一个不同的主机端口,并确保使用我们创建的非默认用户。有时候连接失败也可能是尝试用 postgres 用户连接,但密码不对。我们之前创建了 ruoyi 用户和同名数据库,用这个用户连接会更顺畅。
另外,如果你坚持想用默认的5432端口且修改配置,可以这样做:先退出容器,在宿主机上创建一个自定义的 pg_hba.conf 文件,添加一行 host all all 0.0.0.0/0 md5,然后在启动容器时通过 -v 挂载这个文件覆盖容器内的默认配置。但为了教程的简洁和通用性,我们采用修改端口映射和明确用户的方式。
让我们停止并移除刚才的容器(数据卷 pg-data 会保留),用一条新的命令启动:
# 停止并移除旧容器
docker stop ruoyi-postgres && docker rm ruoyi-postgres
# 以新配置启动容器
docker run -d \
--name ruoyi-postgres \
-e POSTGRES_PASSWORD=myStrongPassword123! \
-e POSTGRES_USER=ruoyi \
-e POSTGRES_DB=ruoyi_vue_plus \
-p 5433:5432 \
-v pg-data:/var/lib/postgresql/data \
postgres:15
注意,这里我把主机端口改成了 5433(-p 5433:5432)。这样做的目的是避免和你本地可能已经安装的PostgreSQL服务冲突(如果它占用了5432端口)。现在,你的连接地址就变成了 localhost:5433,用户名是 ruoyi,密码是你设置的强密码,数据库名是 ruoyi_vue_plus。
5. 验证与连接:让RuoYi-Vue-Plus用上你的数据库
Redis和PG都跑起来之后,我们得验证一下它们是否真的工作正常,并且能被正确连接。首先验证Redis,我们可以用 redis-cli 工具。因为我们的Redis运行在容器里,所以需要进入容器内部使用,或者通过端口映射在宿主机上使用安装的 redis-cli。这里用更通用的宿主机方式(假设你已安装redis-cli):
redis-cli -h localhost -p 6379 -a 123456
输入上面的命令,如果提示符变成 127.0.0.1:6379>,就说明连接成功了。可以敲个 ping,如果返回 PONG,那Redis服务就完全正常。记住,生产环境千万别用 -a 在命令行里传密码,有安全风险,这里只是测试。
对于PostgreSQL,我们同样用客户端工具测试。如果你没有安装 psql,用图形化工具(如DBeaver、pgAdmin)也一样。连接参数如下:
- 主机/地址:
localhost - 端口:
5433(如果你按我上面的命令改了的话) - 数据库:
ruoyi_vue_plus - 用户名:
ruoyi - 密码: 你设置的强密码
连接成功后,你应该能看到 ruoyi_vue_plus 这个数据库,并且可以执行SQL了。
最后,也是最激动人心的一步,就是修改RuoYi-Vue-Plus项目的配置文件,让它指向我们刚部署好的Docker容器服务。你需要找到后端项目(通常是 ruoyi-admin 模块)的配置文件,比如 application.yml 或 application-dev.yml。修改其中关于Redis和数据库的连接部分。
Redis配置示例:
spring:
redis:
host: localhost
port: 6379
password: 123456 # 替换成你的Redis密码
database: 0
PostgreSQL配置示例:
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5433/ruoyi_vue_plus?useUnicode=true&characterEncoding=utf8&useSSL=false
username: ruoyi
password: myStrongPassword123! # 替换成你的PG密码
修改完成后,启动你的RuoYi-Vue-Plus后端服务。观察启动日志,如果没有报数据库连接错误,并且能看到类似“Redis连接成功”、“数据源初始化成功”的日志,那么恭喜你,整个基于Docker的本地开发环境就已经完美搭建成功了!你现在拥有了一个干净、隔离、可复现的开发环境,可以尽情地进行你的业务开发了。

8912

被折叠的 条评论
为什么被折叠?



