密码管理器已经变得不可或缺——但大多数人要么为像 1Password 或 LastPass 这样的云服务支付每月订阅费用,要么更糟糕的是,在各处重复使用相同的弱密码。但还有第三种选择:自托管您自己的密码管理器,它与付费替代品一样好,完全免费,并且完全由您控制。
介绍 Vaultwarden——一个轻量级的开源服务器,兼容所有官方的 Bitwarden 客户端。它为您提供完整的 Bitwarden 体验(浏览器扩展、移动应用、桌面应用、CLI),同时将您的加密密码存储在您自己的硬件上。没有订阅,没有云依赖,没有信任问题。
在本指南中,我们将使用 Docker Compose 从头开始设置 Vaultwarden。到最后,您将拥有一个适合家庭使用的密码管理器,运行成本为零,并将您最敏感的数据保留在您应该拥有的地方——与您同在。
为什么选择 Vaultwarden?
在深入设置之前,让我们了解为什么 Vaultwarden 是自托管密码管理的首选:
| 功能 | Vaultwarden | Bitwarden 云 | 1Password |
|---|---|---|---|
| 费用 | 免费(自托管) | /bin/zsh-40/年 | -60/年 |
| 家庭计划 | 免费(无限用户) | /年(6 用户) | /年(5 用户) |
| 数据存储 | 您的服务器 | Bitwarden 云 | 1Password 云 |
| 端到端加密 | ✅ 与 Bitwarden 相同 | ✅ | ✅ |
| 浏览器扩展 | ✅ 所有浏览器 | ✅ | ✅ |
| 移动应用 | ✅ iOS 和 Android | ✅ | ✅ |
| 桌面应用 | ✅ Win/Mac/Linux | ✅ | ✅ |
| 组织/共享 | ✅ 完全支持 | ✅(高级) | ✅ |
| 双因素认证 (TOTP) | ✅ 内置 | ✅(高级) | ✅ |
| 紧急访问 | ✅ | ✅(高级) | ❌ |
| 发送(安全共享) | ✅ | ✅ | ❌ |
| 离线访问 | ✅ 本地保险库副本 | ✅ | ✅ |
关键见解:Vaultwarden 实现了与 Bitwarden 官方服务器相同的 API,因此您获得了完全相同的客户端体验——精致的应用程序、无缝的自动填充、安全共享——而无需为云托管支付费用。官方的 Bitwarden 服务器需要大量资源(多个容器、SQL 服务器),而 Vaultwarden 可以在 Raspberry Pi 上愉快地运行。
您需要什么
要求很少:
- 一台服务器——任何 Linux 机器、VPS、NAS,甚至是 Raspberry Pi。Vaultwarden 大约使用 50MB 的内存。
- Docker 和 Docker Compose——推荐的安装方法。
- 一个域名(推荐)——用于 HTTPS 访问。如果需要,您可以使用 DuckDNS 等服务提供的免费子域名。
- 大约 10 分钟——说真的,速度就是这么快。
🔒 安全第一
- ⚠️HTTPS 是生产使用的强制要求。Bitwarden 客户端需要安全上下文(HTTPS)才能正常工作。我们将讨论如何设置。
- 💡您的主密码永远不会被存储——只有一个加密哈希。即使有人盗取了您的服务器,他们也无法在没有主密码的情况下读取您的密码。
步骤 1:安装 Docker
如果尚未安装 Docker,请使用官方便利脚本进行设置:
# 安装 Docker
curl -fsSL https://get.docker.com | sh
# 将您的用户添加到 docker 组
sudo usermod -aG docker clawdbot
# 注销并重新登录,然后验证
docker --version
docker compose version
步骤 2:创建 Vaultwarden 目录
为您的密码管理器创建一个专用目录:
# 创建并进入目录
mkdir ~/vaultwarden
cd ~/vaultwarden
步骤 3:创建 Docker Compose 文件
创建一个 docker-compose.yml 文件:
# 创建 compose 文件
nano docker-compose.yml
粘贴以下配置:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.yourdomain.com"
SIGNUPS_ALLOWED: "true"
ADMIN_TOKEN: "your-secure-admin-token-here"
SMTP_HOST: "smtp.gmail.com"
SMTP_FROM: "[email protected]"
SMTP_PORT: "587"
SMTP_SECURITY: "starttls"
SMTP_USERNAME: "[email protected]"
SMTP_PASSWORD: "your-app-password"
volumes:
- ./vw-data:/data
ports:
- "127.0.0.1:8080:80"
让我们分解一下关键设置:
- DOMAIN:您的完整 URL,带有 HTTPS。这对于网络保险库正常工作是必需的。
- SIGNUPS_ALLOWED:最初设置为 "true" 以创建您的帐户,然后在设置后更改为 "false"。
- ADMIN_TOKEN:用于访问管理面板的安全令牌。使用以下命令生成一个:
openssl rand -base64 48 - SMTP_*:用于密码重置和通知的电子邮件设置。可选但推荐。
- 端口绑定:我们仅绑定到 127.0.0.1——反向代理将处理外部访问和 HTTPS。
🔑 生成安全的管理员令牌
# 生成安全令牌
openssl rand -base64 48
# 示例输出:kR9h2s8K...长随机字符串...
# 将此用作您的 ADMIN_TOKEN
请妥善保管此令牌——它提供对您 Vaultwarden 管理面板的完全访问权限。
步骤 4:使用 Caddy 设置 HTTPS(推荐)
Bitwarden 客户端需要 HTTPS。设置的最简单方法是使用 Caddy,它会自动处理 SSL 证书。
将 Caddy 添加到您的 docker-compose.yml:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.yourdomain.com"
SIGNUPS_ALLOWED: "true"
ADMIN_TOKEN: "your-secure-admin-token-here"
volumes:
- ./vw-data:/data
networks:
- vaultwarden
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
- ./caddy-config:/config
networks:
- vaultwarden
networks:
vaultwarden:
driver: bridge
创建 Caddyfile:
# 创建 Caddyfile
nano Caddyfile
添加以下配置:
vault.yourdomain.com {
reverse_proxy vaultwarden:80
}
将 vault.yourdomain.com 替换为您的实际域名。Caddy 将自动获取和续订 Let's Encrypt 证书。
步骤 5:启动 Vaultwarden
启动所有内容:
# 拉取镜像并启动
docker compose up -d
# 检查日志
docker compose logs -f
给 Caddy 一分钟时间来获取您的 SSL 证书。您应该会看到类似以下内容:
caddy | successfully obtained certificate for vault.yourdomain.com
步骤 6:创建您的帐户
在浏览器中导航到 https://vault.yourdomain.com。您将看到 Bitwarden 网络保险库界面。点击 "创建帐户" 并设置您的主密码。
🔐 主密码提示
- ✅使用 短语——4个以上随机单词比复杂密码更容易记住且更安全
- ✅示例:“correct-horse-battery-staple-piano”(但请自己想一个!)
- ⚠️此密码 无法恢复 如果丢失——您的主密钥没有“忘记密码”选项
- 💡将其写下并存放在安全的地方(物理保险箱,安全存款箱)
步骤 7:禁用公共注册
创建帐户后,禁用公共注册:
# 编辑您的 docker-compose.yml
nano docker-compose.yml
# 更改:
SIGNUPS_ALLOWED: "false"
# 重启
docker compose up -d
新用户现在只能通过管理面板邀请或由具有组织权限的现有用户创建。
步骤 8:设置 Bitwarden 客户端
这是自托管的亮点——您使用 官方的 Bitwarden 应用,只需指向您的服务器。
浏览器扩展
为您的浏览器安装 Bitwarden 扩展(Chrome,Firefox,Safari)。
- 点击扩展图标并选择 "自托管"
- 输入您的服务器 URL:
https://vault.yourdomain.com - 使用您的帐户登录
移动应用
从 App Store 或 Google Play 安装 Bitwarden。
- 点击区域选择器(默认显示“bitwarden.com”)
- 选择 "自托管"
- 输入您的服务器 URL 并登录
启用生物识别解锁(面部识别,指纹)以便快速访问,而无需每次输入主密码。
桌面应用
从 bitwarden.com/download 下载——适用于 Windows、macOS 和 Linux。相同的设置:设置 → 自托管 → 输入您的 URL。
设置家庭共享
Vaultwarden 最好的功能之一是 无限组织——非常适合与家庭成员共享密码。
创建家庭组织
- 登录到您的网络保险库
- 点击 "新组织"
- 命名(例如,“家庭密码”)
- 选择“免费”计划(所有功能均可用)
邀请家庭成员
- 转到您的组织 → 成员
- 点击 "邀请用户"
- 输入他们的电子邮件地址
- 选择他们的角色(成员、管理员或所有者)
如果禁用了注册,请使用管理面板(https://vault.yourdomain.com/admin)直接创建帐户。
创建共享集合
集合就像可以与特定成员共享的文件夹:
- 流媒体服务——Netflix、Disney+ 等(与所有人共享)
- WiFi 密码——家庭网络、亲戚的房子
- 共享订阅——所有人使用的家庭帐户
- 紧急信息——银行账户、保险(限制给可信成员)
基本安全加固
您的密码保险库是一个高价值目标。以下是如何锁定它:
启用双因素认证
登录到您的网络保险库 → 帐户设置 → 双重登录。选项包括:
- 身份验证器应用(Google Authenticator、Authy 等)——推荐
- YubiKey——用于最大安全性的硬件密钥
- 电子邮件——向您的电子邮件发送代码(需要 SMTP 设置)
设置 Fail2Ban
通过在失败的登录尝试后禁止 IP 来保护自己免受暴力攻击。创建 /etc/fail2ban/filter.d/vaultwarden.conf:
[Definition]
failregex = ^.*用户名或密码不正确。请再试。IP: <ADDR>。用户名:.*$
ignoreregex =
和 /etc/fail2ban/jail.d/vaultwarden.local:
[vaultwarden]
enabled = true
port = 80,443
filter = vaultwarden
logpath = /path/to/vw-data/vaultwarden.log
maxretry = 5
bantime = 1h
findtime = 15m
定期备份
您的保险库数据位于 ./vw-data 目录中。定期备份:
# 简单备份脚本
#!/bin/bash
BACKUP_DIR="/backup/vaultwarden"
DATE=20260210
# 停止容器以确保一致性
docker compose -f ~/vaultwarden/docker-compose.yml stop
# 创建加密备份
tar -czf - ~/vaultwarden/vw-data | gpg --symmetric --cipher-algo AES256 > "/vaultwarden-.tar.gz.gpg"
# 重启
docker compose -f ~/vaultwarden/docker-compose.yml up -d
将备份存放在异地——不同的服务器、带有客户端加密的云存储,甚至是安全中的 USB 驱动器。
高级功能
Bitwarden 发送
发送让您可以安全地与任何人共享文本或文件——即使是没有 Bitwarden 帐户的人。非常适合与客人共享 WiFi 密码或发送敏感文件。
- 在任何 Bitwarden 客户端中,转到 发送
- 创建一个新的发送(文本或文件)
- 设置过期时间、最大访问次数和可选密码
- 共享生成的链接
紧急访问
指定可信联系人,如果发生意外,他们可以请求访问您的保险库:
- 转到设置 → 紧急访问
- 添加可信联系人(他们需要 Vaultwarden 帐户)
- 设置等待期(例如,7 天)
- 如果他们请求访问而您在等待期内没有拒绝,他们将获得对您保险库的只读访问权限
管理面板
使用您的 ADMIN_TOKEN 访问管理面板,地址为 https://vault.yourdomain.com/admin。在这里您可以:
- 查看所有用户和组织
- 邀请新用户或删除帐户
- 查看服务器配置和诊断信息
- 执行数据库维护
导入现有密码
从其他密码管理器迁移?Bitwarden 几乎可以从所有地方导入:
从 Chrome/Firefox
- 从您的浏览器导出密码(通常为 CSV 格式)
- 在 Bitwarden 网络保险库中:工具 → 导入数据
- 选择您的浏览器作为源格式
- 上传文件
从 1Password、LastPass、Dashlane 等
- 从您当前的管理器导出(查看他们的文档以获取导出选项)
- 在 Bitwarden 中:工具 → 导入数据
- 从下拉菜单中选择源应用程序
- 上传您的导出文件
导入后:安全删除导出文件——它以明文形式包含您所有的密码!
保持 Vaultwarden 更新
更新带来安全修复和新功能。定期更新:
# 导航到您的 Vaultwarden 目录
cd ~/vaultwarden
# 拉取最新镜像
docker compose pull
# 使用新版本重启
docker compose up -d
# 清理旧镜像
docker image prune -f
在进行重大更新之前,请查看 Vaultwarden 发布页面 以获取更新日志和重大更改。
故障排除
无法访问网络保险库
- 检查您的
DOMAIN环境变量是否与您的实际 URL 完全匹配 - 验证 SSL 证书:
curl -I https://vault.yourdomain.com - 检查 Caddy 日志:
docker compose logs caddy
电子邮件通知无法正常工作
- 如果使用 Gmail,您需要一个 应用密码(不是您的常规密码)
- 检查管理面板中的 SMTP 设置 → 诊断
- 尝试从管理面板发送测试电子邮件
移动应用无法连接
- 确保您使用的是 HTTPS(而不是 HTTP)
- 检查 SSL 证书是否有效(不是自签名的,除非您已在设备上安装)
- 首先尝试在手机浏览器中访问网络保险库 URL
常见问题
Vaultwarden 和 Bitwarden 一样安全吗?
是的。Vaultwarden 实现了相同的加密方案(AES-256-CBC 和 PBKDF2-SHA256 或 Argon2id)。在任何数据接触服务器之前,您的保险库都在本地使用您的主密码加密。即使有人攻破了您的服务器,他们也无法在没有主密码的情况下读取您的密码。
如果我的服务器宕机会发生什么?
Bitwarden 客户端会在本地缓存您的保险库。您仍然可以离线访问和自动填充密码。您只需等到服务器恢复在线后才能同步新更改。
我可以在多个设备上使用这个吗?
当然可以。您可以在任意数量的设备上登录——手机、平板电脑、计算机、浏览器。更改会自动同步。
密码或用户数量有限制吗?
没有人为限制。存储任意数量的密码,创建任意数量的用户帐户和组织。唯一的限制是您服务器的存储空间。
我可以稍后迁移回 Bitwarden 云吗?
可以。将您的保险库从 Vaultwarden 导出(工具 → 导出保险库),然后导入到 Bitwarden 云帐户中。您的数据是可移植的。
接下来是什么?
您现在在自己的基础设施上运行着一个专业级的密码管理器。以下是如何充分利用它:
- 从浏览器和其他管理器导入所有密码
- 在每个设备上安装浏览器扩展——自动填充是一个游戏规则改变者
- 设置家庭共享以便共享订阅和帐户
- 在所有地方启用 2FA——Vaultwarden 也可以存储您的 TOTP 代码
- 在 Hostly 的目录 中探索更多自托管应用——也许下一个是 照片备份解决方案?
密码安全不再是可选的——它是必需的。通过 Vaultwarden,您获得了两全其美的体验:商业密码管理器的精致体验,以及自托管的隐私和控制。您的密码仍然是您的,存储在您的硬件上,仅通过您的主密码访问。
没有每月费用。没有数据挖掘。无需信任。只为您和您的家人提供安全、私密的密码管理。