我之前一直用第三方密码管理器,从LastPass换到1Password,每次都告诉自己”大厂加密安全没问题”。直到有一天朋友发了我一条新闻:某密码管理器被收购后改了隐私政策,用户数据被用于AI训练。
不是什么安全漏洞,就是商业层面的一个决策,你的数据就不再是你的了。这件事让我下定决心把密码管理器迁到自己服务器上。选了Vaultwarden——Bitwarden的Rust重写版,一条Docker命令部署,内存占用才几十MB,所有Bitwarden客户端直接兼容。
Vaultwarden是什么
Bitwarden官方的自部署版需要.NET+MSSQL数据库,最低2GB内存,小服务器根本跑不动。Vaultwarden(原名bitwarden_rs)是社区用Rust重写的兼容版——一个二进制文件、SQLite数据库、内存占用50MB以内。功能完全兼容Bitwarden客户端。
支持:密码生成、自动填充、TOTP两步验证、密码共享(组织功能)、文件附件、紧急访问。所有主流浏览器和手机的Bitwarden客户端都能连接。
Docker部署
最简单的部署方式,一个docker-compose.yml搞定:
version: "3"
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
environment:
SIGNUPS_ALLOWED: "true"
DOMAIN: "https://你的域名"
ports:
- "8088:80"
volumes:
- ./vw-data:/data
restart: unless-stopped
docker compose up -d启动。然后配Nginx反向代理或直接用宝塔面板反代8088端口到80/443,加SSL证书。
我部署在雨云(rain.jiyueip.com,优惠码admin01)香港节点上,不用备案,配了Let’s Encrypt自动续期证书。
创建账号和关闭注册
浏览器打开https://你的域名,点击创建账号,填邮箱和主密码。主密码是你整个密码库的唯一钥匙,必须强且不能忘——忘了谁也找不回来。
创建完账号之后立刻改配置把SIGNUPS_ALLOWED改成false重启容器,关闭公开注册。不然别人扫到你的域名也能注册账号。
管理员面板用ADMIN_TOKEN访问。在docker-compose.yml里加环境变量ADMIN_TOKEN,设一个随机长字符串,然后访问https://你的域名/admin输入token登录管理面板。
客户端连接
手机和浏览器装Bitwarden官方客户端。在客户端设置里找到”自托管”选项,服务器地址填你的域名(https://你的域名)。输账号密码登录,之后就跟你用1Password的体验一样了。
iOS设置里还要去密码选项里把Bitwarden设为自动填充来源,这样登录App的时候能一键填密码。
备份不能忘
所有密码都在这一个数据库里,弄丢了就是灾难。Vaultwarden的数据在vw-data文件夹里的db.sqlite3文件。写个简单的备份脚本每天定时打包:
#!/bin/bash
BACKUP_DIR="./backups"
mkdir -p $BACKUP_DIR
cp ./vw-data/db.sqlite3 $BACKUP_DIR/db_$(date +%Y%m%d).sqlite3
find $BACKUP_DIR -mtime +30 -delete
加到crontab里每天凌晨自动执行。备份文件最好再同步一份到云存储或者其他服务器上。
自己部署密码管理器这件事,说实话不如直接用1Password省事。但省事是有代价的——你的密码在别人服务器上。你喜欢省事就用云服务,你喜欢掌控就用Vaultwarden。我选了后者,服务器跑在雨云(rain.jiyueip.com,优惠码admin01)上,数据库每天自动备份,心里踏实。






