2026 自建密码管理器(Vaultwarden):小内存也能搞定隐私
2026-08-15 · DevCraft Studio
不想把密码交给商业服务?Vaultwarden 用 Rust 重写 Bitwarden 服务器,512M 内存就能跑、与官方客户端完全兼容、免费解锁高级功能。本文讲清资源需求、HTTPS 反向代理、客户端连接、安全与备份,并用 RackNerd、CloudCone、Contabo 三家算一笔 1G 机型的成本账。
延伸阅读
更多相关攻略推荐:2026 独立站 PCI-DSS 自查清单:SAQ A 还是 A-E、2026 只选月付 VPS:不锁年付、随时退的试错策略、2026 海外仓/ERP 系统自建部署:独立服务器还是云 VPS?、2026 实测:VPS 上自托管 AI 编程助手——Continue、【知识库自托管 02】2026 实测:VPS 自托管 Anythin。
一、引子:为什么不让密码躺在商业服务里
密码是你数字生活的万能钥匙。可大多数人把钥匙串交给了某个商业密码服务:订阅按月扣费,高级功能(TOTP 验证码、文件附件、紧急访问)还要单独买会员;哪天服务涨价、停服、或被合规要求交出数据,你的全部登录凭证就捏在别人手里。
更现实的是,商业服务是「数据集中营」——一旦被拖库,受影响的是千万人。自建不等于更神,但它把控制权还给你:库文件在你自己的服务器上,且客户端端到端加密,连服务器都看不到明文密码。你只需要一台最便宜的小机器,就能跑起一个体验接近官方、却完全私有的密码库。
本文主角 Vaultwarden,就是这种「小内存也能搞定隐私」的代表方案。它不重新发明加密,而是兼容 Bitwarden 的协议,所以你能继续用官方客户端,只是后端换成了自己掌控的轻量服务。
二、Vaultwarden 是什么:Rust 重写的 Bitwarden 兼容服务器
Bitwarden 是开源的密码管理器,官方提供云端版,也允许自托管。但官方自托管服务器是 .NET + MSSQL 的大块头,至少要几 GB 内存才跑得动。Vaultwarden(原名 bitwarden_rs)是社区用 Rust 重写的服务器实现,目标是「实现同样的 Bitwarden API,但只占一小块资源」。
关键点在于「兼容」二字:它说 Bitwarden 的协议,所以所有官方客户端——浏览器扩展、桌面端、iOS/Android App、命令行 CLI——都不用改,只要把服务器地址指向你的域名,体验完全一致。你等于用一套轻量后端,享受官方前端的全部生态。
它默认用单个 SQLite 文件存数据,一个 Docker 容器就能跑起来,镜像只有几十 MB。对只想「私有化密码库」的个人或小团队而言,这就是最省心的形态:不开一堆容器,不养数据库,备份只需拷一个目录。
三、为什么比官方 Bitwarden 自托管省得多:资源对比
把两者摆在一起,差距是数量级的。下面这张表来自多篇 2026 年测评与官方 wiki 的共识数据(具体数值以商家/项目页面为准)。
| 维度 | Vaultwarden | 官方 Bitwarden 自托管 |
|---|---|---|
| 实现语言 | Rust | C# / .NET |
| 容器数量 | 1 个 | 10 个以上 |
| 空闲内存 | 约 50MB | 约 2GB |
| 最低内存 | 512MB | 4GB |
| 数据库 | SQLite(默认) | MSSQL(必需) |
| 镜像大小 | 约 20–50MB | 约 1.5–3GB |
| 高级功能 | 全部免费 | 多为付费 tier |
| 客户端 | 全兼容 | 全兼容 |
一句话:官方自托管是给企业级、需要 SSO/SCIM/目录同步的场景准备的,对普通用户是杀鸡用牛刀。Vaultwarden 把内存从 GB 级压到几十 MB,约轻 40 倍(据 selfhostingsh 对比),启动只要 2–3 秒。更重要的是,它把官方的付费高级功能(TOTP 验证码存储、文件附件、Bitwarden Send、紧急访问、组织共享)全部免费解锁——这些在官方 Bitwarden 往往是 Premium 10 美元/年或团队版才给。
四、资源需求拆解:512M 能跑、1G 舒适
Vaultwarden 的真实胃口很小,但部署时要把「容器 + 操作系统 + Docker」一起算。
内存
实测空闲约 30–100MB 内存。项目方与多篇测评一致认为:1 vCPU + 512MB 是能跑的最低线,但 2026 年更推荐 1GB,目的是给 Ubuntu 系统和 Docker 留余量,避免系统更新或数据库写操作时触发 OOM Killer 把容器杀掉。家庭 2–10 人、小团队 10–100 人,1–2GB 都绰绰有余。
CPU 与磁盘
密码库是典型「读多写少、单次数据极小」的负载,对 CPU 几乎无要求,1 个 vCPU 足够。磁盘方面,纯密码库本体很小,个人/家庭 1–2GB 起;附件(如存的文档、密钥文件)多了再到 5–20GB。Vaultwarden 默认 SQLite,单文件、备份极简;只有当你有数百用户、或已经在外面跑 PostgreSQL 想统一灾备时,才需要换数据库。
网络
同步流量极小,几 KB 到几十 KB 一次。它对带宽和延迟都不敏感,普通 BGP 线路就够,不需要为低延迟特意加钱。真正重要的是「可用性」——别让机器宕机,备份好,比追求毫秒级延迟实在。
五、HTTPS 是硬要求:反向代理与自动签发
这是新手最容易卡的一步,也是绕不过的硬约束。Bitwarden 的网页库和浏览器扩展用的是 WebCrypto 加密接口,浏览器只在「安全上下文」下才允许它运行——换句话说,纯 HTTP 访问会直接登录失败。所以 Vaultwarden 必须放在 HTTPS 后面,绝不能把容器端口直接裸暴露到公网。
正确姿势是用反向代理收口:容器只绑 127.0.0.1:8080(仅本机可访问),外部流量经 Caddy 或 Nginx 走 443 进来。Caddy 是最省心的选择,一段 Caddyfile 就能自动向 Let's Encrypt 申请并续期证书,连 certbot、cron 都不用管。
如果用 Nginx,记得开 WebSocket 反代块(/notifications/hub),否则实时同步会失效;1.29 之后 WebSocket 走主端口 80,配置更简单。无论哪种,防火墙只开 80/443 和必要的 SSH,别把 8080 开放出去。
六、实战:用 Docker Compose 部署 Vaultwarden
部署本身就是一个容器。下面是一份生产可用的 docker-compose,要点都在注释逻辑里。
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=false
- ADMIN_TOKEN=your-long-random-token
- WEBSOCKET_ENABLED=true
volumes:
- ./vw-data:/data
ports:
- "127.0.0.1:8080:80"
几个环境变量要讲清楚:DOMAIN 必须带 https://,否则 WebSocket 通知和邮件链接会错;SIGNUPS_ALLOWED 先留 true 建完账号再改 false(也可一开始就 false,用管理面板邀请);ADMIN_TOKEN 保护 /admin 面板,建议用 openssl rand -base64 48 生成一段足够长的随机串;WEBSOCKET_ENABLED 开实时同步。
生成强令牌就这么一行:
openssl rand -base64 48
Caddy 反代配置极简,自动 HTTPS:
vault.yourdomain.com {
reverse_proxy 127.0.0.1:8080
}
若用 Nginx,下面这段含 WebSocket 支持:
server {
listen 443 ssl http2;
server_name vault.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/vault.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vault.yourdomain.com/privkey.pem;
client_max_body_size 525M;
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-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
七、连接官方客户端:扩展、手机、桌面、CLI 怎么指向自建
部署完、域名 HTTPS 通了,接下来把所有设备上的 Bitwarden 客户端指向你的服务器。过程在每个客户端里几乎一样:找到设置里的「自托管环境 / Self-hosted environment」,填入 https://vault.yourdomain.com,保存后再登录。
浏览器扩展(Chrome/Firefox/Safari/Edge):点齿轮图标,填服务器地址,登录。手机 App(iOS/Android):登录界面点齿轮,同样填地址。桌面端从官网下载,首次登录前先设服务器 URL。命令行 CLI 则是:
npm install -g @bitwarden/cli
bw config server https://vault.yourdomain.com
bw login
CLI 很适合写脚本:批量生成密码、导出库、程序化管理条目。所有客户端共用同一套加密和同步逻辑,数据走你的服务器,体验与官方云几乎无差,只是密码库物理上属于你了。
八、安全三件套:强令牌、关注册、全员 2FA
自建密码管理器,安全姿态全在自己肩上。有三件事必须在上线头一天做完。
第一,强 ADMIN_TOKEN。/admin 面板是「上膛的枪」:弱令牌等于库全裸。用 openssl 生成随机串;1.28 之后还支持 argon2 哈希令牌(更抗暴力),或干脆不设令牌把面板关掉,需要时才临时开。千万不要用弱口令或把令牌写进会提交的代码里。
第二,关注册。Vaultwarden 默认允许任何知道地址的人注册,而你的 DNS 一生效,几小时内就会被互联网扫描器发现。正确做法是:建完你自己的账号后,立刻把 SIGNUPS_ALLOWED 改成 false,之后用管理面板发邮件邀请家人或同事加入。宁可麻烦点,也别让陌生人在你库里开账号。
第三,全员开 2FA。Vaultwarden 支持 TOTP 验证器、WebAuthn/FIDO2 硬件密钥(如 YubiKey)、邮件码,且全部免费。给每个账号都开启至少 TOTP——没有 2FA 的主密码一旦泄露, attacker 直接拿到整个库。把恢复码打印出来,别存在库里本身。
九、备份与迁移:不裸拷、离机、试恢复
密码库是你数字生活的单点故障,备份是「大家都会跳、但常后悔没做」的一步。必备份三样东西:db.sqlite3(主数据库)、attachments/(附件)、rsa_key*(RSA 密钥——缺了它,恢复后所有会话和 2FA 会失效)。
千万注意:不要直接 cp 一个正在被写入的 SQLite 文件,那可能得到损坏的备份。要用 sqlite3 的 .backup 命令,它能在库运行时安全快照。下面是一份每日备份脚本骨架:
#!/bin/bash
BACKUP_DIR="/home/user/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
SOURCE_DIR="/home/user/vaultwarden/vw-data"
sqlite3 $SOURCE_DIR/db.sqlite3 ".backup '$BACKUP_DIR/db_$TIMESTAMP.sqlite3'"
tar -czf $BACKUP_DIR/attachments_$TIMESTAMP.tar.gz $SOURCE_DIR/attachments
find $BACKUP_DIR -type f -mtime +30 -delete
备份要「离机」才叫备份:用 restic 或 borg 把文件推到另一台机器、或 S3 兼容存储,并加密。同盘备份只是复制,不防误删、不防整机故障。最后,每季度真正从备份拉起一个临时容器、登录看看条目在不在——没试过的备份只是希望,不是方案。
从商业 Bitwarden 迁移也很简单:在官方导出 JSON,到 Vaultwarden 网页库或任意客户端导入,数据格式一致,因为底层是同一套 Bitwarden API。
十、商家横向对比:1G 机型的成本账
密码库负载轻,我们要的是「便宜、稳定、能跑 1G」的小机器。把三家相关商家摆一起算笔账(价格以商家页面为准,以下为常见档位):
| 商家 | 典型 1G 档价 | 到大陆线路 | 支付 | 适合场景 |
|---|---|---|---|---|
| RackNerd | 约 $10–12/年起(1核/1G/15G SSD/2TB) | 普通 BGP | 支付宝 | 预算敏感、练手 |
| CloudCone | $14.24/年起(1核/1G/55G HDD/4T) | 普通 BGP(洛杉矶) | 支付宝 | 按小时计费、删机退余额 |
| Contabo | $4.99/月起(4核/8G/50G NVMe/32TB,对库过剩) | 普通 BGP | 信用卡/PayPal | 同机兼跑别的服务 |
结论很清楚:一台年付 $10–15 的 1G 机型(RackNerd 或 CloudCone)就完全够用,比官方 Bitwarden 自托管省下 2–4GB 内存和一堆容器运维。Contabo 的入门档内存是对密码库严重过剩的 8GB,但它量大管饱、适合「一台机器既跑密码库又兼跑别的服务」的玩家。三家的普通 BGP 对密码库这种小流量场景完全够用,无需为低延迟溢价。
十一、面向大陆用户:线路、支付、退款与权衡
对大陆自建党,密码库有几个只有我们会纠结的点,但好消息是它们都不难。
线路不敏感:同步流量以 KB 计,对延迟和带宽几乎无要求。普通 BGP 就行,不必为了 CN2 GIA 之类低延迟线路多花钱。比起「快」,更该关心「稳」——选个你信得过的商家、做好备份,比追求毫秒级延迟实在。
支付:RackNerd 和 CloudCone 支持支付宝,对没有信用卡的用户很友好;Contabo 以信用卡/PayPal 为主。
退款与计费:CloudCone 按小时计费、删机退余额,最适合试错——装好发现不顺手就删,余额退回;RackNerd 部分套餐同价续费;下单前看清退款与设置费条款,避免被年付绑定。
成本账:一台 1G 机型年付 $10–15,平摊每月不到 10 元,比商业密码管理器的多人订阅便宜,且数据 100% 自有。这才是「小内存也能搞定隐私」的真正含义——隐私不贵。
备份离机:同盘不算备份。可以用 rclone/restic 把备份推到另一台机或对象存储,但注意远程存储的出站流量与费用,别让备份反噬账单。
十二、风险提示与结语
收尾把必须警告的坑列一遍:
- HTTPS 非可选:纯 HTTP 客户端直接拒登;容器只绑本机 127.0.0.1:8080,必须反代,别裸暴露。
- 注册默认开放:DNS 生效几小时内被扫;建完账号立刻 SIGNUPS_ALLOWED=false,用邀请加人。
- admin 面板是风险点:弱令牌等于库全裸;用 argon2 哈希令牌,或干脆关闭面板。
- 备份裸拷会坏:必须用 sqlite3 .backup,且要离机、每季度试恢复。
- RSA 密钥别漏:恢复时缺 rsa_key*,所有会话和 2FA 会失效。
- SMTP 端口常被封:25/587 不通时试 2525/8025,否则收不到邀请和 2FA 邮件。
- 非官方项目:Vaultwarden 与 Bitwarden 公司无隶属,API 变动时需维护者跟进;企业级 SSO/SCIM/目录同步不支持。
- 合规:端到端 AES-256 加密,主机看不到明文;但安全姿态(HTTPS、防火墙、及时更新)全靠你自己。
回到开头:自建密码库的价值,是把万能钥匙拿回自己手里。对预算敏感的大陆用户,一台年付 $10–15 的 1G 小机器(RackNerd 或 CloudCone)配 Vaultwarden,就能跑起一个体验接近官方、却完全私有的密码库——512M 能跑、1G 舒适、客户端全兼容、高级功能全免费。按「反代管访问、关注册、全员 2FA、离机备份并试恢复」四步走,它能在你那台白菜机上安静跑很多年。动手前到各商家官网核对最新配置与价格即可。