
如何把 SurfSense 旧版 all-in-one 容器的数据迁移到新的 Docker Compose 栈【免费下载链接】SurfSenseOpen-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) through one platform, API or MCP server. Join our Discord: https://discord.gg/ejRNvftDp9项目地址: https://gitcode.com/GitHub_Trending/su/SurfSense如果你之前以 all-in-one 容器的方式运行 SurfSense镜像ghcr.io/modsetter/surfsense:latest通过docker-compose.quickstart.yml启动所有数据都存放在surfsense-data这一个卷里。新的 Docker Compose 栈把数据库从 PostgreSQL 14 升级到了 17直接把旧卷挂进新栈不可行必须做一次性的 dump 加 restore。SurfSense 的官方安装脚本已经内置了这条迁移路径检测旧卷、用临时 PostgreSQL 14 容器导出数据库、恢复SECRET_KEY、把数据灌入 PostgreSQL 17 并启动新栈。本文给出默认凭据下的一条命令主路径、自定义数据库凭据时的手动导出流程以及迁移结果的验证与清理方式。适用前提主机已安装并运行 Docker或 Docker Desktop且带 Compose脚本会检查缺失时直接报错退出。旧版 all-in-one 容器创建的surfsense-data卷还在本机。磁盘有约 500 MB 空闲空间用于存放 dump 文件低于 500 MB 时脚本会提示并要求确认。迁移依据的文档与脚本见 Updating 文档、Docker Installation 文档、install.sh 和 migrate-database.sh。主路径一条命令完成迁移在你想放置 SurfSense 的目录下执行Linux/macOSbash 环境curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash检测到surfsense-data卷后脚本自动进入迁移模式按顺序完成以下动作停止正在使用surfsense-data的旧容器防止数据文件损坏执行前会提示确认——这是脚本唯一会主动停掉你已有进程的地方。启动一个临时 PostgreSQL 14 容器镜像pgvector/pgvector:pg14容器名surfsense-pg14-migration挂上旧卷。用pg_dump把旧库导出到./surfsense_migration_backup.sql并校验 dump 文件非空、包含 PostgreSQL dump 头。从旧卷中的/data/.secret_key恢复SECRET_KEY保存到./surfsense_migration_secret.key。下载 compose 文件到./surfsense/目录用恢复出的SECRET_KEY生成.env。启动 PostgreSQL 17新栈的db服务镜像见 docker-compose.yml 中的pgvector/pgvector:pg17把 dump 灌入。启动全部服务并等待其变为健康状态。整个过程的完整日志写入./surfsense-migration.log。原始surfsense-data卷全程不会被删除dump 文件本身就是检查点——中途任何一步失败直接重跑安装脚本即可。若./surfsense_migration_backup.sql已存在上次运行导出过脚本会跳过导出、直接执行恢复因此重跑是安全的。脚本还会顺带询问是否启用 Watchtower 每日自动更新这与迁移本身无关按需选择即可--no-watchtower可跳过。旧容器使用自定义数据库凭据时导出脚本默认使用的旧库凭据是usersurfsense、passwordsurfsense、dbsurfsense。如果你给旧 all-in-one 容器设置过自定义的POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB先手动运行导出脚本再运行安装器。两条命令必须在同一个目录下执行因为安装器会从当前目录读取 dump 文件curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/migrate-database.sh -o migrate-database.sh bash migrate-database.sh --db-user myuser --db-password mypass --db-name mydb curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash其中myuser/mypass/mydb是文档给出的示例值需替换成旧容器实际使用的POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB。脚本另支持--yes跳过所有确认提示参数完整用法可运行bash migrate-database.sh --help查看。如果旧卷里找不到.secret_key文件说明当年SECRET_KEY是作为显式环境变量传入容器的。交互运行时脚本会提示你输入旧值直接回车则生成新 key代价是迁移后所有已登录的浏览器会话失效。若要在非交互模式下找回原 key脚本会自动生成新 key 并提示迁移后到./surfsense/.env中把SECRET_KEY改回原值。Windows PowerShell 用户可用文档中给出的 PowerShell 安装器install.ps1它通过migrate-database.ps1执行同一套迁移逻辑irm https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.ps1 | iex验证迁移结果按以下顺序确认恢复冒烟测试安装脚本在 restore 后统计public模式下的表数输出类似Smoke test passed: N table(s) restored successfully.N 为实际表数随你的数据不同。若统计到 0 张表脚本会提示 restore may have silently failed并让你查看docker compose logs db。打开页面核对数据安装完成后打开http://localhost:3929默认地址文档要求Open SurfSense and confirm your data is intact。这是文档给出的最终确认步骤。检查服务健康状态cd surfsense docker compose ps服务会从(health: starting)变为(healthy)说明新栈整体起来了。如果 restore 阶段输出了错误脚本会原样打印并说明部分错误如already exists可能只是 pg_dump 头信息的良性噪音文档指出只有当 SurfSense 行为异常时才需要手动检查安装脚本会同时打印对应的手动psql检查命令。清理与回退边界./surfsense_migration_backup.sql在验证通过前保留确认数据无误后再删除rm ./surfsense_migration_backup.sql。docker volume rm surfsense-data是不可逆操作务必在页面核对数据完成之后执行。安装脚本结束时的提示还包含删除./.migration_done标记文件它会阻止迁移模式的重复触发。若某次运行停在导出阶段想重新导出先删除已有 dump 文件再重跑脚本遇到已存在的 dump 会中止以避免覆盖并明确提示这一处理。迁移失败时无需担心数据损失原卷始终原样保留migrate-database.sh的清理逻辑只移除临时容器失败时也会明确提示 Your original data in surfsense-data is untouched。至此旧版 all-in-one 容器的数据已完整运行在新的 Docker Compose 栈上后续升级走常规的docker compose pull docker compose up -d即可不再涉及卷迁移。【免费下载链接】SurfSenseOpen-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) through one platform, API or MCP server. Join our Discord: https://discord.gg/ejRNvftDp9项目地址: https://gitcode.com/GitHub_Trending/su/SurfSense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考