从零开始在 Windows 10 上部署开源 AI 知识问答平台 Dify,对接 DeepSeek API 实现 LLM 驱动的智能客服。全程踩坑实录,含 Docker 加速器配置、端口冲突解决、FastCGI 共存方案等实战细节。
Dify v1.16.1 · DeepSeek API · Docker Desktop · Windows 10
01 为什么选 Dify + DeepSeek
企业知识库 + AI 问答客服是当下最火的 AI 落地场景之一。市面上有三个主流开源方案:
| 平台 | 协议 | 特点 | 适用 |
|---|---|---|---|
| Dify | MIT | 全功能:知识库 + 工作流 + API + 客服 | 商用首选 |
| FastGPT | Apache 2.0 | 专做知识库问答,工作流强 | 垂直问答 |
| MaxKB | GPL | 轻量,上手快 | 简单 Q&A |
选 Dify 的理由:MIT 协议可以商用,功能最全(知识库、工作流、API、客服机器人一条龙),社区活跃度高,Docker 部署相对成熟。
选 DeepSeek API 的理由:价格屠夫。输入 0.5 元/百万 token,输出 2 元/百万 token。充 10 块钱够一个小客服用好几个月。对比 OpenAI 便宜两个数量级,且中文能力一流。
| 指标 | 数值 | 说明 |
|---|---|---|
| ¥10 | 充值够用数月 | DeepSeek API 费用 |
| 0.5 | 元/百万输入Token | 输入价格 |
| 14 | Docker容器数 | Dify 全部组件 |
| 0 | 显卡要求 | 走 API 路线无需 GPU |
02 环境准备
2.1 前置条件
- 操作系统: Windows 10 19045(需支持 WSL 2)
- 无独立显卡: 走 API 路线,不需要 GPU
- 已有 Apache + PHP 环境: phpStudy(后面会提到端口冲突问题)
- 网络环境: 国内网络,GitHub 和 Docker Hub 需要代理
2.2 安装 WSL 2 + Ubuntu
Docker Desktop 依赖 WSL 2 运行 Linux 容器。打开 PowerShell(管理员),执行:
powershell
wsl --install -d Ubuntu --no-launch
安装完成后必须重启电脑,WSL 2 内核才会生效。
⚠ 注意: 重启前可以先下载 Docker Desktop 安装包,重启后直接装,省一轮等待。
2.3 安装 Docker Desktop
从 Docker 官网下载 Windows 版安装包。安装时选择 Per-user installation (不需要管理员密码),勾选 Use WSL 2。
安装完成后启动 Docker Desktop,等任务栏鲸鱼图标稳定(不再动画),表示 WSL 2 后端就绪。
坑 ① --- Docker 命令找不到
安装后新开终端
docker命令找不到。原因是 Per-user 安装的 PATH 没有自动刷新到当前终端。手动添加:
powershell
$env:PATH = "C:\Users\<用户名>\AppData\Local\Programs\DockerDesktop\resources\bin;" + $env:PATH
验证:docker --version 输出 Docker version 29.7.2 即正常。
03 配置国内镜像加速器(关键)
这是整个部署过程中最大的拦路虎。Docker Hub(registry-1.docker.io)在国内基本无法直连,所有镜像拉取都会超时。
错误信息:
failed to resolve reference "docker.io/library/busybox:latest":
failed to do request: Head "https://registry-1.docker.io/v2/...":
dialing registry-1.docker.io:443 container via direct connection
because Docker Desktop has no HTTPS proxy: connecting to
registry-1.docker.io:443: dial tcp [...] connectex: A connection
attempt failed...
3.1 修改 daemon.json
编辑 %USERPROFILE%\.docker\daemon.json,添加 registry-mirrors:
json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}
3.2 修复凭证助手
配置镜像后还会遇到第二个错误:
error getting credentials - err: exec: "docker-credential-desktop":
executable file not found in %PATH%, out: ``
编辑 %USERPROFILE%\.docker\config.json,把 credsStore 设为 null:
json
{
"auths": {},
"credsStore": null,
"currentContext": "desktop-linux"
}
💡 原因:
docker-credential-desktop.exe在 Docker Desktop 的 bin 目录中,但docker compose执行时的子进程 PATH 不包含该目录。拉取公共镜像不需要认证,直接禁用凭证助手即可。
3.3 重启 Docker Desktop 使配置生效
修改配置文件后必须重启 Docker Desktop:
powershell
# 关闭所有 Docker 进程
Get-Process | Where-Object { $_.Name -match "docker|Docker" } | Stop-Process -Force
# 重新启动
Start-Process "$env:LOCALAPPDATA\Programs\DockerDesktop\Docker Desktop.exe"
# 等待 120 秒让 WSL 后端完全初始化
Start-Sleep -Seconds 120
# 验证
docker pull hello-world
⚠ 关键经验: Docker Desktop 重启后 WSL 后端需要 至少 90-120 秒 才能完全就绪。如果在 60 秒内执行
docker compose up,守护进程会间歇性掉线。判断标准:docker info能稳定返回 Server Version 即就绪。
04 部署 Dify
4.1 下载源码
GitHub 直接下载在国内基本超时,使用 ghproxy.net 代理:
powershell
# 创建目录
New-Item -ItemType Directory -Path "D:\dify" -Force
# 通过代理下载
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://ghproxy.net/https://github.com/langgenius/dify/archive/refs/heads/main.zip" -OutFile "D:\dify\dify.zip"
# 解压
Expand-Archive -Path "D:\dify\dify.zip" -DestinationPath "D:\dify" -Force
解压后源码在 D:\dify\dify-main,Docker 配置在 D:\dify\dify-main\docker 目录。
4.2 配置 .env
powershell
cd D:\dify\dify-main\docker
Copy-Item .env.example .env
修改 .env 中的端口配置,避免和已运行的 Apache(80 端口)冲突:
EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443
坑 ② --- 端口冲突
Dify 默认使用 80 端口,和已有的 Apache 服务冲突。Nginx 容器虽然能启动,但所有请求都被 Apache 拦截(返回 403)。改为 8080 后正常。
4.3 启动全部容器
powershell
docker compose up -d
这会拉取 14 个容器镜像并启动,包括:Nginx、Dify API、Web、Worker、Plugin Daemon、Agent Backend、PostgreSQL、Redis、Weaviate(向量数据库)、Sandbox、SSRF Proxy 等。
拉取过程约 10-15 分钟(取决于网络),完成后验证:
powershell
docker ps --format "table {{.Names}}\t{{.Status}}"
| 容器 | 作用 | 状态 |
|---|---|---|
| docker-nginx-1 | 反向代理入口 | Up |
| docker-api-1 | Dify 后端 API | Up (healthy) |
| docker-web-1 | 前端界面 | Up |
| docker-worker-1 | 异步任务处理 | Up |
| docker-db_postgres-1 | PostgreSQL 数据库 | Up (healthy) |
| docker-redis-1 | Redis 缓存 | Up (healthy) |
| docker-weaviate-1 | 向量数据库(知识库检索) | Up |
| docker-plugin_daemon-1 | 插件守护进程 | Up |
| docker-sandbox-1 | 代码沙箱 | Up (healthy) |
4.4 首次访问
浏览器打开 http://localhost:8080,首次会跳转到 /install 页面进行初始化设置(创建管理员账号)。
坑 ③ --- Install 页面一直加载
首次访问时
/install页面可能一直转圈。原因是 API 容器还在执行数据库迁移(migration)。查看日志:docker logs docker-api-1 --tail 20,看到Database migration successful!和Booting worker with pid后,Ctrl+F5 刷新即可。
05 配置 DeepSeek API
5.1 获取 API Key
- 打开 DeepSeek 开放平台,手机号注册
- 充值
- 进入「API Keys」→「创建 API Key」→ 复制保存(只显示一次)
5.2 在 Dify 中配置


- 登录 Dify 后台
- 进入「设置」→「模型供应商」
- 找到 DeepSeek,点击配置
- 粘贴 API Key,保存
- 选择模型
deepseek-chat(通用对话)或deepseek-reasoner(深度思考)
✅ 完成: 配置完成后,Dify 就可以通过 DeepSeek API 驱动 AI 对话了。接下来可以创建知识库(上传文档),然后搭建问答应用或客服机器人。
06 踩坑时间线
以下是完整的部署时间线,标注了每个失败点和解决方式:
- ✅ 03:00 --- 安装 WSL 2 + Ubuntu --- 一次成功,需重启
- ✅ 03:10 --- 安装 Docker Desktop --- Per-user 模式,正常
- ❌ 03:11 --- docker 命令找不到 → PATH 未刷新,手动添加 Docker bin 目录
- ✅ 03:13 --- 下载 Dify 源码 --- ghfast.top 超时,换 ghproxy.net 成功(37.7MB)
- ❌ 03:17 --- docker compose up --- 凭证助手 docker-credential-desktop 找不到
- ❌ 03:18 --- 修复凭证后重试 --- Docker Hub 连不上(国内网络)
- ❌ 03:19 --- 配置镜像加速器后重启 Docker --- 守护进程间歇性掉线
- ❌ 03:25 --- 等待 120s 后 Docker 稳定,但 docker compose 又遇凭证错误
- ✅ 03:32 --- 一条命令内完成:修复凭证 + 启动 Docker + docker compose up --- 全部镜像拉取成功,14 个容器启动
- ❌ 03:39 --- Dify 访问 403 --- Nginx 80 端口被 Apache 占用
- ✅ 03:40 --- 改端口为 8080,重启 Nginx 容器 --- HTTP 200,Dify 正常
- ❌ 03:42 --- Install 页面一直加载 --- API 容器在迁移数据库,等迁移完成刷新即可
- ✅ 03:45 --- Dify 初始化完成,配置 DeepSeek API --- 部署完成
07 总结与经验
技术栈最终状态
| 组件 | 版本 | 说明 |
|---|---|---|
| Windows | 10 19045 | WSL 2 已启用 |
| Docker Desktop | 29.7.2 | Per-user 安装,WSL 2 后端 |
| Docker Compose | v5.3.1 | Docker Desktop 内置 |
| Dify | v1.16.1 | 14 个容器全部运行 |
| PostgreSQL | 15-alpine | Dify 内置数据库 |
| Redis | 6-alpine | Dify 内置缓存 |
| Weaviate | 1.27.0 | 向量数据库,知识库检索 |
| DeepSeek API | deepseek-chat | LLM 供应商 |
| Apache | 2.4.39 | 已有服务,80 端口 |
| Dify 访问地址 | http://localhost:8080 | 避开 Apache 80 端口 |
5 个核心经验
经验 1 --- 镜像加速器是前提
国内环境部署 Docker 项目,第一步就是配 registry-mirrors。docker.1ms.run 和 docker.m.daocloud.io 实测可用。不配加速器,所有镜像拉取都会超时。
经验 2 --- 凭证助手必须禁用
Docker Desktop 的 credsStore: desktop 在命令行环境下找不到 docker-credential-desktop.exe。拉取公共镜像不需要认证,直接设为 null。
经验 3 --- Docker 重启后等够 120 秒
WSL 2 后端初始化慢,90 秒内守护进程可能不稳定。判断标准:docker info 能稳定返回版本号。
经验 4 --- 端口冲突提前规避
已运行 Apache/Nginx 的机器上部署 Docker 项目,务必检查端口冲突。Dify 默认 80 端口,改为 8080 一劳永逸。
经验 5 --- 一条命令搞定
沙箱环境在命令间可能清理后台进程。把「启动 Docker → 等待 → docker compose up」写在一条命令里,避免守护进程在命令间隔期被回收。
成本估算
| 项目 | 费用 | 说明 |
|---|---|---|
| Dify | 免费 | MIT 开源 |
| DeepSeek API | ¥10 起 | 百万 token 约 1 元 |
| 服务器 | ¥0 | 本地部署,无额外服务器 |
| 域名/SSL | ¥0 | 本地访问,localhost:8080 |
| 总计 | ¥10 | 几乎零成本启动 |
后续规划
- 知识库建设: 上传企业文档(产品手册、FAQ、技术文档),Weaviate 自动向量化检索
- 客服机器人: 在 Dify 中创建应用,关联知识库,生成 API 接入网站
- 多模型对比: 接入通义千问、Kimi 等国内 API,对比效果
- 商业化: 淘宝上架 Dify 部署服务(参考定价 ¥500-1500)
@漏刻有时
Dify v1.16.1 + DeepSeek API + Docker Desktop 29.7.2