最近看到Dify升级到v1.0.0版本,看来是有重大更新,于是我决定在自己的VPS上私有化部署一套,方便后续各种折腾。
先说下我为什么要用类似宝塔这种面板来部署Dify,因为我搞了一台高配置的VPS,后续还会装其他服务,使用面板的话管理起来比较方面。至于为啥我用的是国际版宝塔也就是aaPanel而不用国内版宝塔,主要是不想绑定手机号。
1 准备好一台VPS
Dify官方推荐私有化部署的机器配置,至少需要2C4G,按照料敌从宽的原则,往高了配置肯定是不会错的,尤其是内存,最好再多一些。
一般来说,多核大内存的VPS价格很高,不过多找找总会有廉价的商家,尤其是国人商家。我研究了挺久,目标锁定以下两款美国VPS(最终我买了第二款):
1)RackNerd 4.5 GB KVM VPS (Black Friday 2024)
RN是咱们熟悉的老面孔啦,不用担心跑路问题,机器也很稳定。这款2024年黑色星期五优惠套餐,3核CPU加4.5Gb内存,年付只要39.88美金,这个价格和配置在整个VPS行业都算是很能打的。
2)YVGS/NetJett LA VPS Starter 4C6G
YVGS是国人新商家,主营美国VPS,一般来说新商家我都是建议谨慎购买,不过他们家支持PayPal所以大家也不用怕,有问题可以发起争议退款。从各大论坛的用户反馈来看,服务算稳定,老板回复消息也很及时。新商家大家也懂的,促销赚口碑嘛,所以他们近期推出的一系列套餐性价比都非常高,我就买了一款4C6G的,用完优惠券后,年付约30美金:
- LA85% → 85折(限量50个!)
- LA20%OFF → 8折(限时)
另外老板还承诺:7天无理由退款,30天按比例退。看起来风险还是比较低的,大家自行判断。
以下是我在这台4C6G机器上安装宝塔国际版+Dify后的资源使用情况,供大家参考:
可能有人会问,买国内服务器不好么?是这样的,一来国内VPS很贵,二来,网络问题,不方便Dify连接使用类似OpenAI这样的服务(请注意,香港服务器默认也是无法使用OpenAI的),以及下载各种安装包有时候很麻烦。以这次Dify v1.0.0升级为例,很多人用国内服务器部署发现,最新的Dify插件无法安装,其实都是网络问题造成的。解决方案当然是有的,会用VPS的人自然都知道,但是,咱直接买个国外服务器不是更方便么?
VPS操作系统我比较喜欢Debian,目前最新版是Debian 12。如果VPS商家不提供这个版本的话,可以自行DD系统解决(使用此脚本)。
修改SSH默认端口、设置高强度密码、安装fail2ban之类的,都是老生常谈了,这里就不展开了。
2 安装宝塔面板国际版aaPanel
参考官方教程即可(注意是那个Free edition),此处也不赘述。
注意:由于默认宝塔国际版的安装,初始化启用了自签名的SSL证书,浏览器会提示不安全,且不允许访问面板入口,所以需要SSH去VPS后台,先关闭面板登录入口的SSL(输入bt之后,即可找到Turn on/off panel SSL选项)。
3 为宝塔国际版aaPanel安装Docker
在aaPanel后台,左侧导航菜单找到Docker,点击进去会提示还没装Docker,按提示安装即可(One-Click Install)。
4 在宝塔国际版面板内使用Docker Compose部署Dify
Dify官方部署教程在此,不过官方教程预设场景是你在一台啥都没有的全新VPS上直接开干,没有面板这回事,所以咱们需要稍微调整下操作步骤。
4.1 去宝塔后台文件根目录打开SSH窗口
4.2 clone dify源码
在上一个步骤打开的SSH窗口中,输入以下指令,下载Dify源码到这台服务器:
git clone https://github.com/langgenius/dify.git
4.3 切换到Dify源代码下的docker目录
依然是在上面的这个SSH窗口中,通过CD命令切换到已经下载完源码并自动创建的Dify docker文件夹内:
cd dify docker
请注意观察上图的文件路径。
4.4 复制Dify环境配置文件.env
cp .env.example .env
这一步的意思是,将Dify预置的配置文件复制一份作为本地正式使用的版本,也就是说后面这个.env才是这台服务器上Dify会用到的配置文件。
4.5 【非常重要】修改Dify默认占用的80和443端口
去宝塔后台“文件”入口,找到本地配置文件.env:
双击文件名即可进入编辑界面,把Dify默认占用的80和443端口改成其他,然后点击保存:
如上图所示,这两个端口我分别改成6060和6443,你也可以改成别的。
为什么要这么做?因为如果不这样做,后续这台装了宝塔的VPS,如果你要基于nginx做一些网站的解析操作之类的,你会发现,80和443端口已经被Dify占据了,处理起来非常麻烦。例如,默认给网站申请免费的SSL证书后,你会发现网站无法打开,提示重定向次数过多,或者是400 Bad Request – Request Header Or Cookie Too Large。
你也可以考虑修改宝塔本身的nginx配置,让nginx使用80和443以外的其他端口。不过,由于这台服务器我还会安装其他应用,我不想因为改了宝塔底层的配置而影响到其他服务,所以最终还是选择调整Dify本身的端口。
4.6 启动 Docker 容器
在前面提过的那个宝塔SSH窗口中,通过CD命令切换到Dify docker文件夹内,输入以下指令:
docker compose up -d
4.7 检查Dify所有容器是否正常启动
执行完上一个步骤后,你会在黑乎乎的SSH窗口中看到有很多Dify容器陆续启动并运行中,一共有9个还是10个容器吧,我不太记得了。只要没报错,基本上就是启动成功了。
4.8 登录并初始化配置Dify
浏览器输入:
http://这台服务器的IP地址:在.env文件中自定义的端口(如上面的6060)
即可注册一个管理员账号密码,首次登入Dify管理后台。
5 解析域名到宝塔面板所在IP
到上面的步骤为止,其实你已经可以正常使用这台VPS上的Dify服务了。
只不过,我们为了方便,可以解析一个域名到这台服务器的IP上,后续就可以使用域名来访问Dify了,不用每次还要去记住IP和端口。
前往你的域名注册商,找到DNS管理入口,添加一个A记录,创建一个二级域名并绑定到这台服务器的IP地址。
6 宝塔为Dify创建反向代理网站
在宝塔后台,从“网站”菜单进入,会提示需要安装nginx,按提示装即可,注意选quick install(快速安装),不然会耗时非常久且有可能失败。
装完nginx后,进入“网站>反向代理”,添加一个代理:
如上图所示,最主要就填写两个字段:
- 域名:你在域名服务商那里DNS解析到这台VPS的Dify专用域名
- 目标:选URL地址,后面填写本机的IP:自定义的Dify访问端口
7 为Dify网站添加SSL证书
正常来说,做完以上步骤,你已经可以用自定义的域名去访问Dify服务了,不过此时你只能用http协议访问,为了更安全一些,建议还是为这个网站启用https,也就是装个SSL证书。
使用面板管理的好处就是,为网站添加SSL证书的操作是非常方便的,找到网站配置入口,有个SSL配置项,按提示申请一个Let’s Encrypt证书并保存即可,另外记得启用Force HTTPS。而且,宝塔面板会自动给这类证书续期,不用担心证书过期问题。
8 补充说明
- Dify官方其实有提供关于如何给Dify解析域名和支持SSL的方案,但我们既然用宝塔面板,就是为了更加方便地实现类似操作,减少手动修改Dify配置文件的麻烦。
- 一开始我直接一把梭装完了Dify,结果死活无法通过宝塔面板来实现SSL访问Dify,研究了好久才意识到是因为80和443端口占用的问题,导致宝塔本身的nginx无法正常工作。所以奉劝大家,部署Dify时,务必把Dify默认的80和443端口改掉。
- 宝塔国内版的App商店是有现成的Dify安装包的,国际版没有。不过这不是问题,因为我也不推荐使用这些商店来安装应用,因为他们的版本经常落后于官方的。所以直接用Docker编排的方式是最高效的,可以取到最新版的镜像,也能在镜像更新时决定是否要手动更新。