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

相关推荐
70asunflower2 小时前
阿里云无影云电脑 Docker 使用完全指南
阿里云·docker·云计算
2301_822366352 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
小郎君。3 小时前
【无标题】
python
喵手3 小时前
Python爬虫实战:数据治理实战 - 基于规则与模糊匹配的店铺/公司名实体消歧(附CSV导出 + SQLite持久化存储)!
爬虫·python·数据治理·爬虫实战·零基础python爬虫教学·规则与模糊匹配·店铺公司名实体消岐
喵手3 小时前
Python爬虫实战:国际电影节入围名单采集与智能分析系统:从数据抓取到获奖预测(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集国际电影节入围名单·从数据抓取到获奖预测
久绊A4 小时前
春节前云平台运维深度巡检-实操经验
运维·安全·容器·kubernetes·云平台
派葛穆4 小时前
Python-PyQt5 安装与配置教程
开发语言·python·qt
自可乐4 小时前
Milvus向量数据库/RAG基础设施学习教程
数据库·人工智能·python·milvus
可触的未来,发芽的智生4 小时前
发现:认知的普适节律 发现思维的8次迭代量子
javascript·python·神经网络·程序人生·自然语言处理