腾讯云搭建Dify全流程

这两天在多个不同的环境(windows, mac, ubuntu)搭建self-host的Dify框架,遇到了不少的问题,不过最后一一解决,成功‘

环境申请

1. 申请腾讯云服务器,个人申请了一个2核4g的服务器以满足Dify最基础的需求,版本选择是 Ubuntu Server 24.04 LTS 64位

2. 申请成功后,SSH登录至服务器

服务器预配置

接下来需要给服务器安装Docker以及Git

1. 安装Git, 参考网址 https://git-scm.com/downloads/linux

sudo apt update
sudo apt install git

2 安装 Docker 参考网址 https://docs.docker.com/engine/install/ubuntu/

依次运行下列命令

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

拉取代码

完成上述操作后,接下来需要Pull Dify的代码到本地

git clone https://github.com/langgenius/dify

构建Docker

cd dify
cd docker
cp .env.example .env
docker compose up -d

异常处理办法

如果没有科学上网,大概率会碰上以下的问题
Error response from daemon: Get "https://registry-1.docker.io/v2/": context 

我们可以通过修改DNS以及增加镜像服务来解决(亲测有效)
1. DNS修改

把以下文件/etc/resolv.conf内添加新的一行114.114.114.114

2.  增加镜像服务

在/etc/docker/daemon.json文件内添加如下镜像

{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}

3. 重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

这时候重新运行compose命令等待一段时间,服务就应该起来了,但会报一个80端口被占用的错,其实是Apache占用了80端口,这时候把Apache停掉重新再compose一次就好

sudo systemctl stop apache2

登录Dify

使用 <服务器ip地址>/install, 就可访问初始化注册界面,输入邮箱,用户名密码后就会自动跳转登录界面,输入刚才的邮箱及密码就可以进入DIfy Studio界面

关于安装Model Provider后,设置API key点击保存无响应问题处理方式

这个坑比较恶心,但也很好解决,从后台查日志可以发现Dify安装插件是个异步的方式,界面上显示可以setup,实际后台还在运行安装依赖包,而且配置较差的电脑很容易超时,因为默认dify超时时间是120s,我windows和ubuntu安装都遇到了这个问题(macbook没有)

解决方法是再docker文件夹下的docker-compose.yaml文件内在如下位置添加

Dify原则上不推荐直接修改这个yaml, 推荐修改.env,但是这个是个例外

 PYTHON_ENV_INIT_TIMEOUT: 1000

修改完保存后重新运行

docker compose up -d

接着等待一段时间(10分钟)再尝试set api key等就可以正常设置了

如何开启HTTPS

Dify开启HTTPS的方法很简单(前提你已经拥有了SSL证书)
首先将你的SSL证书放入/docker/.nginx/ssl文件夹下

其次在docker下的.env文件里找到如下配置,将NGINX_HTTPS_ENABLED设置为true,

NGINX_SSL_CERT_FILENAME和NGINX_SSL_CERT_KEY_FILENAME填入你之前复制的文件名。然后重新compose即可开启Https访问

# ------------------------------
# Environment Variables for Nginx reverse proxy
# ------------------------------
NGINX_SERVER_NAME=_
NGINX_HTTPS_ENABLED=true
# HTTP port
NGINX_PORT=80
# SSL settings are only applied when HTTPS_ENABLED is true
NGINX_SSL_PORT=443
# if HTTPS_ENABLED is true, you're required to add your own SSL certificates/keys to the `./nginx/ssl` directory
# and modify the env vars below accordingly.
NGINX_SSL_CERT_FILENAME=xxxxx.crt
NGINX_SSL_CERT_KEY_FILENAME=xxxxx.key
NGINX_SSL_PROTOCOLS=TLSv1.1 TLSv1.2 TLSv1.3
2
# Nginx performance tuning
NGINX_WORKER_PROCESSES=auto
NGINX_CLIENT_MAX_BODY_SIZE=15M
NGINX_KEEPALIVE_TIMEOUT=65