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

相关推荐
花酒锄作田6 小时前
Postgres - Listen/Notify构建轻量级发布订阅系统
python·postgresql
Thomas.Sir6 小时前
第二章:LlamaIndex 的基本概念
人工智能·python·ai·llama·llamaindex
m0_694845576 小时前
Dify部署教程:从AI原型到生产系统的一站式方案
服务器·人工智能·python·数据分析·开源
李昊哲小课8 小时前
Python办公自动化教程 - 第7章 综合实战案例 - 企业销售管理系统
开发语言·python·数据分析·excel·数据可视化·openpyxl
不知名的老吴8 小时前
返回None还是空集合?防御式编程的关键细节
开发语言·python
李昊哲小课8 小时前
Python办公自动化教程 - 第5章 图表创建 - 让数据可视化
python·信息可视化·数据分析·数据可视化·openpyxl
chushiyunen9 小时前
python pygame实现贪食蛇
开发语言·python·pygame
Dream of maid9 小时前
Python-基础2(流程控制)
python
Lenyiin10 小时前
《Python 修炼全景指南:一》从环境搭建到第一个程序
开发语言·python
涛声依旧3931610 小时前
Python项目实战:学生信息管理系统
开发语言·python·数据挖掘