在最近的一次对开源项目vaultwarden的升级过程中,我遇到了一些挑战和问题。本文将详细记录这些挑战以及如何解决它们,为其他用户在使用vaultwarden时提供参考。

引言

众所周知,开源项目vaultwarden近期更新了1.3.5版本,增加了sso登录支持,并且更令人兴奋的是,changelog中提到了对2026.1.0及以上版本移动端的支持(目前是2025.12)。尽管这些新特性不一定立即用得上,但为了防止未来移动端app不兼容,我决定先另起一个服务并行使用。

坑1:数据库迁移

由于我使用了1panel自动定时备份数据库,因此进入mysql终端,新建一个数据库,使用source /path/to/database.sql导入备份的数据库,一切看起来都很顺利。然而,当我使用docker compose新建一个容器并启动时,发现它不断重启。查看日志后,我发现是user表和sso_users表关联错误,进数据库一看,竟然根本没有sso_users这个表!

为了解决这个问题,我找到了github仓库里的建表语句,手动执行后,再次运行容器,却又提示sso_users已经存在。无奈之下,我将表drop掉,再次运行,问题终于得到了解决。

坑2:反向代理docker容器

由于两个服务只有镜像版本和数据库(及域名)不一样,我基本上照抄了一份docker compose文件。然而,新版本服务起来后,原来的服务无法正常登录,提示认证错误。分别查看两个容器的日志,发现都有访问日志,让我百思不得其解。

其中一个服务的配置如下:点击查看详细配置,另一个服务的配置如下:点击查看详细配置。Nginx反向代理的配置大致如下:

vault1.app.example.com => http://vault_251230:80
vault2.app.example.com => http://vaultwarden:80

由于两边都有日志,基本可以确定是会话JWT串了。问了Grok得知,Nginx优先使用service_name解析DNS,但也可以用container_name解析。无奈之下,我只能删掉重建了。

结论

经过两小时的折腾,我最终解决了这些问题。虽然过程有些曲折,但学到了不少知识。问题:同一个MySQL实例的两个数据库有什么安全的方式自动同步吗?

以上就是我在使用vaultwarden过程中遇到的问题和解决方法。希望对其他用户有所帮助。

标签: none

评论已关闭