RuoYi-Vue容器化:Docker部署全流程
·
RuoYi-Vue容器化:Docker部署全流程
前言:为什么选择Docker部署?
还在为RuoYi-Vue项目的环境配置、依赖冲突、部署复杂而头疼吗?传统部署方式需要手动安装JDK、Node.js、MySQL、Redis等组件,配置繁琐且容易出错。Docker容器化部署为您提供了一站式解决方案,实现:
- ✅ 环境一致性:开发、测试、生产环境完全一致
- ✅ 快速部署:一键启动,分钟级完成部署
- ✅ 资源隔离:各服务独立运行,互不干扰
- ✅ 易于扩展:支持水平扩展和负载均衡
- ✅ 版本管理:镜像版本控制,轻松回滚
本文将带您从零开始,完整实现RuoYi-Vue项目的Docker容器化部署。
环境准备与工具安装
系统要求
- Linux/Windows/macOS系统
- Docker 20.10+
- Docker Compose 2.0+
Docker安装指南
Ubuntu/CentOS系统
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker run hello-world
Windows系统
- 下载Docker Desktop for Windows
- 双击安装包完成安装
- 重启计算机后启动Docker Desktop
macOS系统
- 下载Docker Desktop for Mac
- 拖拽应用到Applications文件夹
- 启动Docker应用
Docker Compose安装
# Linux系统
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
项目结构分析与Docker化规划
RuoYi-Vue架构概览
容器服务依赖关系
| 服务名称 | 技术栈 | 端口 | 依赖服务 |
|---|---|---|---|
| ruoyi-ui | Vue.js + Node.js | 80 | ruoyi-admin |
| ruoyi-admin | SpringBoot + JDK8 | 8080 | mysql, redis |
| mysql | MySQL 5.7/8.0 | 3306 | - |
| redis | Redis 6.x | 6379 | - |
Dockerfile编写与镜像构建
后端Dockerfile (ruoyi-admin)
创建 Dockerfile 文件:
# 后端Dockerfile
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 添加构建好的jar包
COPY ruoyi-admin/target/ruoyi-admin.jar app.jar
# 暴露端口
EXPOSE 8080
# 设置JVM参数
ENV JAVA_OPTS="-Xms512m -Xmx1024m -Dspring.profiles.active=prod"
# 启动应用
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
前端Dockerfile (ruoyi-ui)
创建 ruoyi-ui/Dockerfile 文件:
# 前端Dockerfile
FROM node:16-alpine as builder
# 设置工作目录
WORKDIR /app
# 复制package文件
COPY package*.json ./
# 安装依赖
RUN npm install --registry=https://registry.npmmirror.org
# 复制源代码
COPY . .
# 构建生产版本
RUN npm run build:prod
# 生产阶段
FROM nginx:alpine
# 复制构建好的文件
COPY --from=builder /app/dist /usr/share/nginx/html
# 复制nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露端口
EXPOSE 80
# 启动nginx
CMD ["nginx", "-g", "daemon off;"]
Nginx配置文件
创建 ruoyi-ui/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;
}
# 后端API代理
location /prod-api/ {
proxy_pass http://ruoyi-admin:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
Docker Compose编排配置
创建 docker-compose.yml 文件:
version: '3.8'
services:
# MySQL数据库服务
mysql:
image: mysql:8.0
container_name: ruoyi-mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: ry-vue
MYSQL_USER: ruoyi
MYSQL_PASSWORD: RuoYi@123
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./sql:/docker-entrypoint-initdb.d
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--default-authentication-plugin=mysql_native_password
networks:
- ruoyi-network
restart: unless-stopped
# Redis缓存服务
redis:
image: redis:6-alpine
container_name: ruoyi-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes --requirepass 123456
networks:
- ruoyi-network
restart: unless-stopped
# 后端SpringBoot应用
ruoyi-admin:
build:
context: .
dockerfile: Dockerfile
container_name: ruoyi-admin
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
- SPRING_DATASOURCE_USERNAME=ruoyi
- SPRING_DATASOURCE_PASSWORD=RuoYi@123
- SPRING_REDIS_HOST=redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_PASSWORD=123456
ports:
- "8080:8080"
depends_on:
- mysql
- redis
networks:
- ruoyi-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 30s
timeout: 10s
retries: 3
# 前端Vue应用
ruoyi-ui:
build:
context: ./ruoyi-ui
dockerfile: Dockerfile
container_name: ruoyi-ui
ports:
- "80:80"
depends_on:
- ruoyi-admin
networks:
- ruoyi-network
restart: unless-stopped
# 数据卷定义
volumes:
mysql_data:
driver: local
redis_data:
driver: local
# 网络定义
networks:
ruoyi-network:
driver: bridge
环境配置文件调整
后端应用配置
修改 ruoyi-admin/src/main/resources/application-docker.yml:
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ruoyi
password: RuoYi@123
# Redis配置
redis:
host: redis
port: 6379
password: 123456
database: 0
timeout: 3000ms
lettuce:
pool:
max-active: 20
max-wait: -1ms
max-idle: 8
min-idle: 0
# 日志配置
logging:
level:
com.ruoyi: debug
file:
name: logs/ruoyi-admin.log
# 跨域配置(用于Docker环境)
cors:
allowed-origins: http://localhost:80,http://ruoyi-ui:80
allowed-methods: GET,POST,PUT,DELETE,OPTIONS
allowed-headers: "*"
allow-credentials: true
前端环境配置
创建 ruoyi-ui/.env.docker 文件:
# 后端API地址(Docker内部网络)
VUE_APP_BASE_API = /prod-api
VUE_APP_WS_API = ws://localhost/prod-api
# 构建配置
NODE_ENV = production
构建与部署流程
1. 项目构建
# 克隆项目
git clone https://gitcode.com/yangzongzhuan/RuoYi-Vue.git
cd RuoYi-Vue
# 后端构建
mvn clean package -DskipTests
# 前端构建(可选,Docker构建时会自动执行)
cd ruoyi-ui
npm install --registry=https://registry.npmmirror.org
npm run build:prod
cd ..
2. Docker镜像构建
# 构建所有服务镜像
docker-compose build
# 或者分别构建
docker build -t ruoyi-admin .
docker build -t ruoyi-ui ./ruoyi-ui
3. 启动服务
# 一键启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
4. 服务验证
# 检查容器运行状态
docker ps
# 验证前端服务
curl http://localhost
# 验证后端API
curl http://localhost:8080
# 验证数据库连接
docker exec -it ruoyi-mysql mysql -uruoyi -pRuoYi@123 ry-vue
# 验证Redis连接
docker exec -it ruoyi-redis redis-cli -a 123456
生产环境部署优化
1. 使用Docker Swarm或Kubernetes
创建 docker-stack.yml:
version: '3.8'
services:
mysql:
image: mysql:8.0
deploy:
replicas: 1
resources:
limits:
memory: 1G
reservations:
memory: 512M
# ... 其他配置
ruoyi-admin:
image: ruoyi-admin:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
resources:
limits:
memory: 2G
reservations:
memory: 1G
# ... 其他配置
2. 健康检查与监控
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
3. 日志管理
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
常见问题与解决方案
1. 数据库连接问题
# 检查数据库容器是否正常运行
docker logs ruoyi-mysql
# 检查数据库用户权限
docker exec -it ruoyi-mysql mysql -uroot -p123456
GRANT ALL PRIVILEGES ON *.* TO 'ruoyi'@'%';
FLUSH PRIVILEGES;
2. 内存不足问题
# 调整JVM内存参数
environment:
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m
3. 端口冲突问题
# 修改端口映射
ports:
- "8081:8080" # 主机端口:容器端口
4. 构建缓存清理
# 清理Docker构建缓存
docker system prune -a
# 重新构建指定服务
docker-compose build --no-cache ruoyi-admin
性能优化建议
1. 镜像优化
# 使用多阶段构建减少镜像大小
FROM openjdk:8-jdk-alpine as builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
FROM openjdk:8-jre-alpine
COPY --from=builder /app/ruoyi-admin/target/ruoyi-admin.jar /app.jar
2. 数据库优化
# MySQL配置优化
command:
--innodb-buffer-pool-size=512M
--innodb-log-file-size=256M
--max-connections=200
3. 前端资源优化
# Gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
安全最佳实践
1. 使用环境变量文件
创建 .env 文件:
MYSQL_ROOT_PASSWORD=your_secure_password
MYSQL_PASSWORD=your_secure_password
REDIS_PASSWORD=your_secure_password
2. 网络隔离
networks:
ruoyi-internal:
internal: true
ruoyi-external:
driver: bridge
3. 镜像扫描
# 使用Trivy扫描镜像漏洞
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image ruoyi-admin:latest
总结
通过本文的Docker容器化部署方案,您已经掌握了RuoYi-Vue项目的现代化部署方式。这种方案带来了以下优势:
- 标准化部署:统一的Dockerfile和Compose配置
- 环境一致性:消除"在我机器上能运行"的问题
- 快速扩展:轻松实现水平扩展和负载均衡
- 易于维护:版本化的镜像管理和一键回滚
- 资源优化:合理的资源分配和性能调优
现在,您可以自信地将RuoYi-Vue项目部署到任何支持Docker的环境中,享受容器化带来的便利和效率提升。
下一步建议:
- 探索Kubernetes集群部署
- 实现CI/CD自动化流水线
- 设置监控告警系统
- 建立备份恢复机制
祝您部署顺利!如有问题,欢迎在社区交流讨论。
更多推荐


所有评论(0)