Mem0 自托管 Server 如何从 ankane/pgvector 镜像迁移到官方 pgvector/pgvector:pg17 镜像

发布时间:2026/9/9 21:19:21
Mem0 自托管 Server 如何从 ankane/pgvector 镜像迁移到官方 pgvector/pgvector:pg17 镜像 Mem0 自托管 Server 如何从 ankane/pgvector 镜像迁移到官方 pgvector/pgvector:pg17 镜像【免费下载链接】embedchainThe Memory Layer for AI Agents - Drop-in memory infrastructure for AI agents and apps. Context that persists. Built for production.项目地址: https://gitcode.com/GitHub_Trending/em/embedchain如果你用docker-compose.yaml在server/目录自托管了 Mem0 server而现在需要把 Postgres 镜像从已归档的ankane/pgvector:v0.5.1换成官方维护的pgvector/pgvector:pg17这篇文章就是完整的迁移路径。迁移后 PostgreSQL 从 15 升到 17pgvector 从 0.5.1 升到 0.8.0带来改进的 HNSW 性能和并行索引构建同时 Postgres 凭据从docker-compose.yaml中的硬编码postgres/postgres改为通过POSTGRES_USER/POSTGRES_PASSWORD环境变量设置。由于 PostgreSQL 17 无法直接读取 PostgreSQL 15 生成的数据文件已有数据必须走「导出—删除旧卷—导入」的流程不能直接切换镜像。迁移前先确认你属于哪种情况全新安装没有已有数据不需要任何迁移步骤。只需把示例环境变量文件复制为.env至少设置POSTGRES_PASSWORD和OPENAI_API_KEY然后make up启动即可详见 server/README.md。已有安装需要保留数据按下面的完整迁移流程执行。当前仓库中的 docker-compose.yaml 里 Postgres 服务已经是image: pgvector/pgvector:pg17并且通过POSTGRES_PASSWORD${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}强制要求提供密码——缺少它时docker compose up会直接拒绝启动。前提条件旧栈ankane/pgvector:v0.5.1镜像仍在运行并且你在宿主机上可以执行docker compose命令。第 1 步从旧容器导出数据在旧栈仍在运行时进入server目录执行cd server docker compose exec -T postgres pg_dumpall -U postgres mem0_backup.sqlpg_dumpall会导出所有数据库包括 mem0 的 memories 数据和mem0_app里的认证/配置数据导出文件mem0_backup.sql生成在server目录下。导出后必须验证备份文件非空ls -lh mem0_backup.sql备份完成前不要执行下一步——下一步会永久删除 Postgres 数据卷而这是整个迁移中唯一不可逆的操作。第 2 步停止旧栈并删除旧数据卷docker compose down docker compose down -vdocker compose down -v会永久删除postgres_db数据卷对应 docker-compose.yaml 顶部volumes:中声明的卷。Makefile 里对应的目标是make clean即docker compose down -v但迁移场景中直接执行上面的 compose 命令即可。执行前请确认第 1 步的备份已经验证通过。第 3 步更新.env新配置中 Postgres 凭据不再硬编码在docker-compose.yaml里需要写进你的.env变量清单与 server/.env.example 一致POSTGRES_HOSTpostgres POSTGRES_PORT5432 POSTGRES_DBpostgres POSTGRES_USERpostgres POSTGRES_PASSWORDyour-password # 必填缺失时 compose 拒绝启动 POSTGRES_COLLECTION_NAMEmemories其中your-password需要替换为你要设置的 Postgres 密码。如果你之前依赖的是硬编码默认值postgres/postgres把POSTGRES_PASSWORDpostgres写进去即可保持同样的凭据。第 4 步只启动 Postgres等待就绪先只启动 Postgres 容器不要启动 mem0 APIdocker compose up -d postgres顺序很关键API 容器启动时会执行alembic upgrade head这会创建空表与后续的备份恢复相冲突。等 Postgres 通过健康检查docker compose exec -T postgres pg_isready -q echo ready || echo not ready输出ready后再继续输出not ready说明容器还没就绪稍等片刻重试。第 5 步恢复数据docker compose exec -T postgres psql -U postgres mem0_backup.sql恢复过程中可能出现role postgres already exists之类的提示可以安全忽略。文档明确警告必须在启动 mem0 API 容器之前完成恢复。API 启动时运行的数据库迁移会创建空表如果恢复晚于 API 启动会因 duplicate-key 错误失败并导致 API keys 和设置丢失。第 6 步启动 API数据恢复完成后再启动 mem0 API 容器docker compose up -d mem0Alembic 会检测到已存在的表只应用新增的迁移不会覆盖恢复进来的数据。第 7 步验证迁移结果# 检查各服务健康状态 cd server make healthmake health会对 API 的/docs端点、dashboard 的/api/health端点和pg_isready各做一次检查定义见 server/Makefile。然后确认迁移前的记忆数据仍然可访问curl -s http://localhost:8888/memories?user_idyour-user-id \ -H X-API-Key: your-api-key其中your-user-id替换为你要查询的用户 IDyour-api-key替换为你的 API key程序化访问使用X-API-Key请求头认证。能返回该用户迁移前的记忆条目说明数据完整保留。回滚如果迁移后出现问题把 docker-compose.yaml 中 Postgres 的镜像标签改回旧版本postgres: image: ankane/pgvector:v0.5.1然后销毁新卷、重建并启动旧镜像、用备份恢复数据docker compose down -v docker compose up -d --build docker compose exec -T postgres psql -U postgres mem0_backup.sql注意docker compose down -v同样会删除新卷里的数据回滚能救回来的前提是第 1 步的mem0_backup.sql还在且完好。限制说明迁移要求旧栈在导出时处于运行状态数据导出与恢复之间第 25 步服务不可用。POSTGRES_PASSWORD是硬性要求docker-compose.yaml中的${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}会在缺失时让docker compose up失败这是预期行为而不是故障。ankane/pgvector镜像已归档且不再维护回滚只是临时手段不是长期方案。完整的迁移文档见 docs/migration/server-pgvector-upgrade.mdx日常启动、认证与 dashboard 操作见 server/README.md。【免费下载链接】embedchainThe Memory Layer for AI Agents - Drop-in memory infrastructure for AI agents and apps. Context that persists. Built for production.项目地址: https://gitcode.com/GitHub_Trending/em/embedchain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻