1. 升级前准备
1.1 确认当前环境状态
根据你的输出,当前环境信息如下:
# 当前 Dify 版本:1.11.1# 安装路径:/usr/local/dify-main# 数据目录大小:14G# 新版本文件:/usr/local/dify-1.14.2.zip# 查看当前dify运行状态cd/usr/local/dify-main/docker&&dockercomposeps# 输出显示所有服务正常运行:# - api: 1.11.1# - web: 1.11.1# - db: postgres:15-alpine# - redis: redis:6-alpine# - 以及其他组件# volumes 目录结构# 包含:app, db, redis, weaviate, sandbox, plugin_daemon 等ls/usr/local/dify-main/docker/volumes2. 升级步骤详解
2.1 第一步:解压新版本
# 进入 /usr/local 目录cd/usr/local# 解压新版本unzipdify-1.14.2.zip-d/usr/local/# 查看解压后的目录结构ls-la/usr/local/|grepdify预期输出:
dify-main dify-1.14.2.zip如果解压出来的目录名不是dify-main,需要重命名:
# 重命名旧版本目录(保留备份)mv/usr/local/dify-main /usr/local/dify-main-1.11.1# 重命名新版本目录# 根据实际解压目录名调整,由于我这次升级到1.14.2,所以改成dify-main-1.14.2文件名称mv/usr/local/dify-main-1.14.2 /usr/local/dify-main2.2 第二步:迁移配置文件
# 复制旧版本的 .env 配置文件到新版本cp/usr/local/dify-main-1.11.1/docker/.env /usr/local/dify-main/docker/.env2.3 第三步:停止旧版本服务
# 进入旧版本目录cd/usr/local/dify-main-1.11.1/docker# 停止所有容器dockercompose down# 确认容器已停止dockerps|grepdify2.4 第四步:迁移 volumes 数据
这是最关键的一步,确保 14G 数据完整迁移:
# 将旧版本 volumes 复制到新版本目录cp-a/usr/local/dify-main-1.11.1/docker/volumes /usr/local/dify-main/docker/volumes# 验证数据完整性(复制过来的数据大小是不是和之前的一样)du-sh/usr/local/dify-main/docker/volumes# 应该显示约 14G注意事项:
- 数据量较大(14G),复制过程可能需要几分钟到几十分钟
- 确保目标目录
/usr/local/dify-main/docker/volumes存在
2.5 第五步:检查配置文件差异
# 对比新旧版本的 .env.example 文件,查看新增配置项diff/usr/local/dify-main-1.11.1/docker/.env.example\/usr/local/dify-main/docker/.env.example# 1.14.2 版本对 .env 做了大幅精简重构,将新版本新增的几个关键变量补充进去cat>>/usr/local/dify-main/docker/.env<<'EOF' # 1.14.2 新增变量 SERVER_CONSOLE_API_URL=http://api:5001 NEXT_PUBLIC_SOCKET_URL=ws://localhost UV_CACHE_DIR=/tmp/.uv-cache API_WEBSOCKET_WORKER_CLASS=geventwebsocket.gunicorn.workers.GeventWebSocketWorker API_WEBSOCKET_WORKER_CONNECTIONS=1000 API_WEBSOCKET_GUNICORN_TIMEOUT=360 CELERY_WORKER_AMOUNT=4 COMPOSE_WORKER_HEALTHCHECK_DISABLED=true COMPOSE_WORKER_HEALTHCHECK_INTERVAL=30s COMPOSE_WORKER_HEALTHCHECK_TIMEOUT=30s SQLALCHEMY_POOL_RESET_ON_RETURN=rollback REDIS_KEY_PREFIX= REDIS_MAX_CONNECTIONS= REDIS_RETRY_RETRIES=3 REDIS_RETRY_BACKOFF_BASE=1.0 REDIS_RETRY_BACKOFF_CAP=10.0 REDIS_SOCKET_TIMEOUT=5.0 REDIS_SOCKET_CONNECT_TIMEOUT=5.0 REDIS_HEALTH_CHECK_INTERVAL=30 CELERY_TASK_ANNOTATIONS=null EVENT_BUS_REDIS_URL= EVENT_BUS_REDIS_CHANNEL_TYPE=pubsub EVENT_BUS_REDIS_USE_CLUSTERS=false EVENT_BUS_LISTENER_JOIN_TIMEOUT_MS=2000 NEXT_PUBLIC_BATCH_CONCURRENCY=5 PLUGIN_MODEL_SCHEMA_CACHE_TTL=3600 MARKETPLACE_URL= PLUGIN_SENTRY_ENABLED=false PLUGIN_SENTRY_DSN= NGINX_SOCKET_IO_UPSTREAM=api_websocket:5001 EOF# 同时修改 COMPOSE_PROFILES(新版本新增了 collaboration)# 查看当前值grepCOMPOSE_PROFILES /usr/local/dify-main/docker/.env# 如果当前是 COMPOSE_PROFILES=weaviate,postgresql,执行下列命令sed-i's/^COMPOSE_PROFILES=.*/COMPOSE_PROFILES=weaviate,postgresql,collaboration/'/usr/local/dify-main/docker/.env2.6 第六步:启动新版本
# 进入新版本目录cd/usr/local/dify-main/docker# 拉取新版本镜像dockercompose pull# 启动所有服务dockercompose up-d# 查看启动日志dockercompose logs-f2.7 第七步:验证升级结果
# 1. 检查所有容器状态dockercomposeps# 预期输出:所有服务状态正常"# 2. 检查 API 服务日志dockercompose logs api--tail=50# 3. 访问 Web 界面验证# 或直接浏览器访问服务器 IPcurl-Ihttp://localhost服务状态正常图:
3.升级遇到的问题
3.1 api连不上数据库
旧版本数据库容器名是 db,新版本 1.14.2 改成了 db_postgres,但 .env 里的 DB_HOST 还是旧的 db,下面图片是命令修改,也可以直接通过进入配置文件修改 DB_HOST 配置信息。
# 查看当前 DB_HOST 配置grepDB_HOST /usr/local/dify-main/docker/.env# 修改命令sed-i's/^DB_HOST=db$/DB_HOST=db_postgres/'/usr/local/dify-main/docker/.env# 确认修改结果grepDB_HOST /usr/local/dify-main/docker/.env直接修改 DB_HOST 配置信息图:
4. 清理旧版本(推荐)
确认新版本运行稳定后,可以清理旧版本数据:
# 删除旧版本目录(volumes 数据已经迁移到新版本,旧的可以删)rm-rf/usr/local/dify-main-1.11.1# 顺便清理下载的压缩包(可选)rm-f/usr/local/dify-1.14.2.ziprm-f/usr/local/dify-main.zip# 清理旧版本不再使用的 Docker 镜像,释放磁盘空间dockerimage prune-a5. 升级完成确认
完成所有步骤后,请确认:
- ✅ 所有服务正常运行以及版本是否正确:
docker compose ps - ✅ 数据完整迁移:检查 volumes 目录大小
- ✅ Web 界面可访问:浏览器访问服务器 IP
- ✅ API 服务正常:
curl http://localhost:5001/health - ✅ 数据库迁移完成:查看日志无报错
如果遇到任何问题,请保留旧版本目录/usr/local/dify-main-1.11.1作为备份,并查看相关服务的日志进行排查。