一、前言
若依(RuoYi)是一款基于SpringBoot+Vue的前后端分离权限管理系统,采用Docker部署可以简化环境配置、提升部署效率。本文将通过详细步骤演示如何在CentOS 7服务器上使用Docker容器化部署若依前后端分离项目。
二、环境准备
1. 服务器配置
-
操作系统:CentOS 7.6+
-
内存:建议4GB+
-
硬盘:20GB+可用空间
-
开放端口:80、8080、3306、6379
2.安装Docker环境
# 安装依赖
sudo yum install -y yum-utils
# 添加Docker源
sudo yum-config-manager –add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
sudo systemctl enable –now docker
3. 安装Docker Compose
# 下载Docker Compose
sudo curl -L "https://mirror.aliyun.com/docker-toolbox/linux/compose/2.26.1/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose –version
4. 开放防火墙端口
# 阿里云控制台需额外开放端口:80, 443, 3306, 6379
三、准备项目目录结构
1. 创建项目根目录
mkdir -p /opt/ruoyi/{mysql,redis,backend,frontend,nginx}
cd /opt/ruoyi
2. 目录结构说明
/opt/ruoyi
├── docker-compose.yml # 主编排文件
├── mysql
│ ├── data # 数据库持久化数据
│ └── init # 初始化SQL脚本
├── redis
│ └── data # Redis持久化数据
├── backend
│ ├── Dockerfile # 后端镜像构建文件
│ ├── ruoyi-admin.jar # 后端JAR包(需自行放入)
│ └── application.yml # 后端配置文件(需修改)
└── frontend
├── Dockerfile # 前端镜像构建文件
├── dist # 前端编译后的静态文件(需自行放入)
└── nginx.conf # 前端Nginx配置
三、部署 MySQL 和 Redis
1. 编写 docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: ruoyi-mysql
command:
–character-set-server=utf8mb4
–collation-server=utf8mb4_unicode_ci
–default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: root@123 # 自定义root密码
MYSQL_DATABASE: ry-cloud # 数据库名需与RuoYi配置一致
MYSQL_USER: root
MYSQL_PASSWORD: root@123
# 新增字符集环境变量
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
ports:
– "3306:3306"
volumes:
– ./mysql/data:/var/lib/mysql # 数据持久化
– ./mysql/init:/docker-entrypoint-initdb.d # 初始化SQL
networks:
– ruoyi-net
redis:
image: redis:6.2
container_name: ruoyi-redis
ports:
– "6379:6379"
volumes:
– ./redis/data:/data
command: redis-server –requirepass redis@123 # Redis密码需与RuoYi配置一致
networks:
– ruoyi-net
networks:
ruoyi-net: # 自定义网络,确保容器间通过服务名通信
2. 导入 RuoYi 初始化SQL
# 将 RuoYi 的 SQL 文件(如 ry_2023xxxx.sql 和 quartz.sql)放入目录
cp ry_2023xxxx.sql /opt/ruoyi/mysql/init/
cp quartz.sql /opt/ruoyi/mysql/init/
四、部署后端服务(Spring Boot)
1. 准备后端文件
-
将编译好的 ruoyi-admin.jar 放入 /opt/ruoyi/backend
-
创建 backend/Dockerfile:
- FROM openjdk:17-jdk-slim
# 关键:安装字体库(Debian 系命令)
RUN apt-get update \\
&& apt-get install -y –no-install-recommends \\
libfreetype6 \\
fontconfig \\
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY dafu-admin.jar ./app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]📊 镜像对比表
- 设置字体库作用于若依框架账号-验证码
-
镜像名称体积内置字体是否需要额外安装特点 eclipse-temurin:17-jre-jammy 210MB ✅ ❌ 生产首选 amazoncorretto:17-al2-full 400MB ✅ ❌ AWS 环境优化 azul/zulu-openjdk:17 450MB ✅ ❌ 多架构支持 openjdk:17-jdk-slim 300MB ❌ ✅ 需手动安装依赖 eclipse-temurin:17-jre-alpine 80MB ❌ ✅(少量) 极简但兼容性略低
2. 修改后端配置
编辑application.yml/application-druid.yml (需自行从RuoYi项目中复制并修改):
解决方案:不要使用localhost或者127.0.0.1、mysql
注意:项目配置文件跟docker-compose.yml 保存一致
# 数据库配置
master:
url: jdbc:mysql://你的服务器IP:3306/ry-cloud? useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# 注意使用服务名mysql
username: root # MYSQL_USER需与RuoYi配置一致
password: root@123 # MYSQL_ROOT_PASSWORD需与RuoYi配置一致
# Redis配置
redis:
host: redis # 使用服务名redis
port: 6379
password: ruoyi@123 # command: redis-server –requirepass ruoyi@123 # Redis密码需与RuoYi配置一致
3. 将后端添加到 docker-compose.yml
services:
# … (原有mysql和redis配置)
backend:
build: ./backend # 指向Dockerfile所在目录
container_name: ruoyi-backend
depends_on:
– mysql
– redis
networks:
– ruoyi-net
environment:
TZ: Asia/Shanghai # 时区设置
五、部署前端(Vue + Nginx)
1. 编译前端文件
在本地开发环境执行:
npm run build:prod # 生成dist目录
将 dist 文件夹上传到服务器的 /opt/ruoyi/frontend
2. 编写前端Dockerfile
创建 frontend/Dockerfile
FROM nginx:1.21
COPY dist/ /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
3. 配置Nginx反向代理
创建 frontend/nginx.conf:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html; # 解决Vue路由History模式404
}
location /prod-api/ { # 前端请求代理到后端
proxy_pass http://backend:8080/; # 使用服务名backend
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
4. 将前端添加到 docker-compose.yml
services:
# … (原有配置)
frontend:
build: ./frontend
container_name: ruoyi-frontend
depends_on:
– backend
ports:
– "80:80" # 暴露前端端口
networks:
– ruoyi-net
六、启动全部服务
Docker 命令终极指南
cd /opt/ruoyi
docker-compose up -d –build # 构建镜像
七、验证部署
1. 检查容器状态
docker-compose ps # 所有容器应为running
2. 查看日志排查问题
docker logs ruoyi-backend # 检查后端启动日志
docker logs ruoyi-frontend # 检查Nginx配置
docker logs ….等
3. 访问测试
-
前端页面:http://你的服务器IP
-
后端接口:http://你的服务器IP/prod-api/xxxx
常见问题
1.检查MySQL用户权限
docker exec -it ruoyi-mysql mysql -u root -p
在MySQL服务器执行:
— 查看用户权限(替换实际用户名)
SELECT host, user FROM mysql.user WHERE user='root';
— 授权远程访问(如果需要)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root@123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
启动 mysql 容器
docker restart ruoyi-mysql
评论前必须登录!
注册