目录
为什么你需要自建密码管理器?
你可能已经在用 Chrome 自带的密码保存功能,或者付费订阅了 1Password、LastPass。但自建密码管理器有不可替代的优势:
- 数据完全自主 —— 密码存在你自己的服务器上,不存在"平台跑路"或"被黑客一锅端"的风险
- 永久免费 —— 没有订阅费,不限设备数量,家庭共享也免费
- 功能完整 —— 自动填充、密码生成器、两步验证(TOTP)、文件附件、紧急访问等高级功能全部可用
- 生态成熟 —— 兼容所有主流平台(Windows/macOS/Linux/iOS/Android/浏览器扩展),和 Bitwarden 官方客户端无缝对接
💡 如果你还在用同一个密码注册所有网站,或者把密码存在记事本里——先不论自建不自建,先用上密码管理器就是最大的安全升级。
什么是 Vaultwarden?
通俗理解:Bitwarden 是官方版,Vaultwarden 是轻量级社区版。
| 对比维度 | Bitwarden 官方版 | Vaultwarden |
|---|---|---|
| 技术栈 | .NET / C# + SQL Server | Rust + SQLite |
| 最低内存 | ~2 GB | ~50 MB |
| 高级功能 | 付费解锁 | 全部免费 |
| Docker 镜像 | ~500 MB | ~40 MB |
| 树莓派支持 | ❌ | ✅ |
Vaultwarden 用 Rust 重写了服务端,保持了与 Bitwarden 客户端 100% 兼容的 API。这意味着你可以用官方客户端、浏览器扩展、手机 App 连接自建的 Vaultwarden 服务器,体验和官方完全一致,但只消耗不到 50 MB 内存。
准备工作
| 项目 | 最低要求 | 推荐 |
|---|---|---|
| 服务器 | 1 核 512 MB | 1 核 1 GB |
| 系统 | Linux(任何发行版) | Ubuntu 22.04 LTS |
| 软件 | Docker + Docker Compose | 同左 |
| 域名 | 建议有一个 | 有 SSL 证书的域名 |
| 存储 | 1 GB 可用 | 5 GB+ |
⚠️ HTTPS 是刚需:密码管理器传输的是极其敏感的数据,绝对不能用 HTTP 明文传输。如果你没有域名和 SSL 证书,请先搞定这两样,或者用自签名证书 + 手动信任(不推荐新手)。
Docker 部署(推荐)
这是最简单最快的部署方式,一行 docker run 就能跑起来。
方案一:docker run
docker run -d \
--name vaultwarden \
--restart unless-stopped \
-v /opt/vaultwarden:/data \
-p 8080:80 \
-e DOMAIN=https://你的域名.com \
-e SIGNUPS_ALLOWED=true \
vaultwarden/server:latest
参数说明:
| 参数 | 含义 |
|---|---|
-v /opt/vaultwarden:/data |
数据持久化目录,包含数据库和附件 |
-p 8080:80 |
将容器的 80 端口映射到主机 8080 |
-e DOMAIN=... |
你的访问域名(必须与实际一致) |
-e SIGNUPS_ALLOWED=true |
开放注册(创建完自己的账户后记得改成 false) |
方案二:Docker Compose(推荐)
创建 docker-compose.yml:
version: "3.8"
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
volumes:
- ./vw-data:/data
ports:
- "8080:80"
environment:
DOMAIN: "https://vw.yourdomain.com" # 替换为你的域名
SIGNUPS_ALLOWED: "true" # 创建账户后改为 false
LOG_FILE: "/data/vaultwarden.log"
LOG_LEVEL: "warn"
启动:
docker-compose up -d
现在 http://你的服务器IP:8080 应该能看到登录页面了——但先别急着注册,继续往下配 HTTPS。
Nginx 反向代理 + HTTPS
密码管理器没有 HTTPS 无异于裸奔。以下是 Nginx 反向代理的标准配置。
1. 安装 Nginx 和 Certbot
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
2. 配置 Nginx
创建配置文件:
sudo vi /etc/nginx/sites-available/vaultwarden
server {
listen 80;
server_name vw.yourdomain.com; # 替换为你的域名
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# WebSocket 支持(通知推送需要)
location /notifications/hub {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8080;
}
# 上传大小限制
client_max_body_size 100M;
}
启用站点:
sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
3. 签发 SSL 证书
sudo certbot --nginx -d vw.yourdomain.com
Certbot 会自动修改 Nginx 配置,添加 HTTPS 监听和自动续期。完成后访问 https://vw.yourdomain.com 即可以安全连接。
初始化与配置
Step 1 — 创建管理员账户
- 浏览器打开
https://vw.yourdomain.com - 点击「创建账户」
- 填写邮箱(作为登录名)和主密码
⚠️ 主密码是唯一无法找回的东西。 如果你的主密码忘了,所有密码数据都无法解密——这是安全设计的核心原则(零知识加密),服务端也帮不了你。
Step 2 — 关闭开放注册
部署完成后,立即关闭注册,防止路人抢占:
- 方法一(改环境变量): 将
SIGNUPS_ALLOWED改为false,然后重启容器 - 方法二(从管理面板): 进入
/admin页面,在「General settings」中取消勾选「Allow new signups」。Admin Token 从日志获取:
docker logs vaultwarden 2>&1 | grep -i "ADMIN_TOKEN"
在管理面板中禁用「Allow new signups」。
Step 3 — 开始使用
登录后,你可以:
- 添加网站登录凭据,浏览器扩展会自动提示保存
- 使用内置的密码生成器生成随机强密码
- 为支持两步验证的网站添加 TOTP 令牌(替代 Google Authenticator)
- 存储信用卡、身份证、安全笔记等敏感信息
客户端连接
Vaultwarden 兼容所有 Bitwarden 官方客户端。在客户端登录时,点击设置图标(⚙),填入你的自建服务器地址 https://vw.yourdomain.com 即可。
| 平台 | 下载方式 |
|---|---|
| 浏览器扩展 | Chrome/Edge/Firefox 商店搜索「Bitwarden」 |
| Windows/macOS/Linux | bitwarden.com/download |
| iOS | App Store 搜索「Bitwarden」 |
| Android | Google Play 或 F-Droid 搜索「Bitwarden」 |
| CLI 命令行 | npm install -g @bitwarden/cli |
💡 登录时务必先点「设置」填入你的服务器地址,再输入邮箱和主密码。
数据备份与迁移
Vaultwarden 的所有数据都在你挂载的数据目录中。以上文为例:
- docker run 方式:
/opt/vaultwarden/(挂载到了容器内/data) - docker-compose 方式:
./vw-data/(相对于docker-compose.yml所在目录)
以下备份脚本以 docker-compose 的 vw-data 为例:
# 备份脚本示例 /opt/scripts/backup-vaultwarden.sh
#!/bin/bash
BACKUP_DIR="/backup/vaultwarden"
DATE=$(date +%Y%m%d_%H%M%S)
DATA_DIR="/opt/vaultwarden/vw-data" # 根据你的实际路径修改
mkdir -p "$BACKUP_DIR"
# 先停止容器以确保数据一致性(可选,更安全)
docker stop vaultwarden
tar -czf "$BACKUP_DIR/vaultwarden-$DATE.tar.gz" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")"
docker start vaultwarden
# 保留最近 7 天的备份
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
echo "备份完成:vaultwarden-$DATE.tar.gz"
将脚本设为可执行:
chmod +x /opt/scripts/backup-vaultwarden.sh
设定 cron 定时任务,每天凌晨 3 点自动备份:
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/scripts/backup-vaultwarden.sh") | crontab -
💡 建议同时将备份文件同步到异地(比如另一台服务器、云存储),避免单点故障。
常见问题
Q: 主密码忘了怎么办?
没办法恢复。这是零知识架构的核心——连服务端都没有你的加密密钥。唯一的办法是提前设置「紧急访问」功能(指定一个受信任的好友账户,等待期后可接管你的密码库),或者从客户端导出过加密备份。
Q: 和官方 Bitwarden 有什么区别?
Vaultwarden 完全兼容 Bitwarden 的 API,所有客户端都能直接用。区别在于服务端实现:Vaultwarden 用 Rust 写,极其轻量;官方版用 .NET,资源消耗大。功能上 Vaultwarden 甚至免费开放了官方需要订阅的高级功能(如 TOTP、组织共享)。
Q: 不上 HTTPS 会怎样?
你的主密码虽然经过客户端哈希后再传输,但 HTTP 下的中间人攻击仍然可能篡改页面,窃取凭证。不要冒这个险。
Q: 服务器宕机了还能用密码吗?
Bitwarden 客户端会在本地缓存所有密码数据,离线状态下仍可查看和自动填充。服务器恢复后会自动同步。
Q: 可以全家共享吗?
可以。创建一个「组织」(Organization),邀请家人加入,共享家庭 WiFi 密码、会员账号、订阅服务等。Vaultwarden 免费支持完整组织功能。
Q: 如何升级 Vaultwarden?
docker-compose pull
docker-compose up -d
数据库会自动迁移,30 秒内完成,服务基本无中断。
技术博客 · 欢迎分享 · 如有疑问欢迎交流