用 Vaultwarden 自建无限量密码管理器

用 Vaultwarden 自建无限量密码管理器

_

目录

  1. 为什么你需要自建密码管理器?
  2. 什么是 Vaultwarden?
  3. 准备工作
  4. Docker 部署(推荐)
  5. Nginx 反向代理 + HTTPS
  6. 初始化与配置
  7. 客户端连接
  8. 数据备份与迁移
  9. 常见问题

为什么你需要自建密码管理器?

你可能已经在用 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 — 创建管理员账户

  1. 浏览器打开 https://vw.yourdomain.com
  2. 点击「创建账户」
  3. 填写邮箱(作为登录名)和主密码

⚠️ 主密码是唯一无法找回的东西。 如果你的主密码忘了,所有密码数据都无法解密——这是安全设计的核心原则(零知识加密),服务端也帮不了你。

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 秒内完成,服务基本无中断。


技术博客 · 欢迎分享 · 如有疑问欢迎交流

Pi-hole 网络级去广告 DNS 部署手记 2026-08-09
用青龙面板做生活减法——该偷的懒,一个都别少 2026-08-09

评论区