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

相关推荐
哈里谢顿18 小时前
Django 应用 OOM(Out of Memory)故障的定位思路和排查方法
python·django
甄心爱学习18 小时前
【python】获取所有长度为 k 的二进制字符串
python·算法
努力搬砖的咸鱼19 小时前
一个域名搞定前后端:用 Ingress 配置 / 和 /api 路由
微服务·云原生·容器·架构·kubernetes
tuotali202619 小时前
氢气压缩机技术规范亲测案例分享
人工智能·python
嫂子的姐夫19 小时前
030-扣代码:湖北图书馆登录
爬虫·python·逆向
a11177620 小时前
EasyVtuber(或其衍生/增强版本)的虚拟主播(Vtuber)面部动画生成与直播解决方案
python·虚拟主播
lintax20 小时前
计算pi值-积分法
python·算法·计算π·积分法
小凯1234520 小时前
pytest框架-详解(学习pytest框架这一篇就够了)
python·学习·pytest
逻极20 小时前
pytest 入门指南:Python 测试框架从零到一(2025 实战版)
开发语言·python·pytest