在Docker上部署Dify
一、背景简介
随着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
更多推荐
所有评论(0)