同一台服务器同时部署Dify 与 ragflow
时间: 2025-07-25 15:31:35 浏览: 14
<think>我们正在处理用户关于在同一台服务器上同时部署Dify和RAGFlow的问题。根据引用内容,主要存在两个冲突:端口冲突和Redis容器冲突。下面将逐步解决这两个问题。
### 解决端口冲突
Dify和RAGFlow默认都使用80和443端口,因此需要修改其中一个应用的端口映射。根据引用[1],可以通过修改RAGFlow的`docker-compose.yml`和`docker-compose-gpu.yml`文件中的端口映射来实现。例如,将RAGFlow的HTTP端口映射到宿主机的其他端口(如8880和4443):
```yaml
ports:
- ${SVR_HTTP_PORT}:9380 # RAGFlow的服务端口,一般不需要修改
- 8880:80 # 将容器内的80端口映射到宿主机的8880
- 4443:443 # 将容器内的443端口映射到宿主机的4443
```
这样,访问RAGFlow时就需要使用`http://服务器IP:8880`和`https://服务器IP:4443`。
### 解决Redis容器冲突
根据引用[2]和[3],当同时部署Dify和RAGFlow时,它们的Redis容器会冲突,因为默认情况下,两个项目都使用相同的Redis容器名称(或服务名称)和网络设置,导致其中一个Redis容器被覆盖或删除。
解决方法是为每个项目指定不同的项目名称(project name),这样Docker会为每个项目创建独立的网络和容器命名空间。具体操作如下:
1. **对于RAGFlow**:在启动时使用`-p`参数指定项目名称,例如`ragflow`:
```bash
sudo docker compose -f ragflow-compose.yml -p ragflow up -d
```
2. **对于Dify**:同样,在启动时指定一个不同的项目名称(例如`dify`),或者如果已经启动,可以修改其`docker-compose.yml`所在目录下的启动命令:
```bash
docker compose -p dify up -d
```
这样,两个项目的Redis容器就会分别属于不同的项目,不会相互冲突。
### 完整部署步骤
1. **部署Dify**:
- 进入Dify的Docker部署目录。
- 使用指定项目名称启动:
```bash
docker compose -p dify up -d
```
2. **部署RAGFlow**:
- 修改RAGFlow的`docker-compose.yml`(或`docker-compose-gpu.yml`)文件,更改端口映射(如上述端口修改)。
- 进入RAGFlow的Docker部署目录。
- 使用指定项目名称启动:
```bash
sudo docker compose -f ragflow-compose.yml -p ragflow up -d
```
### 验证
- 检查Dify和RAGFlow的容器是否都正常运行:
```bash
docker ps -a
```
应该看到两个项目(dify和ragflow)的容器都在运行。
- 分别通过各自的端口访问服务。
### 注意事项
- 如果之前已经启动过其中一个服务,可能需要先清理旧的容器。可以使用`docker compose -p <项目名> down`来停止并移除指定项目的容器。
- 确保宿主机的端口(如8880和4443)没有被其他程序占用。
通过以上步骤,应该可以在同一台服务器上成功部署Dify和RAGFlow。
§§相关问题§§
1. 如何修改Docker容器的端口映射?
2. 如何管理多个Docker Compose项目?
3. Docker容器网络冲突的常见解决方法有哪些?</think>### 在同一台服务器同时部署 Dify 和 RAGFlow 的解决方案
#### 一、解决端口冲突(核心问题)
Dify 和 RAGFlow 默认都使用 **80(HTTP) 和 443(HTTPS)** 端口,需修改其中一个应用的端口映射:
```yaml
# 修改 RAGFlow 的 docker-compose.yml
services:
ragflow:
ports:
- "8880:80" # 将容器80端口映射到宿主机8880
- "4443:443" # 将容器443端口映射到宿主机4443
# 保留原服务端口不变
- "${SVR_HTTP_PORT}:9380"
```
**操作步骤**:
1. 定位 RAGFlow 的 `docker-compose.yml` 或 `docker-compose-gpu.yml`
2. 修改 `ports` 配置为上述端口映射
3. 访问 RAGFlow 时使用新端口:`http://服务器IP:8880`
> 引用说明:端口冲突解决方案参考了用户提供的修改方案[^1]
---
#### 二、解决 Redis 容器冲突(关键问题)
当两个服务同时启动时,Redis 容器会因**命名冲突**被覆盖,需隔离项目环境:
```bash
# 启动时指定独立项目名称
# 启动 Dify
docker compose -p dify-project up -d
# 启动 RAGFlow
docker compose -f ragflow-compose.yml -p ragflow-project up -d
```
**效果**:
- 为每个项目创建独立命名空间
- 容器名称变为 `ragflow-project-redis-1` 和 `dify-project-redis-1`
- 避免执行 `docker compose down` 时误删对方容器
> 引用说明:Redis 冲突解决方案借鉴了项目隔离方法[^2][^3]
---
#### 三、完整操作流程
1. **部署 Dify**:
```bash
cd dify-docker-directory
docker compose -p dify-project up -d
```
2. **修改 RAGFlow 配置**:
- 编辑 `docker-compose.yml` 修改端口映射
- 更新环境变量中的访问地址(如需)
3. **部署 RAGFlow**:
```bash
cd ragflow-docker-directory
docker compose -f ragflow-compose.yml -p ragflow-project up -d
```
4. **验证服务**:
```bash
docker ps -a | grep -E "dify-project|ragflow-project"
```
应看到两组容器正常运行,端口无冲突
---
#### 四、注意事项
1. **网络互通**:若需相互访问,在 `docker-compose.yml` 中添加相同自定义网络
```yaml
networks:
my-net:
driver: bridge
```
2. **资源分配**:建议服务器配置 ≥4核CPU/8GB内存
3. **防火墙**:开放新端口(8880/4443)
4. **反向代理**:可通过 Nginx 统一管理入口
```nginx
server {
listen 80;
server_name dify.example.com;
location / { proxy_pass http://localhost:80; } # Dify默认端口
}
server {
listen 80;
server_name ragflow.example.com;
location / { proxy_pass http://localhost:8880; } # RAGFlow新端口
}
```
> 实测效果:通过端口隔离和项目命名空间隔离,可稳定同时运行[^3]
阅读全文
相关推荐

















