# Ragflow-Plus 外部服务设置教程
本文档详细介绍了 Ragflow-Plus 所需的外部基础设施服务的配置和设置。这些服务提供数据存储、搜索能力、对象存储和缓存功能,支持核心 RAG 操作。
有关 AI 模型配置,请参阅 AI 模型与 LLM 配置。有关 Docker 部署详情,请参阅 Docker 部署。
1. 概述 #
Ragflow-Plus 依赖四个主要的外部服务,它们构成了系统的基础设施骨干:
- MySQL - 关系型数据库,用于存储元数据、用户数据和系统配置
- Elasticsearch - 搜索引擎,用于文档索引和向量相似度搜索
- MinIO - S3 兼容的对象存储,用于文件、图像和二进制资源
- Redis - 内存缓存和消息队列,用于会话管理和任务协调
2. 服务架构 #
以下架构图展示了外部服务如何与 Ragflow-Plus 应用容器集成:
┌─────────────────────────────────────────┐
│ 应用层 (Application Layer) │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │ ragflow │ │ mgmt │ │ mgmt │ │
│ │ server │ │ frontend │ │backend│ │
│ └──────────┘ └──────────┘ └──────┘ │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ 外部服务 (External Services) │
│ ┌──────────┐ ┌──────────┐ ┌──────┐ │
│ │ MySQL │ │ Elastic │ │MinIO │ │
│ │ :3306 │ │ search │ │:9000 │ │
│ │ │ │ :9200 │ │ │ │
│ └──────────┘ └──────────┘ └──────┘ │
│ │
│ ┌──────────┐ │
│ │ Redis │ │
│ │ :6379 │ │
│ └──────────┘ │
└─────────────────────────────────────────┘3. MySQL 数据库配置 #
MySQL 作为主要的关系型数据库,存储用户账户、知识库元数据、文档信息和系统配置。
3.1 连接参数 #
| 参数 | 默认值 | 说明 |
|---|---|---|
| 主机 | mysql (Docker) / localhost (本地) |
数据库主机地址 |
| 端口 | 3306 (Docker) / 5455 (本地) |
数据库端口 |
| 数据库名 | rag_flow |
数据库名称 |
| 用户名 | root |
数据库用户名 |
| 密码 | infini_rag_flow |
数据库密码(可通过环境变量配置) |
3.2 环境变量配置 #
在 .env 文件或 Docker Compose 中配置:
# MySQL 配置
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DBNAME=rag_flow
MYSQL_USER=root
MYSQL_PASSWORD=infini_rag_flow3.3 Docker Compose 配置 #
mysql:
image: mysql:8.0
container_name: ragflow-mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-infini_rag_flow}
MYSQL_DATABASE: ${MYSQL_DBNAME:-rag_flow}
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- ragflow3.4 数据库初始化 #
系统首次启动时会自动创建必要的表结构。如果需要手动初始化,可以:
连接到 MySQL 容器:
docker exec -it ragflow-mysql mysql -uroot -p创建数据库(如果不存在):
CREATE DATABASE IF NOT EXISTS rag_flow CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.5 连接验证 #
验证 MySQL 连接是否正常:
# 在 Docker 环境中
docker exec -it ragflow-mysql mysql -uroot -p${MYSQL_PASSWORD} -e "SHOW DATABASES;"
# 在本地环境中
mysql -h localhost -P 5455 -uroot -p -e "SHOW DATABASES;"4. Elasticsearch 配置 #
Elasticsearch 提供文档索引和向量相似度搜索功能,是 RAG 系统的核心组件。
4.1 连接参数 #
| 参数 | 默认值 | 说明 |
|---|---|---|
| 主机 | es01 (Docker) / localhost (本地) |
Elasticsearch 主机地址 |
| 端口 | 9200 |
Elasticsearch HTTP 端口 |
| 用户名 | elastic |
Elasticsearch 用户名 |
| 密码 | infini_rag_flow |
Elasticsearch 密码(可通过环境变量配置) |
4.2 环境变量配置 #
# Elasticsearch 配置
ES_HOST=es01
ES_PORT=9200
ES_USER=elastic
ELASTIC_PASSWORD=infini_rag_flow
ES_USE_SSL=false4.3 Docker Compose 配置 #
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3
container_name: ragflow-es-01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms8g -Xmx8g"
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD:-infini_rag_flow}
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es01_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
networks:
- ragflow4.4 索引管理 #
系统会自动创建必要的索引。可以通过 API 查看索引状态:
# 查看所有索引
curl -u elastic:${ELASTIC_PASSWORD} http://localhost:9200/_cat/indices?v
# 查看集群健康状态
curl -u elastic:${ELASTIC_PASSWORD} http://localhost:9200/_cluster/health?pretty4.5 性能优化 #
对于生产环境,建议调整以下参数:
- 内存设置:根据服务器内存调整
ES_JAVA_OPTS(建议至少 4GB) - 分片设置:根据数据量调整索引分片数
- 副本设置:根据可用性需求设置副本数
5. MinIO 对象存储配置 #
MinIO 提供 S3 兼容的对象存储服务,用于存储文件、图像和二进制资源。
5.1 连接参数 #
| 参数 | 默认值 | 说明 |
|---|---|---|
| 主机 | minio (Docker) / localhost (本地) |
MinIO 主机地址 |
| 端口 | 9000 |
MinIO API 端口 |
| 控制台端口 | 9001 |
MinIO 控制台端口 |
| 访问密钥 | rag_flow |
MinIO 访问密钥 |
| 秘密密钥 | infini_rag_flow |
MinIO 秘密密钥 |
5.2 环境变量配置 #
# MinIO 配置
MINIO_HOST=minio
MINIO_PORT=9000
MINIO_USER=rag_flow
MINIO_PASSWORD=infini_rag_flow5.3 Docker Compose 配置 #
minio:
image: minio/minio:latest
container_name: ragflow-minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_USER:-rag_flow}
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD:-infini_rag_flow}
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
networks:
- ragflow5.4 存储桶配置 #
系统会自动创建必要的存储桶。可以通过 MinIO 控制台管理:
- 访问 MinIO 控制台:
http://localhost:9001 - 使用配置的用户名和密码登录
- 查看和管理存储桶
5.5 存储桶验证 #
验证存储桶是否创建成功:
# 使用 MinIO 客户端
mc alias set local http://localhost:9000 rag_flow infini_rag_flow
mc ls local/6. Redis 缓存配置 #
Redis 提供内存缓存和消息队列功能,用于会话管理和任务协调。
6.1 连接参数 #
| 参数 | 默认值 | 说明 |
|---|---|---|
| 主机 | redis (Docker) / localhost (本地) |
Redis 主机地址 |
| 端口 | 6379 |
Redis 端口 |
| 数据库 | 1 |
Redis 数据库编号 |
| 密码 | infini_rag_flow |
Redis 密码(可通过环境变量配置) |
6.2 环境变量配置 #
# Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=infini_rag_flow6.3 Docker Compose 配置 #
redis:
image: redis:7-alpine
container_name: ragflow-redis
command: redis-server --requirepass ${REDIS_PASSWORD:-infini_rag_flow}
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- ragflow6.4 连接验证 #
验证 Redis 连接是否正常:
# 在 Docker 环境中
docker exec -it ragflow-redis redis-cli -a ${REDIS_PASSWORD} PING
# 在本地环境中
redis-cli -h localhost -p 6379 -a ${REDIS_PASSWORD} PING6.5 缓存管理 #
查看 Redis 缓存状态:
# 查看所有键
redis-cli -a ${REDIS_PASSWORD} KEYS "*"
# 查看内存使用情况
redis-cli -a ${REDIS_PASSWORD} INFO memory7. 服务依赖关系 #
7.1 启动顺序 #
系统服务应按以下顺序启动:
- 基础设施服务:MySQL、Elasticsearch、MinIO、Redis
- 应用服务:ragflowplus-server、ragflowplus-management-backend
- 前端服务:ragflowplus-management-frontend
7.2 健康检查 #
系统提供了健康检查机制,确保服务正常运行:
# 检查所有服务状态
docker-compose ps
# 检查服务日志
docker-compose logs -f [service_name]7.3 服务连接测试 #
测试各个服务的连接:
# MySQL 连接测试
docker exec -it ragflow-mysql mysql -uroot -p${MYSQL_PASSWORD} -e "SELECT 1;"
# Elasticsearch 连接测试
curl -u elastic:${ELASTIC_PASSWORD} http://localhost:9200/
# MinIO 连接测试
curl http://localhost:9000/minio/health/live
# Redis 连接测试
docker exec -it ragflow-redis redis-cli -a ${REDIS_PASSWORD} PING8. 生产环境配置建议 #
8.1 安全配置 #
密码管理:
- 使用强密码
- 通过环境变量或密钥管理服务管理密码
- 定期轮换密码
网络隔离:
- 使用 Docker 网络隔离服务
- 限制外部访问端口
- 使用防火墙规则
SSL/TLS:
- 为 Elasticsearch 启用 SSL/TLS
- 为 MinIO 启用 HTTPS
- 使用证书管理工具
8.2 性能优化 #
MySQL:
- 调整
innodb_buffer_pool_size - 优化查询索引
- 定期清理日志
- 调整
Elasticsearch:
- 根据数据量调整堆内存
- 优化索引分片和副本
- 定期清理旧索引
MinIO:
- 使用分布式模式
- 配置存储策略
- 启用压缩
Redis:
- 配置内存限制
- 使用持久化策略
- 优化数据结构
8.3 备份策略 #
MySQL 备份:
# 定期备份数据库 docker exec ragflow-mysql mysqldump -uroot -p${MYSQL_PASSWORD} rag_flow > backup.sqlElasticsearch 备份:
- 使用快照和恢复功能
- 配置定期快照策略
MinIO 备份:
- 使用 MinIO 的复制功能
- 定期同步到其他存储
Redis 备份:
- 启用 RDB 或 AOF 持久化
- 定期备份持久化文件
9. 故障排除 #
9.1 常见问题 #
服务无法启动:
- 检查端口是否被占用
- 查看服务日志
- 验证环境变量配置
连接超时:
- 检查网络配置
- 验证服务是否正常运行
- 检查防火墙设置
认证失败:
- 验证用户名和密码
- 检查环境变量是否正确设置
- 查看服务日志
9.2 日志查看 #
查看各个服务的日志:
# MySQL 日志
docker logs ragflow-mysql
# Elasticsearch 日志
docker logs ragflow-es-01
# MinIO 日志
docker logs ragflow-minio
# Redis 日志
docker logs ragflow-redis9.3 性能监控 #
监控各个服务的性能指标:
# 查看容器资源使用
docker stats
# Elasticsearch 集群状态
curl -u elastic:${ELASTIC_PASSWORD} http://localhost:9200/_cluster/stats?pretty
# Redis 内存使用
redis-cli -a ${REDIS_PASSWORD} INFO memory10. 总结 #
外部服务是 Ragflow-Plus 系统的基础设施,正确配置和管理这些服务对于系统的稳定运行至关重要。本文档提供了:
- 四个核心外部服务的详细配置说明
- Docker 和本地环境的配置方法
- 生产环境的最佳实践
- 故障排除和性能优化建议
通过遵循本文档的指导,您可以成功配置和管理 Ragflow-Plus 所需的外部服务,确保系统的高可用性和性能。