适用场景:希望密码库数据完全不出自己掌控的服务器(家庭 NAS、VPS、内网机器)。
核心结论:个人/家庭首选 Vaultwarden(轻量、免费、官方客户端通用);想要“原厂”则选官方 Bitwarden(标准脚本 或 Lite 单镜像)。
一、两种方案怎么选
| 维度 | Vaultwarden(社区) | 官方 Bitwarden 标准部署 | 官方 Bitwarden Lite |
|---|---|---|---|
| 是什么 | Rust 重写的服务端,兼容 Bitwarden 协议 | 官方全套容器(C# + MSSQL) | 官方单镜像(2025-12 退出 beta 改名) |
| 资源占用 | 极低,< 200 MB 内存 | 高(含 MSSQL,建议 2 GB+) | 低,≥ 200 MB 内存 |
| 付费功能 | 全部免费(组织、TOTP、Send) | 部分需订阅解锁 | 部分需订阅解锁 |
| 数据库 | 内置 SQLite(也支持 PG/MySQL) | 强制 MSSQL | 自选 SQLite/PG/MySQL/MSSQL |
| 安装复杂度 | 一个 docker-compose | 官方脚本交互安装 | 单镜像 + settings.env |
| 获取方式 | 镜像 vaultwarden/server |
脚本 bitwarden.sh |
镜像 ghcr.io/bitwarden/lite |
| 适合 | 个人、家庭、极客 | 企业、需要官方支持 | 个人/家庭实验室、ARM 设备 |
强烈建议从 Vaultwarden 开始——它用官方 Bitwarden 的浏览器扩展、桌面端、手机 App 直连,体验与官方云完全一致,但更省资源、功能全免费。
二、推荐:Vaultwarden 部署(约 15 分钟)
前置条件
- 一台能跑 Docker 的机器(VPS、家庭服务器、NAS 均可),建议 ≥ 1 GB 内存
- 一个域名(便宜的就行),因为 Bitwarden 客户端强制要求 HTTPS,纯 IP + HTTP 无法登录
- 已安装 Docker 与 Docker Compose(
curl -fsSL https://get.docker.com | sh)
1. 域名解析
在域名 DNS 里加一条 A 记录,把子域指向服务器公网 IP:
vault.yourdomain.com → 你的服务器IP
DNS 生效通常几分钟。
2. 创建项目与 docker-compose.yml
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
docker-compose.yml(Caddy 负责自动签发 Let’s Encrypt 证书):
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=true # 先开,注册完账号后改 false
- ADMIN_TOKEN=换成一段长随机字符串
volumes:
- ./vw-data:/data
caddy:
image: caddy:2
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- vaultwarden
volumes:
caddy_data:
同目录 Caddyfile:
vault.yourdomain.com {
reverse_proxy vaultwarden:80
}
替换示例里的
vault.yourdomain.com为你的真实子域。ADMIN_TOKEN也可用 Argon2 hash;先用明文一段长随机串即可,启动后日志会提示用法。
3. 启动
docker compose up -d
Caddy 会自动向 Let’s Encrypt 申请证书,约一分钟内 https://vault.yourdomain.com 即可访问。
4. 注册与客户端接入
- 浏览器打开
https://vault.yourdomain.com,创建账号并登录。 - 在任意官方 Bitwarden 客户端(浏览器扩展 / 桌面端 / 手机 App)登录界面:
- 找到 Server URL / 区域设置(Self-hosted)
- 填入
https://vault.yourdomain.com - 注册账号并登录。行为与官方云无异。
- 已有密码库:先在旧端导出,再在自建端导入。
5. 加固(必做)
注册完第一个账号后:
- 把
SIGNUPS_ALLOWED改为false并docker compose up -d,防止陌生人注册。 ADMIN_TOKEN已设,保护/admin管理页。- 建议在管理页开启 Argon2 作为密钥派生算法(抗 GPU 暴力破解)。
6. 备份(必做,绝不省略)
整个加密库都在 ./vw-data 目录。没有厂商替你留副本:
tar czf vw-backup-$(date +%F).tar.gz vw-data
把备份存到异机/云盘,并定期测试恢复。
7. 更新
cd /opt/vaultwarden
docker compose pull && docker compose up -d
数据在卷里,更新无损。
三、备选:官方 Bitwarden 自托管
标准部署(脚本,企业向)
curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" \
&& chmod 700 bitwarden.sh
./bitwarden.sh install # 交互:填域名、Let's Encrypt(y)、installation id/key
./bitwarden.sh start
- 需要在 https://bitwarden.com/host 用邮箱获取 installation id / key。
- 资源占用高(MSSQL),适合企业。
- 客户端同样在登录时填自建 Server URL。
Lite 部署(原 Unified,个人向)
单镜像 ghcr.io/bitwarden/lite,≥ 200 MB 内存,支持 SQLite/PG/MySQL/MSSQL,支持 ARM(树莓派、NAS)。
示例 settings.env:
BW_DOMAIN=vault.example.com
BW_DB_PROVIDER=sqlite
BW_DB_FILE=/etc/bitwarden/vault.db
BW_INSTALLATION_ID=你的id
BW_INSTALLATION_KEY=你的key
然后 docker run -d --name bitwarden -v $(pwd)/bwdata:/etc/bitwarden -p 80:8080 --env-file settings.env ghcr.io/bitwarden/lite
四、关键提醒
- HTTPS 是硬性要求:客户端拒绝纯 HTTP;必须有域名 + 受信任证书(Caddy/NGINX + Let’s Encrypt 最省事)。
- 备份优先:自建后你就是运维方,库丢了没人能帮你恢复。
- 客户端零改动:所有方案都复用官方 Bitwarden 客户端,只是把 Server URL 指向你自己的地址。
- WebSocket 同步:若用自有反代,记得转发
/notifications/hub的 Upgrade/Connection 头,否则多端不会实时同步。 - 安全基线:关注册、强 ADMIN_TOKEN、防火墙只开 80/443/SSH、定期更新补丁。
五、常见问题
- 家庭宽带没公网 IP? 可用内网穿透(如 Tailscale)把 Vaultwarden 只暴露给自己,不公开到公网,安全性更高。
- Vaultwarden 安全吗? 与 Bitwarden 同样的客户端加密:数据在本地加密后才上传,服务端只存密文。配合 HTTPS + 关注册 + 备份,是自托管的安全方案。
- 和 1Password 比? 1Password 更省心但贵且全云端;Vaultwarden 免费、数据自有,代价是要自己维护服务器和备份。