如何在 SurfSense Docker 部署上用 Watchtower 启用每日自动更新?
【免费下载链接】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
如果你已经用 Docker 部署了 SurfSense(开源 NotebookLM 替代品,Python 后端 + Next.js 前端 + 数据库、反向代理等一整套服务),并希望它每天自动拉取并切换到新镜像,而不是每次手动执行更新命令,本文介绍如何用 Watchtower 容器实现每日自动更新。前提是 SurfSense 已经通过 Docker 方式运行起来(安装脚本或手动 Compose 两种路径都适用)。
前提条件
根据 Docker 安装文档:
- 已安装并运行 Docker Desktop(或 Docker Engine 加 Compose);
- SurfSense 已通过两种安装方式之一部署:
- 安装脚本:Linux/macOS 用
curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash,Windows 用 PowerShell 的irm https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.ps1 | iex。脚本会创建./surfsense/目录,内含 compose 文件和.env; - 手动 Compose:
git clone https://github.com/MODSetter/SurfSense.git后进入SurfSense/docker,复制.env.example为.env并至少设置SECRET_KEY,然后docker compose up -d。
- 安装脚本:Linux/macOS 用
路径一:安装脚本时已启用 Watchtower
用安装脚本部署时,脚本会交互式询问是否启用 Watchtower 自动每日更新(提示中说明更新可能在后台下载数 GB 镜像)。选择启用后,无需再做任何配置——脚本会自动启动名为watchtower的容器,安装完成时会打印:
Watchtower: auto-updates every 24h (disable: docker rm -f watchtower)如果当时选跳过(或传了--no-watchtower),脚本结尾会提示Watchtower skipped. For auto-updates, re-run without --no-watchtower.,此时按下面的路径二手动启动即可。安装脚本还支持--watchtower-interval=SECS参数自定义检查间隔(默认86400秒即 24 小时),详见 install.sh 头部注释。
路径二:在已有手动部署上手动启动 Watchtower
对于手动 Docker Compose 部署,按 Updating 文档 单独启动 Watchtower:
docker run -d --name watchtower \ --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ nickfedor/watchtower \ --label-enable \ --interval 86400各参数在文档中的含义:
--restart unless-stopped:Watchtower 容器自身异常退出或宿主机重启后自动拉起,保证 24 小时周期不被中断;-v /var/run/docker.sock:/var/run/docker.sock:挂载 Docker socket,这是 Watchtower 能管理其他容器的必要条件,意味着该容器拥有控制本机所有容器的权限,只在受信任的 Docker 宿主上运行;--label-enable:只更新带com.centurylinklabs.watchtower.enable=true标签的容器。SurfSense 的 docker-compose.yml 中backend、celery_worker、celery_beat、frontend四个服务都已打上这个标签,因此这个参数把更新范围限定在 SurfSense 服务内,不会影响宿主机上其他容器;--interval 86400:每 86400 秒(24 小时)检查并更新一次。
注意文档明确警告:使用nickfedor/watchtower镜像。原始的containrrr/watchtower已不再维护,在新版 Docker 上可能失效。
可选:一次性更新(不常驻守护)
如果你只想立即更新一次、而不留一个后台守护容器,文档提供了--run-once方式:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ nickfedor/watchtower --run-once \ --label-filter "com.docker.compose.project=surfsense"与常驻方式的区别在于:这里不用--label-enable,而是用--label-filter按 compose 项目名com.docker.compose.project=surfsense筛选要更新的容器;--rm使容器运行结束后自动删除,不常驻。
更新行为与验证方式
自动更新执行的效果等价于手动更新命令,即进入部署目录(安装脚本路径为
surfsense,手动 clone 路径为SurfSense/docker)后执行:docker compose pull && docker compose up -d数据库迁移在每次启动时自动应用;
.env中设置的 GPU 覆盖层(COMPOSE_FILE)和镜像变体(SURFSENSE_VARIANT)在更新后会被保留,不需要重新配置。迁移服务最先运行,其余服务等它成功后才启动,因此更新后执行
docker compose up -d总是安全的。用docker compose ps观察各服务从(health: starting)变为(healthy),即可确认这次更新后的栈启动完成;若更新过程中迁移失败导致栈挂起,用docker compose logs migrations查看原因(慢盘环境下可通过.env里的MIGRATION_TIMEOUT调高默认的 900 秒超时)。
停用或关闭自动更新
如果后续不再需要每日自动更新,安装脚本输出中给出的关闭命令是:
docker rm -f watchtower这会强制删除 Watchtower 容器(不影响 SurfSense 数据卷和已运行的服务),之后需要更新时改回手动命令docker compose pull && docker compose up -d。
限制说明
- 自动更新的前提是部署方式保留了 compose 文件(安装脚本的
./surfsense/目录或手动 clone 的docker/目录);文档未覆盖通过其他自定义 compose 文件部署的场景。 - 安装脚本提示更新可能在后台下载数 GB 镜像,带宽受限的环境建议评估后再启用。
- 从旧版 all-in-one 镜像迁移(PostgreSQL 14 → 17 的 dump/restore)不属于自动更新范畴,属于一次性操作,详见 Updating 文档 中 "Migrating from the All-in-One Container" 一节。
【免费下载链接】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),仅供参考