一、背景简介

       随着Ai越来越强大,同时也期望使用低代码的方式,降低Ai应用的开发难度,就需要Dify之类的Ai平台;本文介绍在Docker上部署Dify,宿主机系统是Centos 7以上。

二、安装Docker
2.1 卸载旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.2 安装依赖并设置阿里云镜像加速
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3 安装最新版本的Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

执行上述安装命令,直到看见complete,才说明安装成功了。如果没有看到complete标识,可能是因为网络延迟之类的原因,没有拉取到docker相关的镜像或者工具,重新执行这个安装命令。

2.4 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

   执行docker info 或者docker  version 命令,能够看到docker的相关信息,这就表示docker安装成功了

2.5 更新Docker镜像源

  配置多个国内的docker镜像源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.m.daocloud.io",
        "https://docker-0.unsee.tech" ,
        "https://yj6kddgn.mirror.aliyuncs.com"
      ]
}
EOF

变更docker镜像源,需要重新启动docker服务

sudo systemctl stop docker.socket   # 容易遗漏
sudo systemctl stop docker.service
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl daemon-reload
sudo systemctl start docker.service

       执行docker info命令,找到registry mirrors,是否为自己设置的数据源;如果不是,可能是 /etc/docker/daemon.json中的格式不对,删除并设置该文件,之后重新启动docker服务

三、安装dify
3.1 准备安装工具

       安装wget工具:

sudo yum install -y wget

       安装git工具:

sudo yum install -y git

       把当前用户加入 docker 组,省得每次 sudo 

sudo usermod -aG docker $USER
newgrp docke
3.2 拉取dify项目

   在路径(根据自身的喜好设置,本文是放在/opt)下,

cd /opt
git clone https://gitee.com/dify_ai/dify.git

   下载dify成功之后,cd dify/docker,进入dify中的docker目录,之后的所有操作,都是在这个目录下进行的。

3.3 设置dify的环境变量
# 生成默认配置
cp .env.example .env

# 如需改端口(80 被占用就改成 8080)
sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=8080/' .env

在dify启动之后,构建工作流、智能体等功能,dify自动同步保存,可能会耗时很久,那就执行以下命令

cat >> .env <<'EOF'

# === 同步加速 ===
SYNC_BATCH_SIZE=500
SYNC_INTERVAL_SEC=5
EXCEL_PAGINATION=1000

# === 缓存/并发 ===
REDIS_CACHE_ON=true
FILE_CACHE_TTL=600
CELERY_WORKER_AMOUNT=16
CELERY_MAX_WORKERS=32
EOF
3.4 挂载dify密钥文件

      创建密钥挂载目录,并设置该目录的权限

sudo mkdir -p ./ volumes/privkeys
chmod -R 777 ./volumes/privkeys

       用编辑器打开  docker-compose-template.yaml ,找到 api 服务和 worker服务 的  volumes的段落,加上密钥的挂载目录

      - ./volumes/privkeys:/app/privkeys

     删除docker-compose.yaml文件

rm -rf docker-compose.yaml

    执行./generate_docker_compose 重新生成docker-compose.yaml文件

3.5 清空docker的缓存(可选)

     如果之前已经生成过dify相关的容器了,可能需要清空一下相应的缓存

docker compose down
docker volume prune -f
docker compose build --no-cache
3.6 生成并启动dify
# 拉取 & 运行全部服务(11 个容器)
docker compose up -d

   启动成功之后,在浏览器输入http://宿主机ip:8080,就可以看到dify的登录了。首次登录dify,需要设置管理员账号和密码。

四、常见问题
1.在保存dify管理员账号和密码时,提示授权问题

     可能原因:

        1.没有设置dify 密钥挂载目录,或者 这个挂载目录的权限设置问题;

sudo mkdir -p ./ volumes/privkeys
chmod -R 777 ./volumes/privkeys

       2.CentOS 7默认启用了SELinux,这可能会阻止容器访问挂载的卷 。          

             检查SELinux状态

getenforce

             如果输出是Enforcing,说明SELinux正在强制执行。为挂载目录设置正确的SELinux上下文:

# 为Dify的存储目录设置Docker卷的SELinux标签
sudo setsebool -P container_manage_cgroup on # 可选,根据需要
sudo chcon -Rt svirt_sandbox_file_t /opt/dify/storage # 替换为你的实际存储路径

执行完上述命令之后,都需要重新启动dify

docker compose down
docker volume prune -f   #重新整理挂载目录
docker compose build --no-cache #清空缓存
docker compose up -d

更多推荐