一、dify从1.9.1升级至1.11.1
1、从FitCS仓库中拉取最新的dify镜像,(具体配套镜像版本需要查看对应版本dify的docker-compose.yaml 文件明细)
|
docker pull anggenius/dify-api-local:1.11.1.0 docker pull langgenius/dify-web-local:1.11.1.0 docker pull busboy:latest docker pull semitechnologies/weaviate:1.27.0 docker pull langgenius/dify-sandbox:0.2.12 #无需重复拉取 docker pull postgres:15-alpine #无需重复拉取 docker pull redis:6-alpine #无需重复拉取 docker pull squid:latest #无需重复拉取 docker pull nginx:latest #无需重复拉取 |
2、拉取git tag1.11.1分支代码
3、拷贝.env文件
|
cd dify/docker cp .env.example .env |
4、修改环境变量(需要参考之前运行的.env文件)
|
CONSOLE_API_URL=https://di******me.com CONSOLE_WEB_URL=https:// di******me.com SERVICE_API_URL=https:// di******me.com TRIGGER_URL=https:// di******me.com APP_API_URL=https:// di******me.com APP_WEB_URL=https:// di******me.com FILES_URL=https:// di******me.com INTERNAL_FILES_URL=https:// di******me.com
# 修改允许上传文件大小 UPLOAD_FILE_SIZE_LIMIT=150 UPLOAD_FILE_BATCH_LIMIT=10 PLUGIN_S3_USE_AWS_MANAGED_IAM=false PLUGIN_S3_ENDPOINT=false PLUGIN_S3_USE_PATH_STYLE=false PLUGIN_PYTHON_ENV_INIT_TIMEOUT=640 PLUGIN_MAX_EXECUTION_TIMEOUT=2400 # 重要 PIP_MIRROR_URL=https://mi********om/pypi/simple # 修改HTTP节点最大文本长度(20M) HTTP_REQUEST_NODE_MAX_BINARY_SIZE=20971520 HTTP_REQUEST_NODE_MAX_TEXT_SIZE=20971520 #代码节点最大返回字符串长度 CODE_MAX_STRING_LENGTH=9223372036854775808 CODE_GENERATION_MAX_TOKENS=10240 CODE_MAX_STRING_ARRAY_LENGTH=300 CODE_MAX_OBJECT_ARRAY_LENGTH=300 # 修改代码执行时间 SANDBOX_WORKER_TIMEOUT=300
CODE_EXECUTION_CONNECT_TIMEOUT=300 CODE_EXECUTION_READ_TIMEOUT=300 CODE_EXECUTION_WRITE_TIMEOUT=300
# 新增两个参数修改项 MARKETPLACE_ENABLE=false FORCE_VERIFYING_SIGNATURE=false |
5、执行docke-composer停止命令
|
docker-compose down |
6、将原docker/volumes内容进行备份(可以不备份plugin目录,假定当前dify位于~/dify目录下,很花时间)
|
cd ~/dify/docker tar -cvf volumes_1122.tgz volumes |
优先备份:volumes/certbot、volumes/db、volumes/weaviate
7、【重要!!!】修改docker/volumes目录用户权限,否则1.11.1版本中会因为权限问题,导致文件无法正常上传。
|
chown -R 1001:1001 vloumes/app/storage chmod -R u+rwX vloumes/app/storage |
8、执行启动命令
|
docker-compose up -d |
9、执行docke-compose 日志查看指令,查看是否存在异常(多个容器的日志一起刷新)
|
docker-compose logs -f –tail 100 |
当前状态为已从1.9.0升级至1.11.1,发现历史知识库无法检索,报错现象如下:

根据官方指导文档进行修复即可(链接地址:https://docs.dify.ai/zh/self-host/troubleshooting/weaviate-v4-migration)。
这里对本地迁移步骤进行记录(这里是已经升级到1.11.1,只能进行选择修复路径,摊手)
1、停用weaviate
|
# 切换到docker目录,执行 docker-compose stop weaviate |
2、【重要】修复孤立的LSM数据(直接拷贝执行即可)
|
# 容器内执行 docker-compose run –rm –entrypoint /bin/sh weaviate -c " cd /var/lib/weaviate for dir in vector_index_*_node_*_lsm; do [ -d "$dir" ] || continue index_id=$(echo "$dir" | sed -n 's/vector_index_([^_]*_[^_]*_[^_]*_[^_]*_[^_]*)_node_.*/1/p') shard_id=$(echo "$dir" | sed -n 's/.*_node_([^_]*)_lsm/1/p') mkdir -p "vector_index_${index_id}_node/$shard_id/lsm" cp -a "$dir/"* "vector_index_${index_id}_node/$shard_id/lsm/" echo "✓ Copied $dir" done " |
3、重启weaviate容器
|
docker-compose start weaviate |
4、列出集合(非必要,需要进入api容器内执行):
|
curl -s -H "Authorization:Bearer WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih" "http://weaviate:8080/v1/schema" | python3 -c " import sys, json for cls in json.load(sys.stdin).get('classes', []): if cls['class'].startswith('Vector_index_'): print(cls['class']) " |
5、确认对象技术非零(非必要)
|
curl -s -H "Authorization: Bearer WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih" "http://weaviate:8080/v1/objects?class=Vector_index_bc3251c1_8e8b_4adc_a66f_69bccb086f2e_Node" |
说明:其中class为上一个指令的返回结果,使用官方给的python脚本得到的数据总是0,但是curl命令实际有数据返回的。因为只是个确认的过程,不影响迁移效果,直接忽略吧。
6、【重要】进行Shema迁移
因为按照官方路线B在worker容器内执行一直报连接失败。这里选择单独在本地创建虚拟环境进行迁移,
6.1 修改docker-compose.yaml文件暴露weaviate的8080、50051端口
|
Weaviate ports: – “50051:50051” – “8080:8080” |
6.2 停用并启用weaviate,并检查50051端口是否在本地监听
|
docker-compose down weaviate docker-compose up weaviate -d netstat -tuln | grep 50051 |
6.3 创建本地虚拟环境(要求是python3.11+)
|
python -m venv weaviate_migration_env source weaviate_migration_env/bin/activate pip install weaviate-client requests |
6.4 修改migrate_weaviate_collections.py,将访问地址weaviate改为127.0.0.1,如下:
|
WEAVIATE_ENDPOINT = os.getenv("WEAVIATE_ENDPOINT", "http://127.0.0.1:8080") WEAVIATE_GRPC_ENDPOINT = os.getenv("WEAVIATE_GRPC_ENDPOINT", "grpc://127.0.0.1:50051") |
migrate_weaviate_collections.py 源文件地址:
https://github.com/langgenius/dify-docs/blob/main/assets/migrate_weaviate_collections.py
6.5 执行迁移脚本
|
python migrate_weaviate_collections.py |
执行成功后,结束位置展示如下内容:
|
Replacing old collection with migrated data… Step 1: Deleting old collection… Deleted Step 2: Getting schema from migrated collection… Step 3: Creating collection with original name… Created Step 4: Copying data to original collection name… Copied 1000 objects… Copied 1014 objects… Total copied: 1014 objects Step 5: Cleaning up temporary migrated collection… Cleaned up SUCCESS! Vector_index_bc3251c1_8e8b_4adc_a66f_69bccb086f2e_Node now has the new schema with 1014 objects ================================================================================ Migration Complete! ================================================================================ Summary: Collections migrated: 3 |
7、登录dify,针对历史知识库进行文档检索测试,发现知识库可用,说明数据迁移成功



