Dify离线安装指南:从零部署AI应用平台
Dify离线安装指南:从零部署AI应用平台
在企业级 AI 应用落地过程中,一个常见的挑战是:如何在无法访问公网的内网环境中部署像 Dify 这样的现代化 LLM 开发平台?金融、政务、医疗等行业对数据安全要求极高,服务器往往被严格隔离。此时,标准的在线安装方式行不通,必须依赖一套完整的离线部署流程。
Dify 作为开源的可视化大模型应用开发平台,集成了 Prompt 编排、RAG 检索增强、Agent 工作流和 API 服务能力,已成为许多团队构建智能系统的首选工具。但它的多服务架构(前端、后端、数据库、缓存、反向代理)也意味着离线部署时需要处理更多依赖项——尤其是 Docker 镜像与配置的一致性。
本文将带你一步步完成 Dify 的全链路离线部署,涵盖从联网环境准备到目标服务器启动的全过程,并提供常见问题的排查思路,确保你在无网络条件下也能顺利搭建生产可用的 AI 平台。
构建离线包:在联网环境中预下载所有依赖
要实现真正的“断网部署”,核心在于提前把所有运行时所需的组件打包成一个自包含的离线包。这个过程不能跳过任何一步,哪怕只是少导出一个镜像,都可能导致后续启动失败。
准备一台临时联网主机
选择一台用于构建离线包的云服务器或本地虚拟机,操作系统建议使用 Ubuntu 20.04 或 CentOS 7+,并确保安装以下基础工具:
- Git
- Docker ≥ 20.10
- Docker Compose v2.23+
- 至少 4GB 内存、20GB 磁盘空间
验证环境是否就绪:
docker --version
docker compose version
git --version
如果尚未安装 Docker 和 Compose,可参考官方文档快速配置。注意,某些系统中 docker-compose 命令已被弃用,应使用 docker compose(带空格)的新语法。
克隆源码并拉取全部容器镜像
Dify 使用 Docker Compose 管理多个微服务,因此我们先获取项目代码并触发镜像下载:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
打开 .env 文件,建议显式指定版本号以避免后期不一致:
TAG=0.6.10
POSTGRES_PASSWORD=your_secure_password
REDIS_PASSWORD=your_redis_password
接着执行一次启动命令,强制拉取所有依赖镜像:
docker compose up -d
虽然你并不打算长期运行这个实例,但这一步至关重要——它会自动下载 dify-api、dify-web、PostgreSQL、Redis、Nginx 等所有必需镜像。等待几分钟,直到所有容器状态为 running:
docker ps
⚠️ 小贴士:如果你只导出了部分镜像而遗漏了某个服务(比如 vector 日志收集器),即使该服务不是必选,也可能因
docker-compose.yml中声明了对应服务而导致启动失败。要么完整导出,要么修改 compose 文件移除相关服务。
导出所有 Docker 镜像为 tar 包
列出当前已加载的 Dify 相关镜像,确认关键组件都在其中:
docker images | grep -E "(dify|postgres|redis|nginx|vector)"
你应该看到类似如下输出:
| 镜像名称 | 用途 |
|---|---|
langgenius/dify-api:0.6.10 |
后端逻辑处理 |
langgenius/dify-web:0.6.10 |
前端界面 |
postgres:15 |
数据持久化存储 |
redis:7-alpine |
缓存与任务队列 |
nginx:alpine |
静态资源代理 |
vectordev/vector:0.27-alpine |
可选日志采集 |
将这些镜像统一打包成一个 .tar 文件:
docker save \
langgenius/dify-api:0.6.10 \
langgenius/dify-web:0.6.10 \
postgres:15 \
redis:7-alpine \
nginx:alpine \
vectordev/vector:0.27-alpine \
-o ../images.tar
💡 如果你明确禁用了日志模块,可以省略 Vector 镜像以减小体积。否则建议保留完整集合。
打包项目文件与配置
回到上级目录,将整个 docker 子目录连同刚刚生成的镜像包一起压缩:
cd ..
tar -czf dify-offline-package.tar.gz \
docker/.env \
docker/docker-compose.yml \
docker/overrides/ \
images.tar
这样就得到了一个完整的离线部署包:dify-offline-package.tar.gz。你可以通过 U 盘、内网 FTP、scp 或其他安全传输方式将其送入目标服务器。
在目标服务器上完成离线部署
现在切换到没有互联网连接的目标机器,开始真正的部署操作。
上传并解压离线包
假设你已将包传至 /opt/ 目录下:
cd /opt
tar -xzf dify-offline-package.tar.gz
解压后结构应如下:
/opt/
├── dify-offline-package.tar.gz
├── images.tar
└── docker/
├── .env
├── docker-compose.yml
└── overrides/
进入 docker 目录进行后续操作:
cd docker
加载预先导出的 Docker 镜像
使用 docker load 命令恢复所有镜像:
docker load -i ../images.tar
完成后检查是否成功导入:
docker images | grep -E "(dify|postgres|redis|nginx)"
确保每个服务都有对应的镜像存在,且标签(tag)与 .env 中定义的 TAG 一致。例如,若 .env 设置的是 TAG=0.6.10,但实际镜像标签是 latest,就会导致找不到镜像而启动失败。
配置环境变量文件
.env 文件已经随包一起传输,但仍需根据内网环境做适当调整。常见修改项包括:
# Web 访问端口(默认 80)
WEB_PORT=80
# 数据库存储路径(推荐挂载外部持久化目录)
PG_DATA_DIR=/data/dify/postgres
# Redis 密码(必须与 compose 文件中保持一致)
REDIS_PASSWORD=ChangeThisToAStrongPassword!
# API 监听地址
API_HOST=0.0.0.0
API_PORT=5001
# 明确指定版本标签
TAG=0.6.10
特别提醒:务必确保 PG_DATA_DIR 所指向的路径存在且具有写权限。PostgreSQL 容器默认以 UID 999 用户运行,因此建议提前创建并授权:
mkdir -p /data/dify/postgres
chown -R 999:999 /data/dify/postgres
否则可能出现 “Permission denied” 错误导致数据库无法初始化。
启动服务并验证状态
一切就绪后,启动所有服务:
docker compose up -d
查看各容器运行状态:
docker compose ps
正常情况下你会看到:
NAME SERVICE STATUS PORTS
dify-api-1 api running 5001/tcp
dify-web-1 web running 3000/tcp
dify-redis-1 redis running 6379/tcp
dify-postgres-1 postgres running 5432/tcp
dify-nginx-1 nginx running 0.0.0.0:80->80/tcp
如果某些容器显示 Restarting 或 Exited,说明存在问题,需进一步排查。
常见问题诊断与解决方案
即便准备充分,离线部署仍可能遇到各种意料之外的问题。以下是我们在实际交付中总结出的高频故障及应对策略。
页面空白或静态资源加载失败
现象:浏览器打开 IP 地址后页面白屏,F12 控制台报错如 Failed to load /index.html 或 404 Not Found。
原因分析:
- Nginx 未正确代理 / 路径到前端资源
- dify-web 容器未成功启动
- 浏览器缓存了旧版本资源
解决步骤:
首先查看 web 服务日志:
docker compose logs web
若发现编译错误或资源缺失,尝试重建容器:
docker compose down web
docker compose up -d web
同时清除浏览器缓存或使用隐身模式访问。若问题依旧,检查 docker-compose.yml 中 nginx 是否正确挂载了 web 容器的静态目录。
数据库连接失败(Connection refused)
典型错误信息:
psycopg2.OperationalError: could not connect to server: Connection refused
这通常发生在 API 服务尝试连接 PostgreSQL 时。
排查流程:
- 检查数据库容器是否运行:
bash docker compose ps postgres
- 查看其日志输出:
bash docker compose logs postgres
若出现 could not access directory "/var/lib/postgresql/data",说明数据目录权限不足。
- 修复权限(假设你映射到了
/data/dify/postgres):
bash chown -R 999:999 /data/dify/postgres
- 清空非空的数据目录(仅限首次部署):
bash rm -rf /data/dify/postgres/*
因为 Postgres 第一次启动会在数据目录初始化结构,已有内容可能导致冲突。
Redis 认证失败(NOAUTH Authentication required)
错误提示:
NOAUTH Authentication required.
这是典型的密码不匹配问题。
根本原因:.env 文件中的 REDIS_PASSWORD 与 Redis 实际设置的密码不一致。
修复方法:
- 确保
.env中设置了正确的密码。 - 若不确定当前 Redis 密码,可进入容器重置:
```bash
docker exec -it dify-redis-1 redis-cli
CONFIG SET requirepass “your_new_password”
AUTH default your_new_password
```
然后更新 .env 文件中的 REDIS_PASSWORD,并重启服务:
bash docker compose down && docker compose up -d
容器反复重启(Restarting)
表现为 docker compose ps 输出中某容器持续处于 Restarting 状态。
通用排查命令:
# 查看具体哪个服务异常
docker compose ps
# 查看日志定位根本错误
docker compose logs api # 或 web, postgres, redis
常见诱因包括:
- 端口占用:80(Nginx)、5432(PostgreSQL)、6379(Redis)被其他进程占用。可通过
netstat -tuln | grep <port>检查。 - 磁盘空间不足:特别是数据库写入大量日志时。运行
df -h查看剩余空间。 - 配置文件语法错误:如
.env中含有非法字符或换行符。 - 镜像版本不匹配:
.env中TAG=0.6.10,但实际镜像不存在该标签。
建议逐项排除,优先关注日志中最先出现的错误。
验证部署成果:登录并测试第一个应用
当所有服务稳定运行后,打开浏览器访问:
http://<你的服务器IP>
你应该能看到 Dify 的注册/登录页面。注册一个管理员账号并登录。
进入控制台后,点击「新建应用」→「空白应用」,输入一段简单的 Prompt,例如:
请用一句话介绍你自己。
点击“运行”,如果能收到 LLM 返回的合理响应,则说明整个平台已成功运转!
🎉 恭喜!你现在拥有了一个完全离线运行的 AI 应用开发环境。
后续运维建议
部署只是第一步,长期稳定运行还需要良好的维护策略。
1. 定期备份关键数据
- 数据库:定期备份
/data/dify/postgres目录 - 配置文件:保存
.env和docker-compose.yml的副本 - 用户上传的知识库文件:如有启用 RAG 功能,注意同步存储位置
2. 版本升级策略
新版本发布时,不要直接在离线环境升级。正确做法是:
- 在新的联网环境中重复上述流程,生成新版离线包;
- 停止当前服务:
docker compose down - 备份旧数据和配置;
- 替换镜像包和 compose 文件;
- 加载新镜像并启动;
- 验证兼容性和数据迁移情况。
3. 安全加固措施
- 使用 HTTPS:可通过内部 CA 签发证书,在 Nginx 层面配置 SSL;
- 限制访问 IP:结合防火墙规则或 reverse proxy 设置 allow 列表;
- 定期轮换密码:尤其是
POSTGRES_PASSWORD和REDIS_PASSWORD; - 关闭不必要的调试接口和服务。
4. 监控与可观测性
尽管是离线环境,仍建议建立基本监控机制:
- 添加健康检查端点(如
/health)供心跳探测; - 收集容器日志并集中存储(可用轻量 ELK 或 Loki + Promtail);
- 设置告警规则,及时发现 CPU、内存、磁盘异常。
5. 接入私有化大模型
为了实现真正意义上的“全链路国产可控”,你可以将 Dify 与本地部署的大模型对接,例如:
- 通义千问 Qwen
- 百川 Baichuan
- ChatGLM3
- Yi 模型
只需在 Dify 控制台添加自定义模型 API,指向内网模型推理服务即可,无需暴露到公网。
Dify 正在成为企业构建 AI 应用的核心基础设施之一。通过本文介绍的离线部署方案,即使是高度封闭的网络环境,也能快速落地智能化能力。未来随着自动化脚本(如 Ansible Playbook)、Helm Chart 等更高效部署方式的推出,这类私有化交付将变得更加标准化和可复制。
如果你正在为企业设计 AI 平台架构,不妨从 Dify 的离线部署开始实践,逐步构建起属于自己的低代码 AI 工程体系。
更多推荐



所有评论(0)