第一步:停止服务并备份
|
1 2 3 4 5 6 7 8 9 10 11 |
# 进入 docker 目录 cd docker # 停止所有服务 docker compose down # 备份 docker-compose 配置文件(可选) cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak # 备份数据卷(重要!) tar -cvf volumes-backup-$(date +%s).tgz volumes |
备份检查清单:
-
• 数据库数据 -
• 应用存储文件 -
• 环境配置文件 -
• 自定义配置
第二步:拉取最新代码
|
1 2 3 4 5 6 7 |
# 返回项目根目录 cd .. # 获取最新代码 git fetch origin git checkout main git pull origin main |
如果出现本地文件与远程文件冲突的提示,建议先备份本地修改,然后再强制覆盖为最新远程版本:
|
1 2 3 4 5 6 7 8 |
# 备份有改动的本地文件或目录(例如 docker-compose.yaml) cp docker-compose.yaml docker-compose.yaml.bak # 丢弃本地改动,强制还原成线上(远程)最新内容 git checkout -- docker-compose.yaml # 拉取最新代码 git pull origin main |
如涉及较多冲突,可多次执行上述步骤,确保所有冲突文件都已按需处理。
第三步:更新存储目录权限(关键步骤)
将storage目录设置成非root权限
|
1 2 3 4 5 6 7 |
# 更新目录所有权为 UID 1001 sudo chown -R 1001:1001 ./docker/volumes/app/storage # 或 # 更新目录所有权为 www:www sudo chown -R www:www ./docker/volumes/app/storage |
验证权限设置:
|
1 2 |
# 验证权限设置 ls -ln ./docker/volumes/app/storage |
预期输出:
|
1 |
drwxr-xr-x 2 1001 1001 4096 Dec 08 10:00 storage |
权限说明:
-
• 1001:1001 不是"权限",而是用户ID(UID)和组ID(GID) -
• 即使系统中不存在名为 1001 的用户,这个命令也是有效的 -
• Docker 容器内的进程以 UID 1001 运行,需要匹配主机权限
第四步:更新环境配置
|
1 2 3 4 |
cd docker # 编辑环境变量文件 vim .env # 或使用其他编辑器 |
重要配置项:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 如果要使用 MySQL(可选) DB_TYPE=mysql # 默认为 postgresql # MySQL 连接配置(如果使用 MySQL) DB_USERNAME=your_mysql_user DB_PASSWORD=your_mysql_password DB_HOST=your_mysql_host DB_PORT=3306 DB_DATABASE=dify # 插件市场访问(确保网络可达) # 确保可以访问 https://marketplace.dify.ai # 数据库迁移(默认启用) MIGRATION_ENABLED=true |
配置对比:
|
1 |
对比 .env.example 文件,检查是否有新增的环境变量需要配置。 |
第五步:启动服务
|
1 2 3 4 5 |
# 标准启动 docker compose up -d # 如果遇到数据库连接问题,使用 PostgreSQL profile docker compose --profile postgresql up -d |
常见启动问题:
如果看到类似错误:
|
1 2 |
failed to connect to `host=db_postgres user=postgres database=dify_plugin`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving) |
解决方案:
|
1 |
docker compose --profile postgresql up -d |
第六步:验证升级
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 1. 查看服务状态 docker compose ps # 2. 查看日志 docker compose logs -f # 3. 检查特定服务日志 docker compose logs api docker compose logs worker docker compose logs web # 4. 检查权限相关错误 docker compose logs api | grep -i permission docker compose logs worker | grep -i permission |
健康检查:
-
• 所有容器状态为 Up -
• 没有 Permission Denied 错误 -
• API 服务正常响应 -
• Web 界面可以访问
第七步:功能验证
-
1. 访问 Web 界面 -
• 打开 http://localhost 或配置的域名 -
• 检查登录是否正常
-
-
2. 验证应用运行 -
• 测试已有应用是否正常工作 -
• 检查知识库是否可以访问 -
• 尝试创建新的对话
-
-
3. 插件系统验证 -
• 点击右上角 "Plugins" 按钮 -
• 验证插件是否正确安装 -
• 检查内置工具是否已迁移到插件
-
方案二:源码部署
未经过实践尝试
第一步:停止服务
|
1 2 3 4 5 6 7 8 |
# 停止 API 服务器 pkill -f "flask run" # 或使用你的进程管理器 # 停止 Worker pkill -f "celery worker" # 停止 Web 前端 pkill -f "next" |
第二步:更新代码
|
1 2 3 4 |
# 拉取最新代码 git fetch origin git checkout main git pull origin main |
第三步:更新依赖
|
1 2 3 4 5 6 7 8 |
# 进入 API 目录 cd api # 使用 uv 同步依赖 uv sync # 或使用 pip(如果没有 uv) pip install -r requirements.txt |
第四步:数据库迁移
|
1 2 3 4 5 |
# 运行迁移脚本 uv run flask db upgrade # 或使用标准 Flask 命令 flask db upgrade |
迁移注意事项:
-
• 确保数据库连接正常 -
• 建议在迁移前备份数据库 -
• 迁移过程可能需要几分钟
第五步:重启服务
|
1 2 3 4 5 6 7 8 9 |
# 启动 API 服务器 uv run flask run --host 0.0.0.0 --port 5001 # 启动 Worker(新终端) celery -A app.celery worker -P gevent -c 1 --loglevel INFO # 启动 Web 前端(新终端) cd web pnpm dev |
常见问题解决
问题 1: 权限错误
错误信息:
|
1 |
PermissionError: [Errno 13] Permission denied: '/app/api/storage/...' |
解决方案:
|
1 2 3 4 5 6 |
# 检查目录权限 ls -ln ./docker/volumes/app/storage # 重新设置权限 sudo chown -R 1001:1001 ./docker/volumes/app/storage sudo chmod -R 755 ./docker/volumes/app/storage |
问题 2: 系统没有 UID 1001 用户
理解:
-
• 1001:1001 是用户ID和组ID,不是用户名 -
• Linux 可以使用纯数字 ID,无需实际用户存在
可选方案:创建用户
|
1 2 3 4 5 |
# 创建名为 dify 的用户,指定 UID 1001 sudo useradd -u 1001 -U dify # 使用用户名设置权限 sudo chown -R dify:dify ./docker/volumes/app/storage |
问题 3: SELinux 阻止访问
检查 SELinux:
|
1 2 3 4 5 6 7 8 |
# 查看状态 sestatus # 设置正确的上下文 sudo chcon -Rt svirt_sandbox_file_t ./docker/volumes/app/storage # 或临时禁用(仅用于测试) sudo setenforce 0 |
问题 4: 数据库连接失败
错误信息:
|
1 |
hostname resolving error (lookup db_postgres on 127.0.0.11:53) |
解决方案:
|
1 2 3 4 5 6 |
# 使用 PostgreSQL profile docker compose --profile postgresql up -d # 或检查网络配置 docker network ls docker network inspect docker_default |
问题 5: 插件无法访问
检查清单:
-
• 确保可以访问 https://marketplace.dify.ai -
• 检查防火墙规则 -
• 验证网络代理配置
测试连接:
|
1 2 3 4 5 |
# 从容器内测试 docker compose exec api curl -I https://marketplace.dify.ai # 从主机测试 curl -I https://marketplace.dify.ai |
问题 6: Weaviate 版本不兼容
错误信息:
|
1 |
Weaviate version incompatible |
解决方案:
|
1 2 3 4 5 6 7 8 |
# 更新 docker-compose.yaml 中的 Weaviate 版本 weaviate: image: semitechnologies/weaviate:1.24.0 # 或更高版本 # 添加 gRPC 端口 ports: - "8080:8080" - "50051:50051" # gRPC 端口 |
回滚方案
如果升级后遇到严重问题,可以回滚到旧版本:
Docker Compose 回滚
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 1. 停止服务 docker compose down # 2. 切换到旧版本 git checkout 1.7.1 # 3. 恢复权限(如果修改过) sudochown -R root:root ./docker/volumes/app/storage # 4. 恢复数据备份(如果需要) rm -rf docker/volumes tar -xvf volumes-backup-TIMESTAMP.tgz mv volumes docker/ # 5. 重启服务 cd docker docker compose up -d |
源码部署回滚
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 1. 停止服务 # 使用进程管理器停止所有服务 # 2. 回退代码 git checkout 1.7.1 # 3. 回退数据库(如果需要) # 恢复数据库备份 # 4. 重新安装依赖 cd api uv sync # 5. 重启服务 |
升级后优化建议
-
1. 性能监控
|
1 2 3 4 5 6 7 8 |
# 查看容器资源使用 docker stats # 查看服务日志 docker compose logs -f --tail=100 # 监控数据库性能 # 使用 pgAdmin 或 MySQL Workbench |
-
2. 备份策略
建议设置定期备份:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash # backup.sh - Dify 备份脚本 BACKUP_DIR="/path/to/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) # 备份数据卷 tar -czf "${BACKUP_DIR}/dify_volumes_${TIMESTAMP}.tar.gz" \ ./docker/volumes # 备份数据库 docker compose exec -T db pg_dump -U postgres dify > \ "${BACKUP_DIR}/dify_db_${TIMESTAMP}.sql" # 保留最近 7 天的备份 find "${BACKUP_DIR}" -name "dify_*" -mtime +7 -delete echo "Backup completed: ${TIMESTAMP}" |
设置定时任务:
|
1 2 3 4 5 |
# 编辑 crontab crontab -e # 每天凌晨 2 点执行备份 0 2 * * * /path/to/backup.sh >> /var/log/dify_backup.log 2>&1 |
-
3. 日志管理
配置日志轮转:
|
1 2 3 4 5 6 7 8 |
# docker-compose.yaml 中添加 services: api: logging: driver: "json-file" options: max-size: "10m" max-file: "3" |
-
4. 安全加固
|
1 2 3 4 5 6 7 8 9 10 11 |
# 1. 使用强密码 # 更新 .env 中的敏感信息 # 2. 启用 HTTPS # 配置反向代理(Nginx/Caddy) # 3. 限制网络访问 # 配置防火墙规则 # 4. 定期更新 # 关注 GitHub releases 获取安全更新 |
相关资源
浏览量: 1