【特别体验】 Ruoyi-AI项目Docker Compose部署架构深度解析
·
【特别体验】 Ruoyi-AI项目Docker Compose部署架构深度解析
引言:为什么选择Docker Compose部署AI应用?
在当今快速发展的AI应用开发领域,部署复杂度已成为开发者面临的主要挑战之一。传统部署方式需要手动配置数据库、缓存、向量数据库等多个组件,不仅耗时耗力,还容易因环境差异导致部署失败。RuoYi-AI项目通过Docker Compose技术,将复杂的AI应用部署简化为一条命令,真正实现了"快速部署"的愿景。
本文将深度解析RuoYi-AI项目的Docker Compose部署架构,帮助开发者理解其设计理念和技术实现。
整体架构概览
RuoYi-AI采用微服务架构设计,通过Docker Compose统一管理多个核心服务组件:
核心服务组件详解
1. 数据库服务(MySQL)
MySQL作为关系型数据库,存储应用的核心业务数据:
mysql:
image: mysql:8.0.33
container_name: ruoyi-ai-mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
volumes:
- ./mysql-init:/docker-entrypoint-initdb.d
- ./data/mysql:/var/lib/mysql
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
关键配置解析:
- 字符集配置:使用utf8mb4支持完整Unicode字符集
- 数据持久化:通过volume映射实现数据持久化存储
- 初始化脚本:自动执行mysql-init目录下的SQL脚本
2. 缓存服务(Redis)
Redis提供高性能缓存和会话管理:
redis:
image: redis:6.2
container_name: ruoyi-ai-redis
command: redis-server --appendonly yes ${REDIS_PASSWORD:+--requirepass ${REDIS_PASSWORD}}
volumes:
- ./data/redis:/data
特性说明:
- AOF持久化:确保数据安全性和可恢复性
- 密码保护:支持密码认证,增强安全性
- 数据持久化:Redis数据目录映射到宿主机
3. 向量数据库(Weaviate)
Weaviate作为AI应用的核心向量数据库,支持语义搜索和相似性检索:
weaviate:
image: semitechnologies/weaviate:1.30.0
container_name: ruoyi-ai-weaviate
environment:
- QUERY_DEFAULTS_LIMIT=${WEAVIATE_QUERY_LIMIT}
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=${WEAVIATE_ANONYMOUS_ACCESS}
- PERSISTENCE_DATA_PATH=${WEAVIATE_DATA_PATH}
- DEFAULT_VECTORIZER_MODULE=${WEAVIATE_VECTORIZER_MODULE}
- ENABLE_MODULES=${WEAVIATE_MODULES}
- CLUSTER_HOSTNAME=${WEAVIATE_CLUSTER_HOSTNAME}
ports:
- "50050:8080"
- "50051:50051"
volumes:
- ./data/weaviate:/var/lib/weaviate
核心功能:
- 向量化存储:支持多种向量化模块
- 语义搜索:基于向量的相似性检索
- 多协议支持:同时支持HTTP和gRPC协议
4. 后端服务(RuoYi-Backend)
Spring Boot构建的核心业务逻辑层:
ruoyi-backend:
image: ruoyi-ai-backend:v2.0.5
container_name: ruoyi-ai-backend
ports:
- "${BACKEND_SERVER_PORT}:${BACKEND_SERVER_PORT}"
volumes:
- ./data/logs:/ruoyi/server/logs
depends_on:
- mysql
- redis
依赖关系:
- 依赖于MySQL和Redis服务启动完成
- 日志文件映射到宿主机便于排查问题
5. 管理界面(RuoYi-Admin)和Web界面(RuoYi-Web)
前端用户界面服务:
ruoyi-admin:
image: ruoyi-ai-admin:v2.0.5
container_name: ruoyi-ai-admin
ports:
- "${ADMIN_SERVER_PORT}:80"
depends_on:
- ruoyi-backend
ruoyi-web:
image: ruoyi-ai-web:v2.0.5
container_name: ruoyi-ai-web
ports:
- "${WEB_SERVER_PORT}:80"
depends_on:
- ruoyi-backend
网络架构设计
RuoYi-AI采用Docker bridge网络模式,确保服务间安全通信:
networks:
ruoyi-net:
driver: bridge
网络优势:
- 服务隔离:内部服务通过容器网络通信,增强安全性
- 端口管理:外部访问通过映射端口,内部使用容器网络
- 服务发现:通过容器名称进行服务发现
环境变量配置体系
项目采用分层环境变量配置,支持灵活部署:
环境变量文件示例(.env)
# MySQL配置
MYSQL_ROOT_PASSWORD=your_mysql_password
MYSQL_DATABASE=ruoyi_ai
MYSQL_PORT=3306
# Redis配置
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
REDIS_DATABASE=0
# Weaviate配置
WEAVIATE_QUERY_LIMIT=25
WEAVIATE_ANONYMOUS_ACCESS=true
WEAVIATE_DATA_PATH=/var/lib/weaviate
WEAVIATE_VECTORIZER_MODULE=none
WEAVIATE_MODULES=
WEAVIATE_CLUSTER_HOSTNAME=node1
# 应用端口配置
BACKEND_SERVER_PORT=8080
ADMIN_SERVER_PORT=8082
WEB_SERVER_PORT=8081
数据持久化策略
所有关键数据都通过volume映射实现持久化存储:
- MySQL数据目录:
./data/mysql - Redis数据目录:
./data/redis - Weaviate数据目录:
./data/weaviate - 应用日志目录:
./data/logs
部署流程详解
1. 准备阶段
# 克隆项目
git clone https://gitcode.com/ageerle/ruoyi-ai
# 进入部署目录
cd ruoyi-ai/script/deploy/deploy
2. 配置环境变量
# 复制环境变量模板
cp .env.example .env
# 编辑环境变量配置
vi .env
3. 启动服务
# 一键启动所有服务
docker-compose up -d
4. 验证部署
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
性能优化建议
1. 资源分配策略
| 服务 | 建议内存 | 建议CPU | 备注 |
|---|---|---|---|
| MySQL | 2GB | 2核心 | 根据数据量调整 |
| Redis | 1GB | 1核心 | 缓存服务 |
| Weaviate | 4GB | 2核心 | 向量计算密集型 |
| Backend | 2GB | 2核心 | 业务逻辑处理 |
| Admin/Web | 512MB | 1核心 | 前端界面 |
2. 网络优化
# 在docker-compose.yaml中添加资源限制
services:
mysql:
deploy:
resources:
limits:
memory: 2G
cpus: '2'
reservations:
memory: 1G
cpus: '1'
故障排查指南
常见问题及解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| MySQL启动失败 | 权限问题或端口冲突 | 检查data目录权限,修改端口 |
| Redis连接超时 | 密码配置错误 | 检查REDIS_PASSWORD配置 |
| Weaviate服务异常 | 内存不足 | 增加内存分配或调整向量化配置 |
| 后端服务依赖错误 | 服务启动顺序问题 | 使用depends_on确保依赖服务就绪 |
日志查看命令
# 查看特定服务日志
docker-compose logs mysql
docker-compose logs redis
docker-compose logs weaviate
# 实时跟踪日志
docker-compose logs -f ruoyi-backend
安全最佳实践
1. 网络安全配置
# 限制外部访问,仅暴露必要端口
services:
mysql:
ports:
- "127.0.0.1:3306:3306" # 仅本地访问
redis:
ports:
- "127.0.0.1:6379:6379" # 仅本地访问
2. 数据加密
- 使用TLS加密数据库连接
- 配置Redis SSL连接
- 敏感信息通过环境变量管理
扩展与定制
1. 自定义服务配置
# 添加监控服务
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- ruoyi-net
2. 多环境部署
通过不同的compose文件支持多环境:
docker-compose.yml- 开发环境docker-compose.prod.yml- 生产环境docker-compose.test.yml- 测试环境
总结与展望
RuoYi-AI项目的Docker Compose部署架构体现了现代云原生应用的最佳实践:
- 服务解耦:每个组件独立容器化,便于维护和扩展
- 配置集中:通过环境变量统一管理配置,支持多环境部署
- 数据持久化:关键数据通过volume实现持久化存储
- 网络隔离:内部服务通过专用网络通信,增强安全性
- 依赖管理:通过depends_on确保服务启动顺序
这种架构不仅简化了部署流程,还为后续的弹性扩缩容、服务网格集成、持续部署等高级特性奠定了基础。随着AI技术的不断发展,这种基于容器化的部署方式将成为AI应用开发的标准实践。
通过本文的深度解析,相信开发者能够更好地理解RuoYi-AI项目的部署架构,并在实际项目中灵活运用这些最佳实践,构建更加稳定、高效的AI应用系统。
更多推荐


所有评论(0)