系统优化

NAS 部署开源密码管理器 Vaultwarden:告别 LastPass,数据完全自托管

你是不是也经历过这样的场景:想登录某个网站,却死活想不起密码;翻遍手机备忘录,找到的却是三年前的旧密码;更糟的是,用了多年的 LastPass 突然宣布免费版只能在手机或电脑二选一使用,逼着你付费。当你的所有数字生活钥匙都攥在别人手里时,那种不安全感会随着时间越来越强烈。

其实,自托管一个密码管理器并没有想象中那么复杂。Vaultwarden(原 bitwarden_rs)是一个用 Rust 编写的 Bitwarden 服务器兼容实现,它轻量、高效,对硬件要求极低,哪怕是树莓派或 NAS 上的 Docker 都能轻松跑起来。今天,我们就来一步步在 NAS 上部署 Vaultwarden,并把你的密码数据彻底掌握在自己手中。

为什么选择 Vaultwarden 而非官方 Bitwarden

官方 Bitwarden 服务器虽然功能完整,但它是用 .NET 写的,部署需要占用大量内存(通常建议 2GB 以上),而且镜像体积庞大。Vaultwarden 则完全不同:

  • 镜像大小仅约 100MB,运行时内存占用通常不超过 100MB
  • 支持 SQLite 存储,无需额外数据库服务
  • 官方 Bitwarden 客户端(浏览器插件、手机 App)可直接使用,无需特殊设置
  • 自带 Web 管理界面,支持组织、分享、附件等功能

对于 NAS 用户来说,Vaultwarden 几乎是为群晖、威联通或自建 NAS 量身定做的选择。

第一步:在 NAS 上创建 Vaultwarden 容器

无论你使用的是群晖 DSM、威联通 QTS 还是基于 Linux 的 OpenMediaVault,只要支持 Docker,操作步骤基本一致。以下以群晖为例:

  1. 打开 Docker 套件,进入「注册表」,搜索 vaultwarden/server,选择最新版本并下载。
  2. 进入「映像」,选中刚下载的镜像,点击「启动」。
  3. 在创建容器界面,设置容器名称,例如 vaultwarden
  4. 点击「高级设置」,进行以下配置:

端口映射:将本地端口(如 8080)映射到容器端口 80。如果你打算通过 HTTPS 访问,建议映射 8080 和 3012(用于 WebSocket 通知)。

卷映射:创建一个本地文件夹(如 /volume1/docker/vaultwarden),挂载到容器内的 /data。所有密码数据库都会存储在这里,务必定期备份。

环境变量:建议设置以下变量以增强安全性:

DOMAIN=https://your-domain.com  # 你的访问域名,若用 IP 访问可留空
SIGNUPS_ALLOWED=false            # 关闭开放注册,仅允许自己创建账号
WEBSOCKET_ENABLED=true           # 启用 WebSocket,支持实时同步
ADMIN_TOKEN=your_random_token    # 管理后台访问令牌,用 openssl rand -base64 48 生成

完成设置后,启动容器。等待几秒,访问 http://NAS_IP:8080,你应该能看到 Vaultwarden 的 Web 登录页面。

第二步:初始化管理员账号与安全配置

首次访问时,点击「创建账号」按钮。由于我们设置了 SIGNUPS_ALLOWED=false,这一步可能无法直接注册。此时有两种方式:

方式一:先临时修改环境变量,将 SIGNUPS_ALLOWED 设为 true,重启容器,注册完第一个账号后再改回 false

方式二:直接通过命令行创建管理员账号。在 NAS 的 SSH 终端中执行:

docker exec -it vaultwarden /vaultwarden --create-admin-user

按照提示设置邮箱和密码,这将是你的管理员账号。

注册或创建完成后,登录 Web 界面,点击右上角头像,进入「设置」页面。建议立即完成以下操作:

  • 开启「两步登录」,推荐使用 TOTP 或 WebAuthn(硬件密钥)
  • 在「安全」选项卡中,启用「密码提示」和「修改密码后要求重新登录」
  • 确认「加密设置」使用了默认的 Argon2 算法,这是目前最安全的密码哈希方式

第三步:配置 HTTPS 反向代理与自动更新

直接通过 IP 和端口访问虽然可用,但密码管理器传输的数据极为敏感,强烈建议启用 HTTPS。有两种方案:

方案一:NAS 自带反向代理

群晖 DSM 7 及以上版本自带反向代理功能。进入「控制面板」->「登录门户」->「高级」->「反向代理」,新建一条规则:

  • 来源:HTTPS,端口 443,主机名 vault.your-domain.com,勾选「启用 HSTS」
  • 目的地:HTTP,端口 8080,主机名 localhost

申请 SSL 证书:在「安全性」->「证书」中,为你的域名申请 Let's Encrypt 证书,并自动续期。

方案二:使用 Caddy 或 Nginx Proxy Manager

如果你有更复杂的域名管理需求,可以在 NAS 上部署 Nginx Proxy Manager,它提供了图形化的 SSL 配置界面,支持自动申请证书。

配置好 HTTPS 后,记得将 Vaultwarden 的环境变量 DOMAIN 修改为 https://vault.your-domain.com,然后重启容器。

自动更新:Vaultwarden 的更新比较频繁,建议开启 Docker 的自动更新功能。群晖的 Docker 套件本身不支持,但你可以使用 watchtower 容器:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower vaultwarden

这样每次 Vaultwarden 发布新版本,watchtower 会自动拉取并重启容器。

第四步:导入密码数据与客户端使用

如果你之前使用 LastPass、Chrome 密码管理器或其他工具,Vaultwarden 支持从多种格式导入数据。

登录 Web 界面,点击右上角「工具」->「导入数据」,选择来源(如 LastPass、Chrome、Firefox、1Password 等),上传导出的 CSV 或 JSON 文件,点击导入即可。

导入完成后,在浏览器上安装 Bitwarden 扩展,登录时选择服务器地址为 https://vault.your-domain.com,输入账号密码即可。手机 App 同样操作。

有几个使用小技巧:

  • 在浏览器扩展中开启「自动填充」和「快捷键」功能,提升登录效率
  • 为不同场景创建多个「收藏夹」,如工作、个人、家庭,方便管理
  • 使用「密码生成器」创建随机强密码,Vaultwarden 支持自定义长度和字符集

数据备份与恢复

密码数据是无价的,务必做好备份。Vaultwarden 的所有数据都存储在 /data 目录下的 db.sqlite3 文件中。最简单的备份方式是定期复制该文件:

# 每天凌晨 2 点执行备份
0 2 * * * docker exec vaultwarden sqlite3 /data/db.sqlite3 ".backup '/data/backup-$(date +%Y%m%d).db'"

更稳妥的方案是使用 NAS 自带的 Hyper Backup 或 Cloud Sync,将 vaultwarden 文件夹同步到异地或云存储。恢复时,只需停止容器,用备份文件替换 db.sqlite3,重启即可。

结语

当你的所有密码都安全地存储在自己 NAS 上时,那种掌控感是任何云服务都无法替代的。Vaultwarden 不仅轻量可靠,而且完全兼容 Bitwarden 的全平台客户端,日常使用几乎没有学习成本。花上一个小时完成部署,从此告别密码泄露的焦虑,这笔投资绝对值得。

💬 评论区
发表评论

暂无评论,来说两句吧