Docker 部署 Bitwarden 自建密码管理教程(Vaultwarden 轻量版)
说明:官方 Bitwarden 自托管版需要 8+ 个容器、内存占用高(≥2G),对个人用户不友好。 推荐使用 Vaultwarden(原 bitwarden_rs,Rust 重写的兼容实现):单容器、内存占用~100MB、兼容所有 Bitwarden 客户端(浏览器插件 / 手机 App / 桌面端),是个人 / 小团队自建的事实标准方案。
一、前置准备
# 确认Docker已安装并运行
docker --version
docker compose version
# 开放端口(默认80/443,或自定义8080)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
云服务器:安全组放行对应端口。
二、方案 1:docker run 一键启动(最快)
docker run -d \
--name vaultwarden \
--restart=unless-stopped \
-v /bw-data:/data \
-p 8080:80 \
-e WEBSOCKET_ENABLED=true \
-e SIGNUPS_ALLOWED=true \
vaultwarden/server:latest
参数说明:
-v /bw-data:/data:数据持久化目录,务必挂载-p 8080:80:宿主机 8080 映射容器 80WEBSOCKET_ENABLED=true:开启实时同步(推荐)SIGNUPS_ALLOWED=true:首次启动允许注册;注册完第一个管理员账号后务必关掉
三、方案 2:docker-compose(推荐,便于维护)
新建目录并编写 docker-compose.yml:
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
volumes:
- ./data:/data
- ./bwrs-icons:/var/lib/vaultwarden/icon-cache
ports:
- "8080:80"
environment:
# 开启WebSocket实时同步
WEBSOCKET_ENABLED: "true"
# 首次安装后改为false,关闭公开注册
SIGNUPS_ALLOWED: "false"
# 管理后台访问密钥(启动后访问 /admin 用,改成自己的强密码)
ADMIN_TOKEN: "ChangeMe_StrongAdminToken_2026!"
# 时区
TZ: "Asia/Shanghai"
# 域名(配了反代后填你的域名,例如 https://bw.example.com)
# DOMAIN: "https://bw.example.com"
启动:
docker compose up -d
查看日志:
docker logs -f vaultwarden
四、首次访问与注册
- 浏览器打开:
http://你的服务器IP:8080 - 点击 Create Account 注册第一个账号(邮箱 + 主密码)
- 登录后即可添加密码、卡片、安全笔记
- 重要安全步骤:
- 编辑
docker-compose.yml,把SIGNUPS_ALLOWED改为"false" - 重启:
docker compose up -d(防止别人注册)
- 编辑
- 管理后台:
http://IP:8080/admin,输入ADMIN_TOKEN进入,可配置邮件、域名、版本。
五、客户端连接
- 浏览器插件:Chrome/Firefox 商店搜 Bitwarden,安装后 → 设置 → 服务器地址填
http://IP:8080 - 手机 App:Bitwarden App → 设置 → 自托管服务器 → 填你的地址
- 桌面端:设置 → 自托管环境 → 填 URL
⚠️ HTTP 明文会提示不安全,生产建议配 HTTPS(见下)。
六、配 HTTPS(Nginx 反向代理 + 域名,强烈推荐)
没有 HTTPS,浏览器和手机端会拒绝明文密码传输。以 Nginx 为例:
server {
listen 443 ssl;
server_name bw.example.com;
ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
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";
}
}
同时把 compose 里 DOMAIN 改成 https://bw.example.com,重启容器。
证书可用 certbot 自动申请:
certbot --nginx -d bw.example.com
七、数据备份
所有数据都在 ./data 目录(SQLite 数据库 db.sqlite3、附件、配置),直接整目录备份即可:
# 简单备份
tar -czf vaultwarden-backup-$(date +%F).tar.gz /opt/vaultwarden/data
# 定时任务每日备份(crontab -e)
0 3 * * * tar -czf /backup/vw-$(date +\%F).tar.gz /opt/vaultwarden/data
恢复:把备份解压覆盖 data/ 目录,重启容器。
八、升级
cd /opt/vaultwarden
docker compose pull
docker compose up -d
九、常用环境变量速查
表格
| 变量 | 作用 |
|---|---|
SIGNUPS_ALLOWED | 是否允许公开注册,装完改 false |
ADMIN_TOKEN | 管理后台 /admin 的登录密钥 |
WEBSOCKET_ENABLED | 实时同步,true |
DOMAIN | 完整外部访问 URL(含 https://) |
DATABASE_URL | 可选,用 PostgreSQL/MySQL 替代默认 SQLite |
ENABLE_HTTPS | 容器内直接开 TLS(一般反代处理,不需要) |
十、常见问题
- 打不开网页:先
docker ps看容器是否 Up;docker logs vaultwarden看报错;防火墙 / 安全组放行端口。 - 手机 / 插件连不上:地址末尾不要加斜杠;确认服务器端口通;HTTPS 证书要受信任(用 Let’s Encrypt,别用自签)。
- 注册后忘记关注册:
SIGNUPS_ALLOWED=false重启即可;已注册的垃圾账号可在/admin后台删除。 - 数据放哪:
/opt/vaultwarden/data/db.sqlite3,这是最核心的备份文件。 - 官方 vs Vaultwarden:Vaultwarden 不支持官方企业版组织 / SSO 等高级功能,个人和小团队完全够用;团队 / 企业建议用官方 self-hosted 或 Bitwarden 云。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容