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 访问地址
根据配置的端口:
- HTTP: http://服务器IP:8080
- HTTPS: https://服务器IP:8443
本次部署访问地址:
- HTTP: http://192.168.64.10:8080
- HTTPS: https://192.168.64.10:8443
6.2 首次使用
首次访问需要:
- 注册管理员账号
- 设置组织信息
- 配置 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 的关键步骤:
- ✅ 配置 Docker 镜像源
- ✅ 下载并解压 Dify 安装包
- ✅ 修改
.env配置文件(特别是端口配置) - ✅ 排查并解决端口冲突问题
- ✅ 执行
docker compose up -d启动服务 - ✅ 访问 Web 界面完成初始化
部署时间:约 10 分钟(不含下载镜像)
容器数量:11 个
总镜像大小:约 3 GB