# ragflow-docker
**Repository Path**: hulu_fly/ragflow-docker
## Basic Information
- **Project Name**: ragflow-docker
- **Description**: ragflow docker 部署
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-01
- **Last Updated**: 2026-06-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# README
📗 目录
- 🐳 [Docker Compose](#-docker-compose)
- 🐬 [Docker 环境变量](#-docker-环境变量)
- 🐋 [服务配置](#-服务配置)
- 📋 [配置示例](#-配置示例)
## 🐳 Docker Compose
- **docker-compose.yml**
搭建 RAGFlow 及其依赖项的运行环境。
- **docker-compose-base.yml**
搭建 RAGFlow 依赖服务的运行环境:Elasticsearch/[Infinity](https://github.com/infiniflow/infinity)、MySQL、MinIO 和 Redis。
> [!CAUTION]
> 我们不再主动维护 **docker-compose-CN-oc9.yml** 和 **docker-compose-macos.yml**,请自行承担使用风险。不过,欢迎您提交 Pull Request 来改进这些文件。
## 🐬 Docker 环境变量
[.env](./.env) 文件包含 Docker 的重要环境变量。
### Elasticsearch
- `STACK_VERSION`
Elasticsearch 的版本。默认值为 `8.11.3`。
- `ES_PORT`
将 Elasticsearch 服务暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的服务。默认值为 `1200`。
- `ELASTIC_PASSWORD`
Elasticsearch 的密码。
### Kibana
- `KIBANA_PORT`
将 Kibana 服务暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的服务。默认值为 `6601`。
- `KIBANA_USER`
Kibana 的用户名。默认值为 `rag_flow`。
- `KIBANA_PASSWORD`
Kibana 的密码。默认值为 `infini_rag_flow`。
### 资源管理
- `MEM_LIMIT`
特定 Docker 容器在运行时可以使用的最大内存量(字节)。默认值为 `8073741824`。
### MySQL
- `MYSQL_PASSWORD`
MySQL 的密码。
- `MYSQL_PORT`
从 RAGFlow 容器连接 MySQL 的端口。默认值为 `3306`。如果使用外部 MySQL,请修改此值。
- `EXPOSE_MYSQL_PORT`
将 MySQL 服务暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的 MySQL 数据库。默认值为 `5455`。
### MinIO
- `MINIO_CONSOLE_PORT`
将 MinIO 控制台界面暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的 Web 控制台。默认值为 `9001`。
- `MINIO_PORT`
将 MinIO API 服务暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的 MinIO 对象存储服务。默认值为 `9000`。
- `MINIO_USER`
MinIO 的用户名。
- `MINIO_PASSWORD`
MinIO 的密码。
### Redis
- `REDIS_PORT`
将 Redis 服务暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的 Redis 服务。默认值为 `6379`。
- `REDIS_PASSWORD`
Redis 的密码。
### RAGFlow
- `SVR_HTTP_PORT`
将 RAGFlow 的 HTTP API 服务暴露到宿主机的端口,允许**外部**访问 Docker 容器内运行的服务。默认值为 `9380`。
- `SVR_WEB_HTTP_PORT`
将 RAGFlow 的 Web 界面(HTTP)暴露到宿主机的端口。默认值为 `80`。
- `SVR_WEB_HTTPS_PORT`
将 RAGFlow 的 Web 界面(HTTPS)暴露到宿主机的端口。默认值为 `443`。
- `API_PROXY_SCHEME`
nginx 后端路由模式。默认值为 `python`(纯 Python 后端)。可选值:
- `python`:所有 API 请求转发给 Python 服务器
- `hybrid`:Python + Go 混合模式,按路径分发
- `go`:全部转发给 Go 服务器
- `RAGFLOW_IMAGE`
Docker 镜像版本。默认值为 `infiniflow/ragflow:v0.25.6`。RAGFlow Docker 镜像不包含嵌入模型。
> [!TIP]
> 如果无法下载 RAGFlow Docker 镜像,可以尝试以下镜像源。
>
> - 对于 `nightly` 版本:
> - `RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:nightly` 或
> - `RAGFLOW_IMAGE=registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:nightly`。
### 时区
- `TZ`
本地时区。默认值为 `'Asia/Shanghai'`。
### Hugging Face 镜像站点
- `HF_ENDPOINT`
huggingface.co 的镜像站点。默认禁用。如果您访问 Hugging Face 主域名受限,可以取消该行的注释来启用。
### macOS
- `MACOS`
macOS 优化选项。默认禁用。如果您的操作系统是 macOS,可以取消该行的注释来启用。
### 最大文件大小
- `MAX_CONTENT_LENGTH`
每个上传文件的最大文件大小(字节)。如果您希望更改 128MB 的文件大小限制,可以取消该行的注释。更改后,请确保同步更新 `nginx/nginx.conf` 中的 `client_max_body_size` 值。
### 文档批量处理大小
- `DOC_BULK_SIZE`
文档解析时单批次处理的文档分块数。默认值为 `4`。
### 嵌入批量处理大小
- `EMBEDDING_BATCH_SIZE`
嵌入向量化时单批次处理的文本分块数。默认值为 `16`。
## 🐋 服务配置
[service_conf.yaml](./service_conf.yaml) 指定了 RAGFlow 的系统级配置,供其 API 服务器和任务执行器使用。在 Docker 化部署中,该文件会根据 [service_conf.yaml.template](./service_conf.yaml.template) 文件自动生成(将所有环境变量替换为其实际值)。
- `ragflow`
- `host`:API 服务器在 Docker 容器内的 IP 地址。默认值为 `0.0.0.0`。
- `port`:API 服务器在 Docker 容器内的服务端口。默认值为 `9380`。
- `mysql`
- `name`:MySQL 数据库名称。默认值为 `rag_flow`。
- `user`:MySQL 的用户名。
- `password`:MySQL 的密码。
- `port`:MySQL 在 Docker 容器内的服务端口。默认值为 `3306`。
- `max_connections`:MySQL 数据库的最大并发连接数。默认值为 `100`。
- `stale_timeout`:超时时间(秒)。
- `minio`
- `user`:MinIO 的用户名。
- `password`:MinIO 的密码。
- `host`:MinIO 在 Docker 容器内的服务 IP *和*端口。默认值为 `minio:9000`。
- `oceanbase`
- `scheme`:连接方案。设置为 `mysql` 则使用 MySQL 配置,设置为其他值则使用下方配置。
- `config`:
- `db_name`:OceanBase 数据库名称。
- `user`:OceanBase 的用户名。
- `password`:OceanBase 的密码。
- `host`:OceanBase 服务的主机名。
- `port`:OceanBase 的端口。
- `oss`
- `access_key`:用于向 OSS 服务发起认证请求的 Access Key ID。
- `secret_key`:用于向 OSS 服务发起认证请求的 Secret Access Key。
- `endpoint_url`:OSS 服务端点的 URL。
- `region`:OSS Bucket 所在的区域。
- `bucket`:文件存储所在的 OSS Bucket 名称。当您希望将所有文件存储在指定 Bucket 中时,需要配置此项。
- `prefix_path`:可选。在 OSS Bucket 中为文件名添加的前缀路径,有助于组织 Bucket 中的文件。
- `s3`:
- `access_key`:用于向 S3 服务发起认证请求的 Access Key ID。
- `secret_key`:用于向 S3 服务发起认证请求的 Secret Access Key。
- `endpoint_url`:兼容 S3 协议的服务端点 URL。当使用 S3 兼容协议而非默认的 AWS S3 端点时,需要配置此项。
- `bucket`:文件存储所在的 S3 Bucket 名称。当您希望将所有文件存储在指定 Bucket 中时,需要配置此项。
- `region`:S3 Bucket 所在的 AWS 区域。这对于将请求导向正确的数据中心非常重要。
- `signature_version`:可选。用于认证请求的签名版本,常用版本包括 `v4`。
- `addressing_style`:可选。S3 端点的寻址风格,可选 `path` 或 `virtual`。
- `prefix_path`:可选。在 S3 Bucket 中为文件名添加的前缀路径,有助于组织 Bucket 中的文件。
- `oauth`
使用第三方账号注册或登录 RAGFlow 的 OAuth 配置。
- ``:自定义渠道 ID。
- `type`:认证类型,可选值包括 `oauth2`、`oidc`、`github`。默认为 `oauth2`,当提供 `issuer` 参数时默认为 `oidc`。
- `icon`:图标 ID,可选值包括 `github`、`sso`,默认为 `sso`。
- `display_name`:渠道名称,默认为渠道 ID 的首字母大写格式。
- `client_id`:必需,分配给客户端应用的唯一标识符。
- `client_secret`:必需,客户端应用的密钥,用于与认证服务器的通信。
- `authorization_url`:获取用户授权的基础 URL。
- `token_url`:用于交换授权码并获取访问令牌的 URL。
- `userinfo_url`:用于获取用户信息(用户名、邮箱等)的 URL。
- `issuer`:身份提供商的基础 URL。OIDC 客户端可以通过 `issuer` 动态获取身份提供商的元数据(`authorization_url`、`token_url`、`userinfo_url`)。
- `scope`:请求的权限范围,以空格分隔的字符串。例如 `openid profile email`。
- `redirect_uri`:必需,认证流程中授权服务器重定向以返回结果的 URI。必须与在认证服务器上注册的回调 URI 匹配。格式:`https://your-app.com/v1/user/oauth/callback/`。对于本地配置,可直接使用 `http://127.0.0.1:80/v1/user/oauth/callback/`。
- `user_default_llm`
新 RAGFlow 用户使用的默认 LLM。默认禁用。要启用此功能,请取消 **service_conf.yaml.template** 中对应行的注释。
- `factory`:LLM 供应商。可选值:
- `"OpenAI"`
- `"DeepSeek"`
- `"Moonshot"`
- `"Tongyi-Qianwen"`
- `"VolcEngine"`
- `"ZHIPU-AI"`
- `api_key`:指定 LLM 的 API 密钥。您需要在线申请您的模型 API 密钥。
> [!TIP]
> 如果您未在此处设置默认 LLM,请在 RAGFlow 界面的**设置**页面中配置默认 LLM。
## 📋 配置示例
### 🔒 HTTPS 配置
#### 前置条件
- 一个指向您服务器的已注册域名
- 服务器上开放 80 和 443 端口
- 已安装 Docker 和 Docker Compose
#### 获取和配置证书(Let's Encrypt)
如果您希望实例通过 `https` 访问,请按以下步骤操作:
1. **安装 Certbot 并获取证书**
```bash
# Ubuntu/Debian
sudo apt update && sudo apt install certbot
# CentOS/RHEL
sudo yum install certbot
# 获取证书(请替换为您实际的域名)
sudo certbot certonly --standalone -d your-ragflow-domain.com
```
2. **定位证书文件**
生成后,证书文件位于:
- 证书:`/etc/letsencrypt/live/your-ragflow-domain.com/fullchain.pem`
- 私钥:`/etc/letsencrypt/live/your-ragflow-domain.com/privkey.pem`
3. **更新 docker-compose.yml**
在 `docker-compose.yml` 中为 `ragflow-cpu`(以及 `ragflow-gpu`,如使用 GPU)服务添加证书和 nginx 配置挂载:
```yaml
services:
ragflow-cpu:
# ...现有配置...
volumes:
# ...其他现有卷挂载...
# SSL 证书
- /etc/letsencrypt/live/your-ragflow-domain.com/fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
- /etc/letsencrypt/live/your-ragflow-domain.com/privkey.pem:/etc/nginx/ssl/privkey.pem:ro
# HTTPS nginx 配置(挂载到不同路径,防止被 entrypoint.sh 覆盖)
- ./nginx/ragflow.https.conf:/etc/nginx/ragflow.https.conf:ro
- ./nginx/proxy.conf:/etc/nginx/proxy.conf:ro
```
4. **更新 nginx 配置**
编辑 `nginx/ragflow.https.conf`,将 `your-ragflow-domain.com` 替换为您实际的域名。
5. **更新 entrypoint.sh**
`entrypoint.sh` 启动时会自动选择 nginx 配置,需要加入 HTTPS 优先检测,防止 HTTP 配置覆盖 HTTPS 配置。在 nginx 配置选择段(约第 182 行起)的最前面插入:
```bash
HTTPS_CONF="/etc/nginx/ragflow.https.conf"
# Check if HTTPS is enabled (certificate files + https conf exist)
if [ -f "/etc/nginx/ssl/fullchain.pem" ] && [ -f "${HTTPS_CONF}" ]; then
cp -f "${HTTPS_CONF}" "$NGINX_CONF_DIR/ragflow.conf"
echo "HTTPS mode detected: applied nginx config from ragflow.https.conf"
elif [ -n "$API_PROXY_SCHEME" ]; then # 将原来的 if 改为 elif
# ... 原有逻辑保持不变 ...
```
6. **重启服务**
```bash
docker-compose down
docker-compose up -d
```
> [!IMPORTANT]
> - 确保您的域名 DNS A 记录指向服务器的 IP 地址
> - 使用 `--standalone` 模式获取证书前,请停止占用 80/443 端口的服务
> [!TIP]
> 对于开发或测试环境,可以使用自签名证书,但浏览器会显示安全警告。
#### 替代方案:使用已有证书
如果您已经拥有其他提供商签发的 SSL 证书:
1. 将证书文件放置在 Docker 可访问的目录中
2. 更新 `docker-compose.yml` 中的卷路径,指向您的证书文件
3. 确保证书文件包含完整的证书链
4. 按照上方 Let's Encrypt 指南的步骤 4-6 继续操作