开源推荐
morning
基于 Vaultwarden 和 Keyguard 的自托管密码管理实践
摘要
注:题图使用 Gemini 生成。 几年来我一直在市面上的主流密码管理方案间游走,上一个让我暂时安顿下来的是 Enpass。倒不是它体验有多出色,纯粹是因为「家人们」订阅了 Google Play Pass 能直接解锁高级版。直到前段时间订阅涨价,我们一致决定不再续费。我需要给手里这三四百个密码再次搬个家。 此时环顾一圈各家产品,可选项依然各有各的堵心:1Password 虽好,错过拼车好价就只能...
Docker
Vaultwarden
NAS
Compose
data
Bitwarden
TOTP
bridge
localhost
HTTPS
2026-10-07
1 阅读
约10分钟阅读
大大大K
字号:
注:题图使用 Gemini 生成。 几年来我一直在市面上的主流密码管理方案间游走,上一个让我暂时安顿下来的是 Enpass。倒不是它体验有多出色,纯粹是因为「家人们」订阅了 Google Play Pass 能直接解锁高级版。直到前段时间订阅涨价,我们一致决定不再续费。我需要给手里这三四百个密码再次搬个家。 此时环顾一圈各家产品,可选项依然各有各的堵心:1Password 虽好,错过拼车好价就只能支付高昂的订阅费用;LastPass 安全丑闻频出,让人多少有些望而却步;KeePass 硬核且开放,但跨平台体验碎片化严重——最终选择回到 Bitwarden 算不上是最优解,但使用 TOTP 无需多装一个 2FA 应用这事儿也得额外付费,并且一直以来它们的客户端体验在上述产品中也并不算拔尖。 但 Bitwarden 另有所长——碰巧家里有一台 24 小时开机的 NAS,自托管一个 Vaultwarden 自然而然提上了日程。 为什么是 Vaultwarden Vaultwarden 是一个由社区维护的非官方开源 Bitwarden 后端服务。与官方那套基于 .NET 和笨重数据库的自托管后端相比,Vaultwarden 镜像极其轻巧,常驻内存通常不过百兆;不仅核心功能完备,还能直接从后端解锁 TOTP 管理、多人共享等高级功能,非常适合个人和小微团队自建使用。 NAS 部署的首选方式 Vaultwarden 的部署方式多种多样,对于 NAS 来说,Docker 无疑是第一选择。一方面 Vaultwarden 的 Docker 镜像小巧、部署简单,无论你是否有相关经验都很容易上手;另一方面是在做好目录映射后,可以使用 NAS 本身的文件同步或备份功能保障数据安全。 Vaultwarden 的 Docker 部署过程不需要折腾太多参数,社区提供的 Docker Compose 模板 也简单明了。如果你和我一样使用零售的成品 NAS(如极空间、绿联等),我们甚至都不需要去看 Compose 文件,直接在系统的图形化 Docker 部署界面就能搞定。 以下是几个我认为在部署时需要注意的几个参数: 镜像拉取:使用 vaultwarden/server 的 latest 标签,更新容器时只需重新拉取镜像,在做好第 2 点的前提下,不会影响已经保存的密码数据。 目录映射:为了持久化保存密码库,我们需要将容器内部的 /data 目录映射到 NAS 中的实体文件夹,以后需要手动备份或迁移到其他设备上时,直接复制该文件夹即可。 对于 Docker Compose 部署,我们在模板中找到 volumes 字段下包含 :/data 的值,将冒号前面的路径替换为你在 NAS 上提前建好的真实文件夹路径(如 /mnt/nvme16/bigk/Docker/vw/data:/data )。 端口映射:容器内默认使用 80 端口,直接使用宿主机网络极易产生端口冲突,因此需要修改环境变量中的 ROCKET_PORT ,或推荐使用 bridge 网络并将 80 端口映射为 NAS 主机上的其他端口。 对于 Docker Compose 部署,我们需要确保 network_mode 为 "bridge" (或干脆不配置该字段),并在 ports 字段下找到包含 :80 的值,将冒号前的端口号改为你想使用的 NAS 主机端口号(如 8808:80 )。 访问和连接:Vaultwarden 要求可信的网络连接,在非 localhost 环境下需要配置 HTTPS,因此需要提前做好准备,包括签好证书、配置反代或者找一个靠谱的内网穿透工具。 无论是图形化配置还是 Docker Compose,都强烈建议在环境变量( environment 字段)中配置 DOMAIN 的值为你要从公网连接进来的域名。 图形化部署的情况下,修改环境变量后可能需要重新创建容器;使用 Docker Compose 部署时,建议将环境变量写进 .env 文件中并由 Docker Compose 文件引用,后续维护和配置权限会更加方便。 Docker 部署完成后,我们可以使用浏览器输入 IP 地址和端口号访问 Vaultwarden。当浏览器显示 Vaultwarden 页面时,说明部署成功。但这并不代表我们已经可以使用它。 HTTPS 与互联网访问 正如前面所提到的,除非直接在 NAS 本地的 localhost 网络环境访问,否则直接用局域网 IP 打开,Vaultwarden 只会弹出拒绝访问的警告页面。 这是因为现代浏览器中有一道「 安全上下文 」的强制策略,密码管理器网页端所依赖的 Web Crypto API 加密接口只有在可信网络中才能被调用,而家庭内网常见的 HTTP 连接会被判定为不可信网络,Vaultwarden 发现无法调用该接口就会直接给出警告提示。 同理,如果我们需要随时随地都能访问到 Vaultwarden 的数据库(例如在公司电脑浏览器中使用 Bitwarden 自动填充插件),也必须通过可信的 HTTPS 连接。 Vaultwarden 内置了 HTTPS 功能,不过官方 Wiki 中已经明确表示这种方式不成熟,仍然建议大家使用反向代理来处理 HTTPS 请求,并通过 Let's Encrypt 或 Cloudflare 获取 SSL/TLS 证书。然而反向代理对网络环境有着严格要求,国内运营商的家庭宽带基本都是大内网,好一点的 NAT 1 可以借助 STUN 服务 「打个洞」获得相对稳定的公网访问体验,而其他 NAT 类型多少都需要折腾一番。 不过你既然能看到这里,相信你已经非常了解反向代理的原理和各类工具的使用了,本文不再赘述。 如果你家和我一样是低等级 NAT,或者单纯只是想省事不折腾,那么我强烈推荐使用「赛博菩萨」Cloudflare 的 Tunnel 隧道功能。它能够将内网服务安全地映射出去,不仅能顺手解决 SSL/TLS 证书的麻烦,还能获得免费的 DDoS 防护、访问控制等网络安全能力。配置 Cloudflare Tunnel 也是易如反掌: 登录 Cloudflare 进入控制台,在左侧导航栏中进入「Zero Trust」,在新页面的导航栏中展开「网络」,进入「连接器」功能; 在打开的「隧道与网状网络」页面,点击「创建隧道」,选择「cloudflared」后根据指引继续操作; 来到安装 cloudflared 客户端的指引界面,根据所用系统选择安装 cloudflared 客户端(如需在 NAS 上安装依然推荐 Docker 方式); 从这一步开始,我们需要根据自身的实际情况进行操作: 如果你有自己的域名且已经托管到了 Cloudflare 中,那就直接运行页面中的命令建立连接,然后前往「已发布应用程序路由」页面中添加二级域名映射; 其他情况则需要使用 cloudflared tunnel --url http://[IP]:[Port] 命令,将内网中的 Vaultwarden 访问地址映射至一个 https://*.trycloudflare.com 形式的临时域名中。 尝试通过域名访问 Vaultwarden
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱