Dify本地docker部署踩坑记录

Docker 部署 Dify 学习笔记

一、环境准备

1.1 系统环境

  • 操作系统:Ubuntu 22.04 (Linux)
  • Docker:已安装
  • Docker Compose:已安装

1.2 Docker 配置

配置国内镜像源加速镜像拉取:

json 复制代码
{
  "registry-mirrors": ["https://docker.1ms.run"]
}

配置文件位置:/etc/docker/daemon.json

配置后重启 Docker:

bash 复制代码
sudo systemctl restart docker

二、下载 Dify

2.1 下载官方安装包

bash 复制代码
cd /www
wget https://github.com/langgenius/dify/releases/download/v1.11.4/dify-docker-linux-x86_64.tar.gz

2.2 解压安装包

bash 复制代码
tar -xzf dify-docker-linux-x86_64.tar.gz
cd dify/docker

三、配置环境变量

3.1 配置文件说明

  • 主配置文件:.env(1532 行)
  • 模板文件:.env.example
  • Docker Compose 文件:docker-compose.yaml

3.2 关键配置项

端口配置(重要)

默认端口:

env 复制代码
EXPOSE_NGINX_PORT=80          # HTTP 端口
EXPOSE_NGINX_SSL_PORT=443     # HTTPS 端口

如果 80/443 端口被占用(如 Caddy),需要修改:

env 复制代码
EXPOSE_NGINX_PORT=8080        # 改为 8080
EXPOSE_NGINX_SSL_PORT=8443    # 改为 8443
数据库配置
env 复制代码
# PostgreSQL
POSTGRES_HOST=db_postgres
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=difyai123456
POSTGRES_DB=dify

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

# Weaviate(向量数据库)
WEAVIATE_HOST=weaviate
WEAVIATE_PORT=8080

四、端口冲突排查

4.1 检查端口占用

bash 复制代码
sudo lsof -i :80
sudo lsof -i :443

4.2 常见端口占用问题

本次部署遇到的问题:

  • 80 端口:被 Caddy 占用(PID: 3601512)
  • 443 端口:被 Caddy 占用(PID: 3601512)

4.3 解决方案

方案1:修改 Dify 端口(推荐)

编辑 .env 文件:

env 复制代码
EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443

方案2:停止冲突服务

bash 复制代码
sudo systemctl stop caddy

五、启动 Dify

5.1 启动命令

bash 复制代码
cd /www/dify/docker
docker compose up -d

5.2 启动过程分析

复制代码
1. 检查依赖容器(db_postgres、redis 等)
2. 初始化权限(init_permissions)
3. 等待数据库健康检查通过
4. 启动核心服务:
   - api (langgenius/dify-api:1.11.4)
   - web (langgenius/dify-web:1.11.4)
   - worker (后台任务处理)
   - worker_beat (定时任务调度)
   - nginx (反向代理)
   - plugin_daemon (插件守护进程)

5.3 查看运行状态

bash 复制代码
docker compose ps

输出示例:

复制代码
NAME                     IMAGE                          STATUS         PORTS
docker-api-1             langgenius/dify-api:1.11.4     Up 3 minutes   5001/tcp
docker-nginx-1           nginx:latest                   Up 3 minutes   0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp
docker-web-1             langgenius/dify-web:1.11.4     Up 3 minutes   3000/tcp
docker-db_postgres-1     postgres:15-alpine            Up 6 minutes (healthy)
docker-redis-1           redis:6-alpine                Up 6 minutes (healthy)
docker-weaviate-1        semitechnologies/weaviate:1.27.0 Up 6 minutes
docker-sandbox-1         langgenius/dify-sandbox:0.2.12 Up 6 minutes (healthy)
docker-ssrf_proxy-1      ubuntu/squid:latest           Up 6 minutes   3128/tcp

六、访问 Dify

6.1 访问地址

根据配置的端口:

本次部署访问地址:

6.2 首次使用

首次访问需要:

  1. 注册管理员账号
  2. 设置组织信息
  3. 配置 API 模型(支持 OpenAI、Anthropic、通义千问等)

七、Docker 容器架构

7.1 核心服务列表

服务名称 镜像 作用 端口
api langgenius/dify-api:1.11.4 后端 API 服务 5001
web langgenius/dify-web:1.11.4 前端界面 3000
nginx nginx:latest 反向代理 8080, 8443
worker langgenius/dify-api:1.11.4 异步任务处理 -
worker_beat langgenius/dify-api:1.11.4 定时任务调度 -
plugin_daemon langgenius/dify-plugin-daemon:0.5.3-local 插件运行环境 5003
db_postgres postgres:15-alpine 关系数据库 5432
redis redis:6-alpine 缓存服务 6379
weaviate semitechnologies/weaviate:1.27.0 向量数据库 -
sandbox langgenius/dify-sandbox:0.2.12 代码沙箱 -
ssrf_proxy ubuntu/squid:latest SSRF 防护代理 3128

7.2 服务依赖关系

复制代码
nginx → api → db_postgres, redis, weaviate
              ↓
       worker, worker_beat
              ↓
           sandbox

八、常用运维命令

8.1 服务管理

bash 复制代码
# 启动所有服务
docker compose up -d

# 停止所有服务
docker compose down

# 重启服务
docker compose restart

# 查看日志
docker compose logs -f api
docker compose logs -f nginx

# 查看特定服务日志
docker compose logs -f 服务名

8.2 容器管理

bash 复制代码
# 查看所有容器状态
docker compose ps

# 进入容器
docker compose exec api bash
docker compose exec db_postgres psql -U postgres -d dify

# 查看容器资源使用
docker stats

8.3 数据备份

bash 复制代码
# 备份 PostgreSQL
docker compose exec db_postgres pg_dump -U postgres dify > backup.sql

# 备份 Redis
docker compose exec redis redis-cli save

九、故障排查

9.1 端口冲突

问题 : failed to bind host port 0.0.0.0:80/tcp: address already in use

解决:

bash 复制代码
# 1. 查看占用端口的进程
sudo lsof -i :80

# 2. 停止占用端口的服务或修改 Dify 端口
# 修改 .env 文件中的 EXPOSE_NGINX_PORT

9.2 容器启动失败

bash 复制代码
# 查看详细日志
docker compose logs 服务名

# 检查磁盘空间
df -h

# 检查 Docker 资源
docker system df

9.3 数据库连接问题

bash 复制代码
# 检查数据库健康状态
docker compose ps db_postgres

# 进入数据库容器测试
docker compose exec db_postgres psql -U postgres -d dify

十、版本信息

本次部署的 Dify 版本:

  • Dify: v1.11.4
  • API 镜像: langgenius/dify-api:1.11.4
  • Web 镜像: langgenius/dify-web:1.11.4
  • PostgreSQL: 15-alpine
  • Redis: 6-alpine
  • Weaviate: 1.27.0
  • Sandbox: 0.2.12
  • Plugin Daemon: 0.5.3-local

十一、总结

通过 Docker 部署 Dify 的关键步骤:

  1. ✅ 配置 Docker 镜像源
  2. ✅ 下载并解压 Dify 安装包
  3. ✅ 修改 .env 配置文件(特别是端口配置)
  4. ✅ 排查并解决端口冲突问题
  5. ✅ 执行 docker compose up -d 启动服务
  6. ✅ 访问 Web 界面完成初始化

部署时间:约 10 分钟(不含下载镜像)

容器数量:11 个

总镜像大小:约 3 GB

相关推荐
海绵宝宝转agent6 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭6 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT6 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
梦想不只是梦与想6 小时前
docker-compose.yml
docker·docker-compose·docker run
2601_962071577 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境7 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路8 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师8 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师8 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia6268 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信