win10家庭版本地部署Dify(Hyper-v+Docker+Dify)

win10家庭版本地部署Dify(Hyper-v+Docker+Dify)
目录前言一、下载安装Docker1.前置准备1虚拟化检查2启用 Hyper-v 并开启虚拟任务2.下载安装DockerDesktop1下载安装文件2新建文件夹3cmd窗口输入安装命令4安装操作5验证Docker是否安装成功6启动Docker Desktop7配置镜像8测试Docker二、本地部署Dify1.下载Dify文件2.解压压缩文件3.修改配置文件文件名4.检查docker compose版本5.部署Dify6.部署Dify过程错误合集1 error during connect: Post http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.47/containers/create?name2Error response from daemon:Get https://registry-1.docker.io/v2/: ....3Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 - 127.0.0.1:0: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.4容器db-1总是重启7.查看容器信息8.访问本地Dify主页9.Dify加载页面卡住Internal Server Error1容器是否正常运行2容器db-1状态是否一直重启3.env.example文件是否删除4更换端口号三、总结前言Dify 是一款开源的自动化运维平台本文将详细介绍如何在 Windows 10 家庭版上本地部署 Dify并记录部署过程中遇到的各种问题及解决方案。(本人是新手小白耗时近一周才部署成功中间遇到了各种问题写这篇文章一方面是记录自己中途遇到的问题一方面是给和我一样的新手小白提供一些参考希望你们遇到和我一样的问题都能快速解决。环境准备操作系统:Windows 10 家庭版一、下载安装Docker1.前置准备首先Docker 在 Windows 上运行需要虚拟化技术支持而windows中的docker可以依赖两种环境分别是Hyper-V(虚拟环境)和WSL(Linux子系统)本教程使用基于Hyper-V环境的方法来进行虚拟化技术支持。1虚拟化检查首先我们进行虚拟化检查打开任务管理器快捷键Ctrl Shift Esc点击到性能选择左侧列的CPU查看是否虚拟化已经支持若未支持则需要重启进入BIOS打开虚拟化支持默认都是已启用的。2启用 Hyper-v 并开启虚拟任务 这里需要说明win10家庭版本身没有Hyper-V这个功能所以我们是找不到这个选项的。因此我们首先要在电脑上安装Hyper-v如果已有请跳过安装Hyper-v。安装Hyper-v新建一个txt文件复制如下内容点击保存保存后修改文件后缀名为.cmdpushd %~dp0dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum hyper-v.txtfor /f %%i in (findstr /i . hyper-v.txt 2^nul) do dism /online /norestart /add-package:%SystemRoot%\servicing\Packages\%%idel hyper-v.txtDism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL然后以管理员身份运行该cmd文件等待运行结束后根据提示输入Y并重启计算机。此时启用或关闭系统功能中才会有Hyper-V选项a打开 “控制面板”--“程序”--程序和功能”b点击“启用或关闭 Windows 功能”c勾选下面红框标注的 4 个功能组件点击确定开始安装完毕后根据提示重启电脑。d修改注册表伪装专业版重启后以管理员身份打开cmd执行如下命令此处是将注册表的值修改为Professional以使能正常运行即伪装成win10专业版。REG ADD HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion /v EditionId /T REG_EXPAND_SZ /d Professional /F√√√ 此时前置准备完成2.下载安装DockerDesktop1下载安装文件首先进入官网下载.exe安装文件Docker Desktop:下载地址点击进入此页面后向下滑找到Download Docker Desktop选择合适的安装包点击下载注意 如果你对Docker Desktop下载到本地的位置以及后期Docker镜像拉取位置没有要求你可以直接跳到4安装操作直接安装。如果你想将Docker Desktop安装以及镜像拉取位置放到其他盘请务必执行23两步的操作2新建文件夹首先新建一个命名为Docker的文件夹作为Docker Desktop的安装目录再在Docker文件夹下新建一个命名为data的文件夹用于存储Docker镜像、容器、卷等数据在执行下一步前一定要提前手动创建好对应文件夹不然会报错3cmd窗口输入安装命令以管理员身份打开Windows终端并转到你下载文件的位置在命令提示符内运行下面代码先不要复制到cmd命令窗口先根据自己实际文件路径进行修改后再复制start /w Docker Desktop Installer.exe install -accept-license --installation-dirD:\software\Docker --hyper-v-default-data-rootD:\software\Docker\data --windows-containers-default-data-rootD:\\software\\Docker其中D:\software\Docker修改为自己的Docker Desktop 的安装路径D:\software\Docker\data修改为自己的镜像存储路径上面新建的data文件夹路径。D:\\software\\Docker表示在 Windows 操作系统中Docker 程序将被安装在 D 盘的software文件夹内的一个名为Docker的子文件夹中记得双斜杠转义字符。4安装操作如果对安装目录没有要求可以直接双击下载的.exe文件这种安装方式会默认将软件安装到C盘不推荐这种安装方式。此时无论是哪种方式安装都会自动进入Configuration配置这里安装时会默认勾选使用WSL2替代Hyper-V选项以及创建桌面快捷方式选项我们需要将Use WSL 2 instead of Hyper-V(recommended)选项勾掉否则Docker Desktop会一直处于Stopped状态且无明显报错提示就算安装好后Docker Desktop也会显示空白并且一直提示Docker Engine stopped的问题。点击ok后会Docker Desktop进入如下界面等待下载安装完成点击Close即可5验证Docker是否安装成功首先我们打开cmd窗口输入以下命令Docker --version成功返回版本信息说明 Docker 安装成功了!!!6启动Docker Desktop双击桌面快捷键即可启动Docker Desktop点击接受协议可直接点击跳过账号注册看到如下界面表示Docker Desktop安装成功这里也可以通过“设置”--“Resources”看到我们当时安装时设置的容器、镜像的保存位置是在我们设置的路径。7配置镜像2024 年 6 月左右国内多个 Docker 镜像源出现停止服务的情况如上海交大、南京大学的镜像源以及网易、百度等镜像源都不可用了中科大也暂时关闭了 Docker Hub 镜像缓存服务。所以需要自己去寻找可以使用的镜像不过还是有些前辈们一直维护着可以使用的Docker可用镜像源点击跳转此处十分感谢所有为我们提供帮助的前辈们a我们点击右上角的设置按钮进入设置界面b选择Docker Engine在配置中后方直接添加下图红框内容此处不要忘了在false后新增内容时要增加一个英文逗号否则会报语法错误然后点击Applyrestart。{ builder: { gc: { defaultKeepStorage: 20GB, enabled: true } }, experimental: false, #配置镜像寻找可用的镜像进行配置 registry-mirrors: [ https://docker.1ms.run, https://docker.xuanyuan.me ] }8测试Docker此时Docker安装完成并且配置完成我们可以pull个项目测试Docker是否正常运行并且是否能够正常拉取镜像。打开cmd窗口输入以下命令Docker pull hello-world拉取完成后我们可以在cmd窗口输入以下命令查看当前本地已用镜像docker images可以看到我们已经成功将hello-world拉取下来了此时我们就完成了Docker的安装与配置撒花撒花❀❀二、本地部署Dify1.下载Dify文件进入dify项目github主页下载Dify文件点击跳转点击Download ZIP进行手动下载文件也可通过git进行下载。2.解压压缩文件右键选择ZIP文件进行解压解压到自己设置的路径。3.修改配置文件文件名进入到dify项目下的docker文件夹找到.env.example文件直接将文件名修改为.env。注意有些教程是直接复制一个.env.example文件并修改文件名为.example但我在部署Dify的过程中发现最好不要保留原始的.example文件否则可能会出现Dify网址进不去修改.env配置信息无效的情况4.检查docker compose版本以管理员身份打开cmd命令窗口进入到dify下的docker目录输入以下命令查看自己的docker compose版本是v1还是v2输入后先不要关闭这个窗口后面还要使用cmd命令窗口docker-compose --version5.部署Dify直接在上一个未关闭的窗口输入即可管理员身份打开 cmd命令窗口进入到dify项目的docker目录并保证Docker Desktop是打开状态双击快捷键打开选择适用的命令进行Dify部署#如果docker compose是v1版本 docker-compose up -d #如果docker compose是v2版本 docker compose up -d等待部署完成注意如果这条命令你未出现任何错误那么恭喜你你的部署太顺利了但是如果你的这步出现了问题请查看下一步我专门列出了各种这一步的错误合集你可以在部署Dify过程错误合集找一下自己存在的问题。第一次拉取的时候是直接80个东西6.部署Dify过程错误合集1 error during connect: Post http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.47/containers/create?name红线处内容可能不同但是都是类似问题解决方法多次尝试重新输入以下命令继续部署Dify可以发现name后内容会变换直至顺利拉取或者出现其余类型问题为止。#如果docker compose是v1版本 docker-compose up -d #如果docker compose是v2版本 docker compose up -d2Error response from daemon:Get https://registry-1.docker.io/v2/: ....解决方法这个问题是网络的问题需要去Docker Engine检查国内镜像是否过期需要更换一个可以使用的镜像或者是通过打开梯子再次执行命令。3Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 - 127.0.0.1:0: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.这个错误提示表明 Docker 在尝试将容器的端口映射到宿主机的 80 端口时失败了原因是权限不足无法绑定到 0.0.0.0:80 这个地址和端口。主要是由于端口 80 是特权端口通常需要管理员权限才能使用可以将端口映射到一个非特权端口大于 1024 的端口。解决方法这个问题一般是Nginx端口权限问题a我们可以选择更改Nginx默认使用的端口。进入dify文件下的docker文件夹找到.env文件修改.env文件配置ctrlF找到EXPOSE_NGINX_PORT修改端口号为8081大于1024的端口b输入以下命令停止并移除通过docker compose up启动的服务容器docker compose downc重新部署Dify。#如果docker compose是v1版本 docker-compose up -d #如果docker compose是v2版本 docker compose up -d4容器db-1总是重启在Deocker Desktop首页中可以看到db-1可以通过Actions状态查看这个容器的状态在一直改变或者直接点击相应容器查看STATUS观察到状态一直在反复重启db-1反复重启的状况会导致http://localhost刷新不出来。解决方法a进入dify源码的docker目录下打开docker-compose.yamlb在yaml文件中通过快捷键CtrlF搜索services在services下的db下修改volumes将./volumes/db/data修改为postgres-data#- ./volumes/db/data:/var/lib/postgresql/data原文件内容#修改为- postgres-data:/var/lib/postgresql/datac在docker-compose.yaml文件最末尾的volumes下添加“postgres-data:”注意缩进postgres-data:d 输入以下命令停止并移除通过docker compose up启动的服务容器docker compose downe重新部署Dify#如果docker compose是v1版本 docker-compose up -d #如果docker compose是v2版本 docker compose up -df运行完成后容器重启db-1恢复正常。7.查看容器信息输入以下命令查看当前正在运行的 Docker 容器信息查看Dify所需要的所有服务是否正常运行docker ps也可以通过Docker Desktop查看当前容器信息8.访问本地Dify主页在浏览器输入以下适用于自己的网址#localhost可以修改为127.0.0.1 #如果你没有修改过Nginx的端口号 http://localhost/install #如果你修改了Nginx的端口号(此处8081为你修改过的端口号 ttp://localhost:8081/install输入后正确进入Dify网页此时代表Dify本地部署完成首次进入需要进行账号注册此时Dify本地化部署就完成了恭喜大家攻克难关终于用上Dify注意如果你到达这一步没有正常加载注册界面请查看下一节Dify加载页面卡住。9.Dify加载页面卡住Internal Server Error一般出现这种Dify输入网址后加载页面卡住的问题又是可能会显示Internal Server Error,可能是很多原因导致的你可以根据我下面的步骤一步一步的排除自己到底是什么问题并且进行解决F12查看错误代码502、500....1容器是否正常运行首先检查所有容器是否正常运行打开DockerDesktop查看所有容器是否都全部打开并正常运行如果未打开请保证全部容器是运行状态并保证状态为一直运行状态操作方案选择docker前的选项即可选择Dify所需的全部容器点击右上角的开启按钮打开所有容器并且检查所有容器状态Actions是否都为下图的 方框代表正在运行2容器db-1状态是否一直重启打开Docker Desktop检查db-1容器状态是否为一直重启状态观察这个状态是否一直在改变状态显示在“Restarting”解决方案a进入dify源码的docker目录下打开docker-compose.yamlb在yaml文件中通过快捷键CtrlF进行搜索services在services下的db下修改volumes将./volumes/db/data修改为postgres-data#- ./volumes/db/data:/var/lib/postgresql/data原文件内容#修改为- postgres-data:/var/lib/postgresql/datac在docker-compose.yaml文件最末尾的volumes下添加“postgres-data:”注意缩进postgres-data:d 输入以下命令停止并移除通过docker compose up启动的服务容器docker compose downe重新部署Dify#如果docker compose是v1版本 docker-compose up -d #如果docker compose是v2版本 docker compose up -df运行完成后容器重启db-1恢复正常。3.env.example文件是否删除如果容器都正常运行可以进入Dify下的Docker文件夹下检查.env.example文件是否重命名为.env文件并且不要保留原始的.env.example文件4更换端口号如果以上操作你都确保正确了那么你可以尝试更改一下Nginx的默认使用端口操作方案a我们可以选择更改Nginx默认使用的端口。进入dify文件下的docker文件夹找到.env文件修改.env文件配置CtrlF找到EXPOSE_NGINX_PORT修改端口号为8081b输入以下命令停止并移除通过docker compose up启动的服务容器docker compose downc重新部署Dify。#如果docker compose是v1版本 docker-compose up -d #如果docker compose是v2版本 docker compose up -d三、总结在 Windows 10 家庭版环境下本地部署 Dify 时主要面临两大核心挑战虚拟化环境缺失问题由于家庭版系统默认未集成 Hyper - V 组件导致 Docker Desktop 安装时会触发环境检查失败。即使通过手动安装 WSL 2 并配置 Linux 子系统仍需额外启用「虚拟机平台」功能组件整个环境搭建过程存在较高的技术门槛。容器化服务启动异常在执行docker compose up -d时常见以下典型故障端口权限冲突特权端口如 80/443需要管理员权限才能绑定而家庭版系统的 UAC 策略可能限制权限提升镜像依赖缺失部分服务需要特定版本的基础镜像网络波动或仓库访问问题会导致拉取失败最后致每一位坚持者你不是在与软件对抗而是在重塑自己的技术认知边界。当看到所有容器状态变为绿色运行当浏览器终于加载出期待已久的界面那份突破重重阻碍后的成就感将如破晓的阳光般驱散所有疲惫。技术的真谛从不在顺利的部署而在你与问题死磕时绽放的智慧火花。继续前行吧每一个成功运行的容器都是你征服技术高峰的里程碑最后我想问大家学习Dify部署Dify的目的是什么呢大家可以动手投下票也可以看看大家都是什么目的部署的Dify